Почему-то одинаковые обращения iTime iHigh и iLow дают разные значения

 
int history_depth = Bars(_Symbol,PERIOD_D1);
for(int i=0; i<history_depth; i++)
     {
      CopyTime(_Symbol,PERIOD_D1,history_depth-i,1,candle_date_hist); //копируем время дневок
      CopyHigh(_Symbol,PERIOD_D1,history_depth-i,1,candle_date_high);  
      double candle_high = candle_date_high[0];
      CopyLow(_Symbol,PERIOD_D1,history_depth-i,1,candle_date_low); 
      double candle_low = candle_date_low[0];
      TimeToStruct(candle_date_hist[0],date_for_req); //преобразуем дату первой свечки в нормальный вид
}

и так пробовал, и сяк. i менял. прибавлял к нему разные значения. разница в пару свечей все время, или в одну
Помогите разобраться, почему так

Еще один вопрос, есть ли возможность прокинуть тестеру фиктивную сделку? Или просто прибавить или убавить прибыли сколько-то пунктов? Мне это нужно, чтобы тестировать опционные стратегии с графика, цены из других источников буду получать.

 

А вы хотели чтобы iTime был равен iHigh и равен iLow?

У меня наверное лыжи плохие…)))))

 
vponed:

и так пробовал, и сяк. i менял. прибавлял к нему разные значения. разница в пару свечей все время, или в одну
Помогите разобраться, почему так

Еще один вопрос, есть ли возможность прокинуть тестеру фиктивную сделку? Или просто прибавить или убавить прибыли сколько-то пунктов? Мне это нужно, чтобы тестировать опционные стратегии с графика, цены из других источников буду получать.

так проще

datetime candle_date_hist[1];

for(int i= history_depth; i>=0; i--)

     {

      CopyTime(_Symbol,PERIOD_D1,i,1,candle_date_hist); //копируем время дневок

candle_date_hist должно быть массивом, а не переменной

остальное по этому же принципу

-------

... Или просто прибавить или убавить прибыли сколько-то пунктов?

Управляйте этим, изменяя экспертом/индикатором профит

 
vponed:

и так пробовал, и сяк. i менял. прибавлял к нему разные значения. разница в пару свечей все время, или в одну
Помогите разобраться, почему так

Еще один вопрос, есть ли возможность прокинуть тестеру фиктивную сделку? Или просто прибавить или убавить прибыли сколько-то пунктов? Мне это нужно, чтобы тестировать опционные стратегии с графика, цены из других источников буду получать.

Используйте

"Функция OnTester() может быть использована только в экспертах при тестировании и предназначена в первую очередь для расчета некоторого значения, используемого в качестве критерия "Custom max" при оптимизации входных параметров."

вычисляйте свой критерий, или вообще режим - математические вычисления.

 

Alexey Viktorov:

А вы хотели чтобы iTime был равен iHigh и равен iLow?

У меня наверное лыжи плохие…)))))

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

Renat Akhtyamov:

так проще

datetime candle_date_hist[1];

for(int i= history_depth; i>=0; i--)

     {

      CopyTime(_Symbol,PERIOD_D1,i,1,candle_date_hist); //копируем время дневок

candle_date_hist должно быть массивом, а не переменной

остальное по этому же принципу

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

Renat Akhtyamov:

... Или просто прибавить или убавить прибыли сколько-то пунктов?

Управляйте этим, изменяя экспертом/индикатором профит

А как его изменить программно, я ж об этом и спрашивал)))

 
vponed:

я не хотел, чтобы он был равен. я хотел, чтобы эти данные соответствовали одной свече.

Это была шутка.

Попробуйте запросить всё одним махом в структуру MqlRates

 
Mikhail Mishanin:

Используйте

"Функция OnTester() может быть использована только в экспертах при тестировании и предназначена в первую очередь для расчета некоторого значения, используемого в качестве критерия "Custom max" при оптимизации входных параметров."

вычисляйте свой критерий, или вообще режим - математические вычисления.

Спасибо за наводку, покурил тему, кажется понял. Результат функции onTester это и есть Custom Max.
Непонятно, получится ли превратить результат функции в графу прибыли, чтобы смотреть максимальный баланс и прочие показатели, именно к прибыли привязанные. но это я на практике посмотрю

 
Alexey Viktorov:

Это была шутка.

Попробуйте запросить всё одним махом в структуру MqlRates

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

 
vponed:

и так пробовал, и сяк. i менял. прибавлял к нему разные значения. разница в пару свечей все время, или в одну
Помогите разобраться, почему так

Еще один вопрос, есть ли возможность прокинуть тестеру фиктивную сделку? Или просто прибавить или убавить прибыли сколько-то пунктов? Мне это нужно, чтобы тестировать опционные стратегии с графика, цены из других источников буду получать.

Проверяйте возврат функций CopyХХХ на кол-во, если -1 значит что-то не так и в массиве значение полученное на прошлой итерации цикла.

А почему сразу не получаете все значения, почему по одному если вам всё равно цикл на все нужен?

CopyTime

Примечание

Если интервал запрашиваемых данных полностью находится вне доступных данных на сервере, то функция возвращает -1. В случае если запрашиваются данные за пределами TERMINAL_MAXBARS (максимальное количество баров на графике), функция также вернет -1.

При запросе данных из индикатора, если запрашиваемые таймсерии еще не построены или их необходимо загрузить с сервера, функция сразу же вернет -1, но при этом сам процесс загрузки/построения будет инициирован.

При запросе данных из эксперта или скрипта, будет инициирована загрузка с сервера, если локально этих данных у терминала нет, либо начнется построение нужной таймсерии, если данные можно построить из локальной истории, но они еще не готовы. Функция вернет то количество данных, которые будут готовы к моменту истечения таймаута, но загрузка истории будет продолжаться, и при следующем аналогичном запросе функция вернет уже больше данных.

 
vponed:

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

так и сделал, в итоге код стал проще, а работать стал лучше)

 
Aleksey Mavrin:

Проверяйте возврат функций CopyХХХ на кол-во, если -1 значит что-то не так и в массиве значение полученное на прошлой итерации цикла.

А почему сразу не получаете все значения, почему по одному если вам всё равно цикл на все нужен?

А зачем? получаю ровно то, что нужно. удобнее мне в общем.

Еще странная ситуация
получаю ценовые координаты для стрелочек совершенно одинаково, из одного и того же объекта MqlRate.

        double ilow_can = need_candle[0].low-150;
        double ihigh_can = need_candle[0].high+150;

но при отрисовке нижние стрелочки рисуются нормально, а верхние наезжают на свечу.

Почему так, ума не приложу. Все перепроверил по 10 раз.

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