MetaTrader 4 Client Terminal build 610 - страница 34

 
Вы бы почитали форум-то, а? В хелп что ли загляните.
Spy:

Подскажите, пожалуйста, как теперь запустить советник на выходных для отладки, т.е. как эмулировать событие NewTick? Раньше (в 509 билде) слал скриптом такое сообщение:

PostMessageA(WindowHandle(Symbol(), 0), RegisterWindowMessageA("MetaTrader4_Internal_Message"), 2, 1);

но теперь это не срабатывает.

Теперь в MT4 строки юникодные. Только очень ленивые об этом ещё не знают.

Используйте PostMessageW(..) и RegisterWindowMessageW(..)

 

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

Кстати, с эмуляцией события calculate для индикаторов и ansi-функция справляется:

PostMessageA (WindowHandle (Symbol(), Period()), WM_COMMAND, 33324, NULL);

 
ЗЫ. Сделал ещё раз - заработало. Млин... Каюсь, посыпаю голову пеплом.
 
Spy:

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

Кстати, с эмуляцией события calculate для индикаторов и ansi-функция справляется:

PostMessageA (WindowHandle (Symbol(), Period()), WM_COMMAND, 33324, NULL);

Тады извиняюсс. Ну раз грамотный, могу присоветовать другую схему для работы на выходных - по таймеру.

Переносите весь код из OnTick() в другую функцию, её и вызывайте (в выходные из OnTimer, в торговые дни из OnTick() ).

 
Spy:
ЗЫ. Сделал ещё раз - заработало. Млин... Каюсь, посыпаю голову пеплом.

Чего сделал-то? :) Ты колись давай до конца, потомкам пригодится. ;)

Что было не так и как исправил.

 

Дык ещё раз запустил юникодный SendMessage. Что делал не так до этого - теперь уже не узнать. ))) Да и не важно это, важно, что теперь работает. )

SendMessageW(WindowHandle(Symbol(), 0), RegisterWindowMessageW("MetaTrader4_Internal_Message"), 2, 1);

 

В новом билде(610) не которые функции не обрезают передаваемый текст, а просто его обнуляют

Если записывать текст в графический объект OBJ_LABEL, старой функцией ObjectSetText:

ObjectSetText("sNameObj", "Test test test test test test test test test test test test test test");

Данный текст по длине не обрежется, он не появится на экране вообще, и при этом даже ошибка не сгенерируется.

А вот новая функция ObjectSetString для mql4, текст обрежет нормально:

ObjectSetString(0, "sNameObj",OBJPROP_TEXT, "Test test test test test test test test test test test test test test");

Такие же проблемы обнаружены при записи комментария при открытии отложенных ордеров, - если комментарий длинный он не обрезается – он просто не записывается.

И неплохо бы к справочной информации указывать максимальный размер полезной длины строк передаваемых в такие функции. А то эти все размеры макс. длин строк приходится получать экспериментальным путем.

 
Sniki:

В новом билде(610) не которые функции не обрезают передаваемый текст, а просто его обнуляют

Если записывать текст в графический объект OBJ_LABEL, старой функцией ObjectSetText:

ObjectSetText("sNameObj", "Test test test test test test test test test test test test test test");

Данный текст по длине не обрежется, он не появится на экране вообще, и при этом даже ошибка не сгенерируется.

А вот новая функция ObjectSetString для mql4, текст обрежет нормально:

ObjectSetString(0, "sNameObj",OBJPROP_TEXT, "Test test test test test test test test test test test test test test");

Такие же проблемы обнаружены при записи комментария при открытии отложенных ордеров, - если комментарий длинный он не обрезается – он просто не записывается.

И неплохо бы к справочной информации указывать максимальный размер полезной длины строк передаваемых в такие функции. А то эти все размеры макс. длин строк приходится получать экспериментальным путем.

Хочется добавить к этому, что если имя объекта оказывается длиннее некоей разрешённой длины (которую тоже необходимо подбирать), то такой объект строится на графике, но не там, где ему указано, а на самом начале истории - 01.01.1970
 
AlexeyVik:

В старом языке позволялось писать return; в новом return должен содержать значение, даже если это значение никому не нужно. Правильно писать return(0); в коде это повторяется 12 раз.

Откуда у вас такие сведения, вот что написано в новом справочнике:


 
erch:

Откуда у вас такие сведения, вот что написано в новом справочнике:

От туда откуда Вы не полный текст представляете.


Все остальные варианты должны возвращать значение. В советнике из учебника именно этот вариант.
Причина обращения: