Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1100

 
EgorKim:

У меня нет ошибок на текущем таймфрейме .

Проблема появляется если получать данные со старшего таймфрейма.

Явно проблема в индикаторе ,а не в моем советнике)

Причем в режиме оптимизации ошибки нет. Включаешь одиночный проход и визуализацию - есть ошибка. Дурка...

Вот тема из той же оперы, как я понимаю

https://www.mql5.com/ru/forum/190003

Вот модификация СОВЕТНИКА - в параметрах можно задавать таймфрейм индикатора. Работает и в тестере и онлайн.

//--- create handle of the indicator iCustom
   handle_iCustom=iCustom(Symbol(),Inp_period,"ind",
                          bars_IN,
                          SP,
                          N_Shift1,
                          Forecast,
                          kstd,
                          Oscilator,
                          N_Buff,
                          Ka,
                          La,
                          Za,
                          Oe,
                          Me,
                          DIGf);
Файлы:
Test.mq5  10 kb
 
Vladimir Karputov:

Вот модификация СОВЕТНИКА - в параметрах можно задавать таймфрейм индикатора. Работает и в тестере и онлайн.

Как тогда можно обьяснить что при оптимизации советник торгует . А при визуализации нет ни одной сделки?

 
EgorKim:

Как тогда можно обьяснить что при оптимизации советник торгует . А при визуализации нет ни одной сделки?

Какое условие на открытие позиции (номер индикаторного буфера и номер бара)?

 
Vladimir Karputov:

Какое условие на открытие позиции (номер индикаторного буфера и номер бара)?

Как то так.

Причем некоторые проходы оптимизатора совпадают в визуализаторе.

А некоторые проходы - вообще ни одной сделки

double price1=0.0;
price1=iCustomGet(handle_ind,1,0)
double price2=0.0;
price2=iCustomGet(handle_ind,2,0)
double open=0.0;   
double open          = iOpen(Symbol(),Period(),0);

   if(price1!=0.0 && price2!=0.0 && open!=0.0)
     {
      if(open<price1)
        {
         buy
        }
      if(open>price2)
        {
         sell
        }
      }
//+------------------------------------------------------------------+
//| Get value of buffers for the iCustom                             |
//|  the buffer numbers are the following:                           |
//+------------------------------------------------------------------+
double iCustomGet(int handle,const int buffer,const int index)
  {
   double Custom[1];
//--- reset error code 
   ResetLastError();
//--- fill a part of the iCustom array with values from the indicator buffer that has 0 index 
   if(CopyBuffer(handle,buffer,index,1,Custom)<0)
     {
      //--- if the copying fails, tell the error code 
      PrintFormat("Failed to copy data from the iCustom indicator, error code %d",GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated 
      return(0.0);
     }
   return(Custom[0]);
  }
//+------------------------------------------------------------------+

Мне кажется проблема в индикаторе.

И как верно заметил Артем , проблема в актуальных данных.

Только не хочет подсказать как это сделать)

 
EgorKim:

Как то так.

Причем некоторые проходы оптимизатора совпадают в визуализаторе.

А некоторые проходы - вообще ни одной сделки

Расхождения бывают из-за не инициализированных значений в индикаторном буфере - когда расчёт проходим мимо, в буфере может быть мусор.


Просто выводите на печать данные буфера при появлении сигнала.

 
Vladimir Karputov:

Расхождения бывают из-за не инициализированных значений в индикаторном буфере - когда расчёт проходим мимо, в буфере может быть мусор.


Просто выводите на печать данные буфера при появлении сигнала.

Вы говорите про советник?

Если про советник - я же обнуляю все в примере.

А вот если в индикаторе - то,может быть все что угодно. Не я автор 

 
EgorKim:

Вы говорите про советник?

Если про советник - я же обнуляю все в примере.

А вот если в индикаторе - то,может быть все что угодно. Не я автор 

Я говорил про индикатор: если пропустить в буфере какой-то индекс - там может быть мусор. В общем сначала надежный индикатор - потом уже по нему советник.

 
EgorKim:

Как то так.

Причем некоторые проходы оптимизатора совпадают в визуализаторе.

А некоторые проходы - вообще ни одной сделки

Мне кажется проблема в индикаторе.

И как верно заметил Артем , проблема в актуальных данных.

Только не хочет подсказать как это сделать)

Нет, я был не прав, думая, что у вас мультитаймфреймный индикатор.

У вас самый обычный индикатор, данные которого вы хотите получить с чужого таймфрейма.

В советнике нужно проверять актуальность данных с нужного таймфрейма. Если данных по этому тф ещё нет, то выходить до следующего тика.
А уже потом, когда все данные со старшего тф получены в нужном объёме - уже тогда вызывать индикатор.

Попробуйте так сделать.

 
Artyom Trishkin:

Нет, я был не прав, думая, что у вас мультитаймфреймный индикатор.

У вас самый обычный индикатор, данные которого вы хотите получить с чужого таймфрейма.

В советнике нужно проверять актуальность данных с нужного таймфрейма. Если данных по этому тф ещё нет, то выходить до следующего тика.
А уже потом, когда все данные со старшего тф получены в нужном объёме - уже тогда вызывать индикатор.

Попробуйте так сделать.

А как это сделать? В смысле проверить актуальность.

Ну проверяю я чтобы не 0.0 (код выше).

Что я могу ещё сделать? Что мне индикатор отдает - то я и принимаю.

На то он и индикатор

 
EgorKim:

А как это сделать? В смысле проверить актуальность.

Ну проверяю я чтобы не 0.0 (код выше).

Что я могу ещё сделать? Что мне индикатор отдает - то я и принимаю.

На то он и индикатор

Вы индикатор взяли из КодоБазы? Если так, то можно его URL?