- FOREX - Тенденции, прогнозы и следствия (Эпизод № 28: Август 2013) Продолжение следует...
- Запуск тестирования на агентах
- Не могу изменить цену продукта.
Мы же с Вами уже говорили:
- обязательно проверяйте (или по крайней мере распринтовывайте) результат торговой операции
- смените торговый сервер
P.s. Сервер у меня официальный, открыт лицевой счет от брокера Открытие, не демо.
Да ничего не открывается, даже визуальное тестирование. Я нажимаю на Старт и всё, вообще ничего не меняется, не открывается.
P.s. Сервер у меня официальный, открыт лицевой счет от брокера Открытие, не демо.
Проверка номер один: проверьте на стандартом советнике (\MQL5\Experts\Examples).
Проверка номер один: проверьте на стандартом советнике (\MQL5\Experts\Examples).
И конечно же там всё работает. Всё у меня только криво, видимо.
Это технический форум, поэтому очень желательно сразу сообщать:
- билд терминала и параметры операционной системы *после перезагрузки терминала первые три сточки из вкладки "Журнал"*
- символ на котором тестируете
- таймфрейм
- скриншот окна "Тестер стратегий":
- вкладка "Настройка"
- вкладка "Параметры"
- режим торговли:
- хедж
- или неттинг
Начнём с неработающего индикатора "ATR". (кстати индикатор тоже можно прогонять в тестере).
В OnInit() пропишем значения, которые не будут отображаться:
//--- indicator buffers mapping SetIndexBuffer(0,ExtATRBuffer,INDICATOR_DATA); //--- пустое значение для построения, для которого нет отрисовки PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0); return(INIT_SUCCEEDED);
OnCalculate():
Если prev_calculated==0 - значит устанавливаем ВСЕ элементы индикаторного буфера в одно значение (в данном случае в "0"):
if(prev_calculated==0) { ArrayInitialize(ExtATRBuffer,0.0); return(rates_total); }
Дальше: какой смысл вот этой строки:
if(dateCurr.day==datePred.day) ExtATRBuffer[rates_total-1]=ExtATRBuffer[rates_total-2];
?
Начнём с неработающего индикатора "ATR". (кстати индикатор тоже можно прогонять в тестере).
В OnInit() пропишем значения, которые не будут отображаться:
OnCalculate():
Если prev_calculated==0 - значит устанавливаем ВСЕ элементы индикаторного буфера в одно значение (в данном случае в "0"):
Дальше: какой смысл вот этой строки:
?
У меня данный индикатор работает положительно. Показания такие же, как и в аналоге TsLab.
На счет первых двух я не знаю.
На счет последнего, если день не закончился, то мы к буферу приравниваем предыдущее значение, за этот же день. И в итоге у нас весь день будет значится АТР за предыдущий день.
У меня данный индикатор работает положительно. Показания такие же, как и в аналоге TsLab.
На счет первых двух я не знаю.
На счет последнего, если день не закончился, то мы к буферу приравниваем предыдущее значение, за этот же день. И в итоге у нас весь день будет значится АТР за предыдущий день.
Хорошо,
if(dateCurr.day==datePred.day) ExtATRBuffer[rates_total-1]=ExtATRBuffer[rates_total-2];
оставим, а вот передача значения таймрейма - Вы передаёте ЧИСЛО, когда лучше и правильнее передавать таймрейм.
В итоге будет так:
//+------------------------------------------------------------------+ //| Get Open for specified bar index | //+------------------------------------------------------------------+ double iOpen(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT) { if(symbol==NULL) symbol=Symbol(); if(timeframe==0) timeframe=Period(); double Open[1]; double open=0; int copied=CopyOpen(symbol,timeframe,index,1,Open); if(copied>0) open=Open[0]; return(open); } //+------------------------------------------------------------------+ //| Get the High for specified bar index | //+------------------------------------------------------------------+ double iHigh(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT) { if(symbol==NULL) symbol=Symbol(); if(timeframe==0) timeframe=Period(); double High[1]; double high=0; int copied=CopyHigh(symbol,timeframe,index,1,High); if(copied>0) high=High[0]; return(high); } //+------------------------------------------------------------------+ //| Get Low for specified bar index | //+------------------------------------------------------------------+ double iLow(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT) { if(symbol==NULL) symbol=Symbol(); if(timeframe==0) timeframe=Period(); double Low[1]; double low=0; int copied=CopyLow(symbol,timeframe,index,1,Low); if(copied>0) low=Low[0]; return(low); }
Хорошо,
оставим, а вот передача значения таймрейма - Вы передаёте ЧИСЛО, когда лучше и правильнее передавать таймрейм.
В итоге будет так:
Я вас понял. Сам думал это поменять, но голова другим забита. Взял из статьи про переход из MQL4 на MQL5.
- 2010.05.11
- Sergey Pavlov
- www.mql5.com
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования