Выпущена бета-версия MetaTrader 4 Build 529 с новым компилятором - страница 118

 
Candid:

Демо версии индикаторов не запускаются. По правому клику тестирование не предлагается совсем, по двойному клику и последующему нажатию кнопки "Тест" тестер загружается, но на кнопку "Старт" не реагирует совсем. Журнал тестера остаётся чистым. Советники запускаются. Билд 555.


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

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

 
stringo:

Функция IndicatorCounted() изначально была костылём. Кто программировал индикаторы в тройке, тот поймёт, о чём я.

В пятёрке мы нашли элегантное решение с параметром prev_calculated и возвратом количества посчитанных баров в функции OnCalculate. И это решение теперь перешло в новую четвёрку



Дело давнее, а всё равно приятно :)
 
Candid:
Может через тестирование индикаторов проще будет на косяк выйти?
Тестирование индикаторов будет, но не сейчас. Но будет.
 
Кажется Кимовская функция по созданию объектов устарела ввиду ввода OBJPROP_ANCHOR. Сейчас буду проверять, но некоторые проблемы с графикой все же остаются. Постараюсь все подробно с примерами выложить позже.
 
stringo:

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




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

В прошлой версии, если сделать: ObjectSet(Name,OBJPROP_CORNER, 1);
То "якорная" точка автоматически становилась, на верхний правый угол обьекта. Вы не планируете это оставить, для совместимости?

 
alexvd:

Пытались набросить советника на чарт (не в тестере стратегий)? Есть сообщения в журнале?


PS. Проблему воспроизвели. Ждите следующего билда с исправлением.

1. Нет, советника на чарт набросить не пытался. В журнал тестера никаких записей не выводилось кроме стандартного вывода о его настройках. Соответственно из init() советника вывод был, а из start() советника вывода не было в журнал.

2. Оперативненько. Спасибо, ждём.

 
Lion.Fx:

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

В прошлой версии, если сделать: ObjectSet(Name,OBJPROP_CORNER, 1);
То "якорная" точка автоматически становилась, на верхний правый угол обьекта. Вы не планируете это оставить, для совместимости?

Ну да, желательно оставить привязку по-умолчанию как в старых билдах.
 
Только что проверил функцию Кима, служившую верой и правдой много лет :) (за что ему в очередной раз спасибо).
Добавление в нее параметра OBJPROP_ANCHOR позволило поставить объекты на свои места (нет непонятного сдвига координаты).

За добавление ANCHOR спасибо. С ней удобнее хоть и придется много что исправлять.

Вот функция:

//+------------------------------------------------------------------+
void SetLabel(string nm, string tx, string ft,color cl, int xd, int yd, int cr=0, int anch=0, int fs=9) {
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_LABEL, 0, 0,0);
  ObjectSetText(nm, tx, fs,ft);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_XDISTANCE, xd);
  ObjectSet(nm, OBJPROP_YDISTANCE, yd);
  ObjectSet(nm, OBJPROP_ANCHOR, anch);   //<----------------
  ObjectSet(nm, OBJPROP_CORNER   , cr);
  ObjectSet(nm, OBJPROP_FONTSIZE , fs);
}
//+------------------------------------------------------------------+

и вызов:

  SetLabel("Hello",  "Hello" ,  FontType, FontColor,  20, 20, 3, 1, FontSize);

 
Lion.Fx:

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

В прошлой версии, если сделать: ObjectSet(Name,OBJPROP_CORNER, 1);
То "якорная" точка автоматически становилась, на верхний правый угол обьекта. Вы не планируете это оставить, для совместимости?

Разумно. Посмотрим, что можно сделать.

PS. Сделали именно так.

 
К открытой заявке в СервисДеске #907205 сделал добавление и приложил код для проверки.