Скачать MetaTrader 5

Помогите разобраться!

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Evgeniy Zhdan
6090
Evgeniy Zhdan  

Всем привет. Пожалуйста, помогите разобраться с совой. Работает на МАСД нескольких ТФ - когда МАКДы на 6 таймфреймах идут в 1 сторону - он открывать позу. Входит вроде бы нормально,  но при закрытии по тейку открывается вновь ну и соответственно ловит откат и лосей. Хочу сделать, чтобы он открывал сделку  по сигналу, закрывался по тейк или стопу и потом мог открыть новый ордер на этой паре не раньше скажем чем через час. Желательно этот параметр регулировать во внешних переменных. Код прилагаю:

 

//+------------------------------------------------------------------+

//|                                                  MACD_MTF_EA.mq4 |

//+------------------------------------------------------------------+



 extern string com          = "Параметры торговли";

 extern double lots         = 0.01;

 extern int    stoploss     = 20;

 extern int    takeprofit   = 30;

 extern int    slippage     = 1;

 extern int    magic        = 654321;

 extern string comment      = "My_EA";

  extern string com7         = "Данные MACD на m1";

 extern int  FastEMA1m      =12;

 extern int  SlowEMA1m      =26;

 extern int SignalSMA1m       =9;

 extern string com1         = "Данные MACD на m5";

 extern int  FastEMA        =12;

 extern int  SlowEMA        =26;

 extern int SignalSMA       =9;

 extern string com2         = "Данные MACD на m15";

 extern int FastEMA15       =12;

 extern int SlowEMA15       =26;

 extern int SignalSMA15     =9;

 extern string com3         = "Данные MACD на m30";

 extern int FastEMA30       =12;

 extern int SlowEMA30       =26;

 extern int SignalSMA30     =9;

 extern string com4         = "Данные MACD на н1";

 extern int FastEMAh1       =12;

 extern int SlowEMAh1       =26;

 extern int SignalSMAh1     =9;

 extern string com5         = "Данные MACD на h4";

 extern int FastEMAh4       =12;

 extern int SlowEMAh4       =26;

 extern int SignalSMAh4     =9;

//+------------------------------------------------------------------+

//| expert initialization function                                   |

//+------------------------------------------------------------------+



double SL,TP;

int ticket;





int init()

  {

if (Digits == 3 || Digits ==5) // проверяем 5 или 4 знак

{

takeprofit *=10;

stoploss   *=10;

slippage   *=10;

}

   return(0);

  }





int deinit()

  {



   return(0);

  }





int start()

  {

  int kolpos = 0; // счетчик ордеров

  //MACD 1m

   double  macd1osn  = iMACD(Symbol(),PERIOD_M1,FastEMA1m,SlowEMA1m,SignalSMA1m,PRICE_CLOSE,MODE_MAIN,0);

  double  macd1sign = iMACD(Symbol(),PERIOD_M1,FastEMA1m,SlowEMA1m,SignalSMA1m,PRICE_CLOSE,MODE_SIGNAL,0);

  //MACD 5m

  double  macd5osn  = iMACD(Symbol(),PERIOD_M5,FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE,MODE_MAIN,0);

  double  macd5sign = iMACD(Symbol(),PERIOD_M5,FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE,MODE_SIGNAL,0);

  //MACD 15m

  double  macd15osn  = iMACD(Symbol(),PERIOD_M15,FastEMA15,SlowEMA15,SignalSMA15,PRICE_CLOSE,MODE_MAIN,0);

  double  macd15sign = iMACD(Symbol(),PERIOD_M15,FastEMA15,SlowEMA15,SignalSMA15,PRICE_CLOSE,MODE_SIGNAL,0);  

   //MACD 30m

  double  macd30osn  = iMACD(Symbol(),PERIOD_M30,FastEMA30,SlowEMA30,SignalSMA30,PRICE_CLOSE,MODE_MAIN,0);

  double  macd30sign = iMACD(Symbol(),PERIOD_M30,FastEMA30,SlowEMA30,SignalSMA30,PRICE_CLOSE,MODE_SIGNAL,0);  

  //MACD h1

  double  macdh1osn  = iMACD(Symbol(),PERIOD_H1,FastEMAh1,SlowEMAh1,SignalSMAh1,PRICE_CLOSE,MODE_MAIN,0);

  double  macdh1sign = iMACD(Symbol(),PERIOD_H1,FastEMAh1,SlowEMAh1,SignalSMAh1,PRICE_CLOSE,MODE_SIGNAL,0);  

  //MACD h4

  double  macdh4osn  = iMACD(Symbol(),PERIOD_H4,FastEMAh4,SlowEMAh4,SignalSMAh4,PRICE_CLOSE,MODE_MAIN,0);

  double  macdh4sign = iMACD(Symbol(),PERIOD_H4,FastEMAh4,SlowEMAh4,SignalSMAh4,PRICE_CLOSE,MODE_SIGNAL,0); 

  

// учитываем ордера для иднтифицирования своих сделок



 for (int pos = 0; pos < OrdersTotal (); pos ++)

 {

 OrderSelect (pos, SELECT_BY_POS, MODE_TRADES);

 if (OrderSymbol () == Symbol ()&& OrderMagicNumber() == magic)

     kolpos ++;  

 }

 if (kolpos == 0)

 {

     

 // Покупка

 

 if (macd1sign<macd1osn && macd5sign<macd5osn &&  macd15sign<macd15osn && macd30sign<macd30osn && macdh1sign<macdh1osn && macdh4sign<macdh4osn)

 {

      SL = NormalizeDouble (Ask - stoploss*Point,Digits);

      TP = NormalizeDouble (Ask + takeprofit*Point,Digits);

     ticket = OrderSend (Symbol(),OP_BUY,lots,Ask,slippage, 0,0,comment,magic,0,Green);

   

      

       if (ticket>0)

        {

   

   if (OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES) ==true)   // выбираем открытый ордер для модификации Сл и ТП

       OrderModify (ticket,OrderOpenPrice(),SL,TP,0);   // Модифицируем для установки Сл и ТП для ЕСН счетов

      

       }

     }

 }

 

 // ---------------------Продажа

 

 if (kolpos == 0)

 {

 if (macd1sign>macd1osn && macd5sign>macd5osn &&  macd15sign>macd15osn && macd30sign>macd30osn && macdh1sign>macdh1osn && macdh4sign>macdh4osn)

 {

       SL = NormalizeDouble(Bid + stoploss * Point,Digits);

       TP = NormalizeDouble(Bid - takeprofit * Point,Digits);

       ticket = OrderSend (Symbol(),OP_SELL,lots,Bid,slippage, 0,0,comment,magic,0,Red);

   

      

       if (ticket>0)

   {

   

   if (OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES) ==true)   // выбираем открытый ордер для модификации Сл и ТП

       OrderModify (ticket,OrderOpenPrice(),SL,TP,0);   // Модифицируем для установки Сл и ТП для ЕСН счетов

      

       }

     }

 }

 

 

   return(0);

  }

