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

 
vponed:

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

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

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

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

Смещение по вертикале не проверили.

 
Vladimir Karputov:

Смещение по вертикале не проверили.

Я так понимаю, что вы о точках привязки объекта. 
Про точки привязки раньше нашел, но они странно работают. Если сигнал на покупку, мне надо нарисовать стрелочку вверх под свечой.
По логике надо писать ANCHOR_BOTTOM, но работает почему-то наоборот, как в коде ниже. Благо метод тыка всего два раза пришлось использовать, а не 22)

ObjectCreate(0,obj_name_jur,OBJ_ARROW_UP,0,obj_time,ilow_can);
ObjectSetInteger(0,obj_name_jur,OBJPROP_ANCHOR,ANCHOR_TOP);
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Способы привязки объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Способы привязки объектов
  • www.mql5.com
Способы привязки объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
vponed:

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

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

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

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

1. элементарно эффективнее и быстрее

2. всё таки  ANCHOR_BOTTOM для стрелки вверх, не помогает?

 
Aleksey Mavrin:

1. элементарно эффективнее и быстрее

2. всё таки  ANCHOR_BOTTOM для стрелки вверх, не помогает?

в общем, если стрелка над свечкой должна быть, то надо писать ANCHOR_BOTTOM. в моем случае, это стрелка вниз. так что помогает

 
vponed:

Я так понимаю, что вы о точках привязки объекта. 
Про точки привязки раньше нашел, но они странно работают. Если сигнал на покупку, мне надо нарисовать стрелочку вверх под свечой.
По логике надо писать ANCHOR_BOTTOM, но работает почему-то наоборот, как в коде ниже. Благо метод тыка всего два раза пришлось использовать, а не 22)

Почему BOTTOM? Стрелка вверх, ее цена, по которой она отображается, должна быть сверху стрелки. Поэтому не BOTTOM, а TOP!

 
Ihor Herasko:

Почему BOTTOM? Стрелка вверх, ее цена, по которой она отображается, должна быть сверху стрелки. Поэтому не BOTTOM, а TOP!

Ага, я теперь понял логику. Но заработало еще до этого момента)

 
vponed:

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

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

TimeToStruct(candle_date_hist[0],date_for_req); //преобразуем дату первой свечки в нормальный вид

Здесь. 

 
Mikhail Mishanin:

Используйте

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

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

Попробовал покурить тему поподробнее, документации на тему практически нет. " Функция  OnTester() является обработчиком события  Tester, которое автоматически генерируется по окончании исторического тестирования ". Советником при заданных условиях изменяется переменная profit, попробовал вернуть ее онтестером, ноль реакции. Где задается критерий custom max, и как это прописать в коде непонятно.
Может знаете, как реализовать простую задачу: использовать оптимизацию встроенного тестера не на непосредственно прибыли, а на пользовательской переменной?
Костыль в голову пришел: записать ее в файл, но это криво, автоматом оптимизировать при множестве изменений параметров инструментов и тф будет крайне неудобно.

 
vponed:

Попробовал покурить тему поподробнее, документации на тему практически нет. " Функция  OnTester() является обработчиком события  Tester, которое автоматически генерируется по окончании исторического тестирования ". Советником при заданных условиях изменяется переменная profit, попробовал вернуть ее онтестером, ноль реакции. Где задается критерий custom max, и как это прописать в коде непонятно.
Может знаете, как реализовать простую задачу: использовать оптимизацию встроенного тестера не на непосредственно прибыли, а на пользовательской переменной?
Костыль в голову пришел: записать ее в файл, но это криво, автоматом оптимизировать при множестве изменений параметров инструментов и тф будет крайне неудобно.

Куда подробнее?))) Функция  double  OnTester(void); возвращает значение через  return(ret);

ret(ваше имя переменной) и будет  критерий custom max

что в тестере увидите в отдельном столбце при оптимизации и отдельным значением в отчёте)

эксперт будет торговать на указанном Вами отрезке ценовых данных, 

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

 
Mikhail Mishanin:

Куда подробнее?))) Функция  double  OnTester(void); возвращает значение через  return(ret);

ret(ваше имя переменной) и будет  критерий custom max

что в тестере увидите в отдельном столбце при оптимизации и отдельным значением в отчёте)

эксперт будет торговать на указанном Вами отрезке ценовых данных, 

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

Так нету ни кустом макс, ни пользовательского критерия в отчете

#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
int profit = 0;
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }

void OnTick()
  {
   profit++;
  }
double OnTester(void)
  {
   return(profit);
  }

В этом примере даже параметров нет.  Во вкладке оптимизации после прогона нули, никакого кустом макс. Хорошо, поставлю какой-нибудь параметр. input int i = 0;

Теперь можно оптимизировать i,  но никакого кустом макса не появилось.
Чего-то я не понимаю

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