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

 
EgorKim:

Как то так.

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

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

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


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

 
Vladimir Karputov:

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


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

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

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

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

 
EgorKim:

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

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

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

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

 
EgorKim:

Как то так.

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

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

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

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

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

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

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

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

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

 
Artyom Trishkin:

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

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

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

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

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

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

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

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

 
EgorKim:

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

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

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

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

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

 
EgorKim:

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

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

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

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

Ошибка в самом индикаторе.

Уже кучю советников переписал и такая проблема впервые.

Можете сами посмотреть и собрать советник, логику я привел выше.

И убедиться как балдеет терминал и тестер. Результаты пляшут даже при одинаковых параметрах индикатора)

 
Vladimir Karputov:

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

Да

https://www.mql5.com/ru/code/64

Plombiers - Осциллятор в канале
Plombiers - Осциллятор в канале
  • www.mql5.com
Просмотров: 6747 Рейтинг: Опубликован: 2010.01.26 12:54 Обновлен: 2016.11.22 07:33 Пример использования канала и осциллятора Stochastic. Иногда полезно смотреть поведение осциллятора в канале. Оценка ситуации упрощается. Изменяя параметры, можно гибко настроить отображение индикатора. Bulls Bears Power...
 

В общем пока можете потестировать (работает на индикаторе Plombiers - Осциллятор в канале - индикатор должен быть в папке [data folder]\MQL5\Indicators\plombiers.mq5)


Идея торговой стратегии

Советник работает по пользовательскому индикатору Plombiers. Для формирования сигналов рассматриваются две линии индикатора: "Resistance" и "Support".

Plombiers EA

Сигнал на открытие позиции BUY: цена Low на баре #1 была ниже линии "Support" на баре #1

Сигнал на открытие позиции SELL: цена High на баре #1 была выше линии "Resistance" на баре #1

//+------------------------------------------------------------------+
//| Search trading signals                                           |
//+------------------------------------------------------------------+
bool SearchTradingSignals(void)
  {
   double means[],resistance[],support[];
   MqlRates rates[];
   ArraySetAsSeries(means,true);
   ArraySetAsSeries(resistance,true);
   ArraySetAsSeries(support,true);
   ArraySetAsSeries(rates,true);
   int start_pos=0,count=3;
   if(!iGetArray(handle_iCustom,0,start_pos,count,means) || 
      !iGetArray(handle_iCustom,1,start_pos,count,resistance) || 
      !iGetArray(handle_iCustom,2,start_pos,count,support) || 
      CopyRates(m_symbol.Name(),Period(),start_pos,count,rates)!=count)
     {
      return(false);
     }

   int size_need_position=ArraySize(SNeedPosition);
   if(rates[1].low<support[1])
     {
      if(!InpReverse)
        {
         ArrayResize(SNeedPosition,size_need_position+1);
         SNeedPosition[size_need_position].pos_type=POSITION_TYPE_BUY;
         return(true);
        }
      else
        {
         ArrayResize(SNeedPosition,size_need_position+1);
         SNeedPosition[size_need_position].pos_type=POSITION_TYPE_SELL;
         return(true);
        }
     }
   if(rates[1].high>resistance[1])
     {
      if(!InpReverse)
        {
         ArrayResize(SNeedPosition,size_need_position+1);
         SNeedPosition[size_need_position].pos_type=POSITION_TYPE_SELL;
         return(true);
        }
      else
        {
         ArrayResize(SNeedPosition,size_need_position+1);
         SNeedPosition[size_need_position].pos_type=POSITION_TYPE_BUY;
         return(true);
        }
     }
//---
   return(true);
  }
 
Vladimir Karputov:

В общем пока можете потестировать (работает на индикаторе Plombiers - Осциллятор в канале - индикатор должен быть в папке [data folder]\MQL5\Indicators\plombiers.mq5)


Идея торговой стратегии

Советник работает по пользовательскому индикатору Plombiers. Для формирования сигналов рассматриваются две линии индикатора: "Resistance" и "Support".


Сигнал на открытие позиции BUY: цена Low на баре #1 была ниже линии "Support" на баре #1

Сигнал на открытие позиции SELL: цена High на баре #1 была выше линии "Resistance" на баре #1

Со старшего таймфрейма возьмите данные Support и Resistance

Т.е на входе оптимизатора должен быть MTF индикатор

input ENUM_TIMEFRAMES TimeFramePlombiers=PERIOD_H4;

handle_Plombiers=iCustom(Symbol(),TimeFramePlombiers,"plombiers",итд);

Как то так

Причина обращения: