КОД СОВЕТНИКА ДЛЯ МЕТАТРЕЙДЕР -------------------- -------------------

1
2
КОД СОВЕТНИКА ДЛЯ МЕТАТРЕЙДЕР 4
//+---------------------------------------------------------------------------------- // 1. После ПОЛОЖИТЕЛЬНОЙ сделки следующая сделка по следующему // сигналу индикатора открывается с лотом, умноженным на коэффициент. // После убыточной сделки или если КОЛИЧЕСТВО РАЗ УВЕЛИЧЕНИЯ ЦЕНЫ сделки // превышает указанный в настройках - сделка открывается первоначальным лотом. // // 2. Индикатор стохастик. (Уровни можно поставить значения 100 для покупки, // 0 для продажи и тогда уровней как бы не станет и будет просто пересечение.) // // 3. Если быстрая линия пересекает медленную снизу вверх на последнем закрытом баре // и быстрая линия на последнем закрытом баре ниже уровня 20 // и цена находится выше скользящих средних с более старших ТФ // и Первая скользящая > Второй МА на последнем закрытом баре - ПОКУПКА. // // 4. Если быстрая линия пересекает медленную сверху вниз на последнем закрытом баре // и быстрая линия на последнем закрытом баре выше уровня 80 // и цена находится ниже скользящих средних с более старших ТФ // и Первая скользящая < Второй МА на последнем закрытом баре - ПРОДАЖА. // // 5. Если поставить period = 0 или period2 = 0, то скользячки перестают учитываться. // //---------------------------------------------------------------------------------- #property strict /* объявление переменных */ extern double LotsNumber = 0.05; extern double km = 2; /* коэффициент умножения для Анти-мартингейла */ extern int N = 2; /* количество раз умножений цены */ extern int sl = 500; extern int tp = 300; extern string comment = "10"; extern int MagicNumber = 1; extern int period = 5; /* Период первой скользящей средней */ extern int ma_method = 0; extern int price = 0; extern int tf = 0; extern int period2 = 30; /* Период второй скользящей средней */ extern int ma_method2 = 0; extern int price2 = 0; extern int tf2 = 0; extern int k = 5; /* Период %К сктохастика */ extern int d = 3; /* Период %D сктохастика */ extern int z = 3; /* Замедление */ extern int m = 0; extern int stu = 70; /* Уровни стохастика. */ extern int std = 30; /* Уровни стохастика. */ extern int time = 15; /* количество минут через которое ордера закрываются советником */ int i,sch,ti,n; double posl,ma1,ma2,l,K1,K2,D1,D2; int init() {return(0);} int deinit() {return(0);} int start() { for (i=OrdersTotal()-1;i>=0;i--){ /* закрытие ордеров бай через time минут */ OrderSelect (i, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && OrderType()==OP_BUY && TimeCurrent()-OrderOpenTime()>=time*60){ OrderClose(OrderTicket(),OrderLots(),Bid,10,DarkGreen);}} for (i=OrdersTotal()-1;i>=0;i--){ /* закрытие ордеров селл через time минут */ OrderSelect (i, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && OrderType()==OP_SELL && TimeCurrent()-OrderOpenTime()>=time*60){ OrderClose(OrderTicket(),OrderLots(),Ask,10,DarkGreen);}} ma1 = iMA(NULL,tf,period,0,ma_method,price,1); /* расчет значений индикаторов */ ma2 = iMA(NULL,tf2,period2,0,ma_method2,price2,1); K1=iStochastic(NULL,0,k,d,z,m,0,MODE_MAIN,1); K2=iStochastic(NULL,0,k,d,z,m,0,MODE_MAIN,2); D1=iStochastic(NULL,0,k,d,z,m,0,MODE_SIGNAL,1); D2=iStochastic(NULL,0,k,d,z,m,0,MODE_SIGNAL,2); sch = 0; for(i=OrdersTotal()-1;i>=0;i--) { /* подсчет количества ордеров открытых советником */ OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) sch++; } if(sch==0 && posl!=Open[0] && K1>D1 && K2ma1 && Close[1]>ma2 && ma1>=ma2){ /* открытие ордеров бай */ posl=Open[0]; OrderSelect(ti,SELECT_BY_TICKET); if(OrderProfit()>0) {l=OrderLots()*km; n++;} if(OrderProfit()<0 || n>N || ti==0){ l=LotsNumber; n=0;} RefreshRates(); ti=OrderSend(Symbol(),OP_BUY,NormalizeDouble(l,2),Ask,100,0,0,comment,MagicNumber,0,DarkGreen); while(ti<0){RefreshRates(); ti=OrderSend(Symbol(),OP_BUY,NormalizeDouble(l,2),Ask,100,0,0,comment,MagicNumber,0,DarkGreen);}} sch = 0; for(i=OrdersTotal()-1;i>=0;i--) { /* подсчет количества ордеров открытых советником */ OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) sch++; } if(sch==0 && posl!=Open[0] && K1D2 && K1>stu && Close[1]0) {l=OrderLots()*km; n++;} if(OrderProfit()<0 || n>N || ti==0){ l=LotsNumber; n=0;} RefreshRates(); ti=OrderSend (Symbol(),OP_SELL,NormalizeDouble(l,2),Bid,100,0,0,comment,MagicNumber,0,Red); while(ti<0){RefreshRates(); ti=OrderSend (Symbol(),OP_SELL,NormalizeDouble(l,2),Bid,100,0,0,comment,MagicNumber,0,Red);}} for(i=OrdersTotal()-1;i>=0;i--){ /* установка стоплоса и тейкпрофита */ OrderSelect (i,SELECT_BY_POS,MODE_TRADES); if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && OrderType()==OP_BUY && OrderStopLoss()==0 && sl!=0) OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-sl*Point,OrderTakeProfit(),0,Blue); if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && OrderType()==OP_BUY && OrderTakeProfit()==0 && tp!=0) OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderOpenPrice()+tp*Point,0,Blue); if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && OrderType()==OP_SELL && OrderStopLoss()==0 && sl!=0) OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+sl*Point,OrderTakeProfit(),0,Blue); if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && OrderType()==OP_SELL && OrderTakeProfit()==0 && tp!=0) OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderOpenPrice()-tp*Point,0,Blue);}return(0);} //+---------------------------------------------------------------------------------- // 1. После ПОЛОЖИТЕЛЬНОЙ сделки следующая сделка по следующему // сигналу индикатора открывается с лотом, умноженным на коэффициент. // После убыточной сделки или если КОЛИЧЕСТВО РАЗ УВЕЛИЧЕНИЯ ЦЕНЫ сделки // превышает указанный в настройках - сделка открывается первоначальным лотом. // // 2. Индикатор стохастик. (Уровни можно поставить значения 100 для покупки, // 0 для продажи и тогда уровней как бы не станет и будет просто пересечение.) // // 3. Если быстрая линия пересекает медленную снизу вверх на последнем закрытом баре // и быстрая линия на последнем закрытом баре ниже уровня 20 // и цена находится выше скользящих средних с более старших ТФ // и Первая скользящая > Второй МА на последнем закрытом баре - ПОКУПКА. // // 4. Если быстрая линия пересекает медленную сверху вниз на последнем закрытом баре // и быстрая линия на последнем закрытом баре выше уровня 80 // и цена находится ниже скользящих средних с более старших ТФ // и Первая скользящая < Второй МА на последнем закрытом баре - ПРОДАЖА. // // 5. Если поставить period = 0 или period2 = 0, то скользячки перестают учитываться. // //---------------------------------------------------------------------------------- #property strict /* объявление переменных */ extern double LotsNumber = 0.05; extern double km = 2; /* коэффициент умножения для Анти-мартингейла */ extern int N = 2; /* количество раз умножений цены */ extern int sl = 500; extern int tp = 300; extern string comment = "10"; extern int MagicNumber = 1; extern int period = 5; /* Период первой скользящей средней */ extern int ma_method = 0; extern int price = 0; extern int tf = 0; extern int period2 = 30; /* Период второй скользящей средней */ extern int ma_method2 = 0; extern int price2 = 0; extern int tf2 = 0; extern int k = 5; /* Период %К сктохастика */ extern int d = 3; /* Период %D сктохастика */ extern int z = 3; /* Замедление */ extern int m = 0; extern int stu = 70; /* Уровни стохастика. */ extern int std = 30; /* Уровни стохастика. */ extern int time = 15; /* количество минут через которое ордера закрываются советником */ int i,sch,ti,n; double posl,ma1,ma2,l,K1,K2,D1,D2; int init() {return(0);} int deinit() {return(0);} int start() { for (i=OrdersTotal()-1;i>=0;i--){ /* закрытие ордеров бай через time минут */ OrderSelect (i, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && OrderType()==OP_BUY && TimeCurrent()-OrderOpenTime()>=time*60){ OrderClose(OrderTicket(),OrderLots(),Bid,10,DarkGreen);}} for (i=OrdersTotal()-1;i>=0;i--){ /* закрытие ордеров селл через time минут */ OrderSelect (i, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && OrderType()==OP_SELL && TimeCurrent()-OrderOpenTime()>=time*60){ OrderClose(OrderTicket(),OrderLots(),Ask,10,DarkGreen);}} ma1 = iMA(NULL,tf,period,0,ma_method,price,1); /* расчет значений индикаторов */ ma2 = iMA(NULL,tf2,period2,0,ma_method2,price2,1); K1=iStochastic(NULL,0,k,d,z,m,0,MODE_MAIN,1); K2=iStochastic(NULL,0,k,d,z,m,0,MODE_MAIN,2); D1=iStochastic(NULL,0,k,d,z,m,0,MODE_SIGNAL,1); D2=iStochastic(NULL,0,k,d,z,m,0,MODE_SIGNAL,2); sch = 0; for(i=OrdersTotal()-1;i>=0;i--) { /* подсчет количества ордеров открытых советником */ OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) sch++; } if(sch==0 && posl!=Open[0] && K1>D1 && K2ma1 && Close[1]>ma2 && ma1>=ma2){ /* открытие ордеров бай */ posl=Open[0]; OrderSelect(ti,SELECT_BY_TICKET); if(OrderProfit()>0) {l=OrderLots()*km; n++;} if(OrderProfit()<0 || n>N || ti==0){ l=LotsNumber; n=0;} RefreshRates(); ti=OrderSend(Symbol(),OP_BUY,NormalizeDouble(l,2),Ask,100,0,0,comment,MagicNumber,0,DarkGreen); while(ti<0){RefreshRates(); ti=OrderSend(Symbol(),OP_BUY,NormalizeDouble(l,2),Ask,100,0,0,comment,MagicNumber,0,DarkGreen);}} sch = 0; for(i=OrdersTotal()-1;i>=0;i--) { /* подсчет количества ордеров открытых советником */ OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) sch++; } if(sch==0 && posl!=Open[0] && K1D2 && K1>stu && Close[1]0) {l=OrderLots()*km; n++;} if(OrderProfit()<0 || n>N || ti==0){ l=LotsNumber; n=0;} RefreshRates(); ti=OrderSend (Symbol(),OP_SELL,NormalizeDouble(l,2),Bid,100,0,0,comment,MagicNumber,0,Red); while(ti<0){RefreshRates(); ti=OrderSend (Symbol(),OP_SELL,NormalizeDouble(l,2),Bid,100,0,0,comment,MagicNumber,0,Red);}} for(i=OrdersTotal()-1;i>=0;i--){ /* установка стоплоса и тейкпрофита */ OrderSelect (i,SELECT_BY_POS,MODE_TRADES); if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && OrderType()==OP_BUY && OrderStopLoss()==0 && sl!=0) OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-sl*Point,OrderTakeProfit(),0,Blue); if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && OrderType()==OP_BUY && OrderTakeProfit()==0 && tp!=0) OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderOpenPrice()+tp*Point,0,Blue); if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && OrderType()==OP_SELL && OrderStopLoss()==0 && sl!=0) OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+sl*Point,OrderTakeProfit(),0,Blue); if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && OrderType()==OP_SELL && OrderTakeProfit()==0 && tp!=0) OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderOpenPrice()-tp*Point,0,Blue);}return(0);}