//+------------------------------------------------------------------+



 
TarasBY
1740
TarasBY  

Если, я Вас правильно понял.

P.S. Попутно оптимизировал код.

Файлы:
Evgeniy Zhdan
6090
Evgeniy Zhdan  
TarasBY:

Если, я Вас правильно понял.

P.S. Попутно оптимизировал код.


Спасибо! Я, как начинающий, но амбициозный программист, искренне Вас благодарю, о, уважаемый!
Sceptic Philozoff
Модератор
17843
Sceptic Philozoff  
Реклама удалена.
Evgeniy Zhdan
6090
Evgeniy Zhdan  
TarasBY:

Если, я Вас правильно понял.

P.S. Попутно оптимизировал код.


Я так понимаю, параметр SleepOnBarAfterTrade = 1;

отвечает за количество баров, которые должны пройти после одной сделки, чтобы можно было сделать следующую.

Но он не работает.  Поставил сову на м1,    SleepOnBarAfterTrade = 240;  (т.е. 4 часа). Сделка открылась, закрылась по стопу и тут снова сова открыла ордер. Хотя не должна. Пожалуйста, посмотрите что там с ней. Мне немного трудно в чужом коде разобраться. Заранее спасибо!

TarasBY
1740
TarasBY  
remon:


Я так понимаю, параметр SleepOnBarAfterTrade = 1;

отвечает за количество баров, которые должны пройти после одной сделки, чтобы можно было сделать следующую.

Но он не работает.  Поставил сову на м1,    SleepOnBarAfterTrade = 240;  (т.е. 4 часа). Сделка открылась, закрылась по стопу и тут снова сова открыла ордер. Хотя не должна. Пожалуйста, посмотрите что там с ней. Мне немного трудно в чужом коде разобраться. Заранее спасибо!

Да, по привычке не учёл 0-вой бар. Эту строчку:

    if (li_Bars > 0) if (li_Bars < SleepOnBarAfterTrade) return;

запишите так:

    if (li_Bars >= 0) if (li_Bars < SleepOnBarAfterTrade) return;

должно работать.

P.S. И ещё одну досадную ошибку нашёл. Теперь работает.

Файлы:
Evgeniy Zhdan
6090
Evgeniy Zhdan  
TarasBY:

Да, по привычке не учёл 0-вой бар. Эту строчку:

запишите так:

должно работать.

P.S. И ещё одну досадную ошибку нашёл. Теперь работает.


Спасибо!

Скажите, а в чем разница этих параметров?

extern int    SleepOnBarAfterTrade = 1;
extern int    SignalSendOnBar      = 1;      // На каком баре (от текущего) получаем сигнал на открытие
TarasBY
1740
TarasBY  
extern int    SleepOnBarAfterTrade = 1;

- параметр относительно от предыдущей сделки.

extern int    SignalSendOnBar      = 1;

- параметр относительно текущего бара.

У них разная относительность. :)))

Evgeniy Zhdan
6090
Evgeniy Zhdan  
TarasBY:

- параметр относительно от предыдущей сделки.

- параметр относительно текущего бара.

У них разная относительность. :)))


ясно. еще раз срасибо!
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий