Пробую написать советника, на основе "простого эксперта" из учебника MQL4. Необходима помощь.

 

Всем привет!

Изучив в течении месяца учебник  MQL4, решил написать советника, чтобы не сочинять нового из-за отстутствии опыта, решил взять шаблон эксперта tradingexpert.mq4 из учебника.

Суть стратегии следующая: трехбарная система максимумов и минимумов "Ларри Вильямса", строим две трехдневные EMA  по максимуму и минимуму, продаем

на максимуме, поупаем на минимуме. 

В шаблоне в разделе глобальных переменных убрал строку extern double Rastvor =28.0; (собстевнно она не нужна), также удалил ее из торговых критериев.

Изменил в глобальных переменных значения МА на 3:

extern int Period_MA_1= 3; // Период МА 1
extern int Period_MA_2= 3; // Период МА 2

В разделе торговых критериев было:

//--------------------------------------------------------------- 5 --
   // Торговые критерии
   MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_LWMA,PRICE_TYPICAL,0); // МА_1
   MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_LWMA,PRICE_TYPICAL,0); // МА_2
 
   if (MA_1_t > MA_2_t + Rastvor*Point)         // Если разница между
     {                                          // ..МА 1 и 2 большая
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
   if (MA_1_t < MA_2_t - Rastvor*Point)         // Если разница между
     {                                          // ..МА 1 и 2 большая
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }
//--------------------------------------------------------------- 
стало:

//--------------------------------------------------------------- 5 --
// Торговые критерии
MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_EMA,PRICE_HIGH,0); // МА_1
MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_EMA,PRICE_LOW,0); // МА_2

if (PRICE_HIGH * Point >= MA_1_t * Point)    
    {                                                                    
  Opn_S=true;                                                  
  Cls_B=true;                                                 
    }

if (PRICE_LOW * Point <= MA_2_t * Point)    
    {                                                              
Opn_B=true; // Критерий откр. Buy
Cls_S=true; // Критерий закр. Sell
    }
//--------------------------------------------------------------- 

 

Теперь суть проблемы: система только открывает ордера на продажу, а покупать не хочет. В чем может быть ошибка? 

Вполне возможно, что где-то еще ошибки, прошу не судить строго, а помочь советом) 

 
Forexman77:

Всем привет!

Теперь суть проблемы: система только открывает ордера на продажу, а покупать не хочет. В чем может быть ошибка? 

Вполне возможно, что где-то еще ошибки, прошу не судить строго, а помочь советом) 

Надо смотреть ошибки выполнения на вкладке "Эксперты" под терминалом
 
_new-rena:
Надо смотреть ошибки выполнения на вкладке "Эксперты" под терминалом

Не поможет.  Непонятна логика внесенных изменений.

Константа Значение Описание
PRICE_CLOSE 0 Цена закрытия
PRICE_OPEN 1 Цена открытия
PRICE_HIGH 2 Максимальная цена
PRICE_LOW 3 Минимальная цена
 

 
Mislaid:

Не поможет.  Непонятна логика внесенных изменений.

Константа Значение Описание
PRICE_CLOSE 0 Цена закрытия
PRICE_OPEN 1 Цена открытия
PRICE_HIGH 2 Максимальная цена
PRICE_LOW 3 Минимальная цена
 
Это уже второе. Он же просил чтобы покупка просто открылась. Я подозреваю, что вылазит ошибка от недостатка денег или еще что-нибудь.... Логику потом пусть начинает мусолить, это дело увлекательное...
 
_new-rena:
Это уже второе. Он же просил чтобы покупка просто открылась. Я подозреваю, что вылазит ошибка от недостатка денег или еще что-нибудь.... Логику потом пусть начинает мусолить, это дело увлекательное...

Спасибо разобрался, получилось вот, что:

//--------------------------------------------------------------- 5 --
// Торговые критерии
MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_EMA,PRICE_HIGH,0);
MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_EMA,PRICE_LOW,0);

if ( iHigh (Symbol(),Period(),0) >= MA_1_t)
{
Opn_S=true;
}
if ( iLow (Symbol(),Period(),0) <= MA_2_t)
{
Opn_B=true;
}
//--------------------------------------------------------------- 6 --

 
if ( торговые условия)
     {                                          
      Opn_S=true;                              
      }
if ( торговые условия)
     {                                          
      Opn_B=true;                            
     }

После этого кода мне нужен код, который будет действовать отдельно от кода выше.

То есть позиция будет открываться и удерживаться по другим заданным критериям и когда они исчезнут осуществить выход из позиции и начать действовать по изначальным торговым условиям (код выше.)

Суть стратегии следующая два бара не касаются ЕМА мин. покупаем, два бара не касаются ЕМА макс. продаем.

Какой нужен код, чтобы это осуществить.

Пробую вставить в критерии вот это (не уверен, что этот код правильное решение):

else
    for(i=0;i<=Quant_Bars-1;i++)  
   if (Low[i]> MA_3_t)
     {
     Opn_B=true;
     }
      return(false);
Проходит без ошибок, но когда добавляю критерий на продажу ошибки выдает –это одна проблема.

Другая, как отсечь критерии от исполнения, что есть выше?

Третья задать параметры ЕМА по количеству дневных баров (каждый бар должен обращаться к ЕМА соответствующему его дню.)
 
Forexman77:

После этого кода мне нужен код, который будет действовать отдельно от кода выше.

То есть позиция будет открываться и удерживаться по другим заданным критериям и когда они исчезнут осуществить выход из позиции и начать действовать по изначальным торговым условиям (код выше.)

Суть стратегии следующая два бара не касаются ЕМА мин. покупаем, два бара не касаются ЕМА макс. продаем.

Какой нужен код, чтобы это осуществить.

Пробую вставить в критерии вот это (не уверен, что этот код правильное решение):

Проходит без ошибок, но когда добавляю критерий на продажу ошибки выдает –это одна проблема.

Другая, как отсечь критерии от исполнения, что есть выше?

Третья задать параметры ЕМА по количеству дневных баров (каждый бар должен обращаться к ЕМА соответствующему его дню.)

 

 

Готовите кашу из топора ;) ? Похоже, что Вам нужна вторая справа ссылка, которая находится на второй сверху строке страницы этого сайта. Поскольку в тех пяти что слева, толку Вы не нашли ))))))))))))))).
 
VladislavVG:
Готовите кашу из топора ;) ? Похоже, что Вам нужна вторая справа ссылка, которая находится на второй сверху строке страницы этого сайта. Поскольку в тех пяти что слева, толку Вы не нашли ))))))))))))))).

  Изучаю учебник MQL4, но все-таки хочется форсировать события.
Причина обращения: