Ваши вопросы по языку MQL4

_SERG_

Активный участник
Благодарю Вас. Однако моя проблема сложнее. У меня MetaTrader 4.0 Build 988 и при нём MetaEditor 5.0 Build 1351, но это не mql5. Бывает ли такое, чтобы при MetaTrader 4.0 был MetaEditor для mql5?

У метаквототв всё бывает.

Софт находится в процессе разработки и поэтапного внедрения, поэтому
столько глюков.
Они уже выпустили версию МТ5 с локированием, поэтому скоро наступит время когда они откажутся от поддержки МТ4 и MQL4.
Возможно ещё некоторое время потянут "кота за хвост".
Но итог известен.

Смысл компилировать в 509 версии не вижу, по вышеперечисленным причинам.

А предложение по отладчику остается в силе.
 

ValPra

Интересующийся
У меня сова. Благодарю Вас автор ansol! Ваш ответ самый конкретный. Даже MetaQuotes отмахнулись просто ссылкой:
_https://docs.mql4.com/ru/basis/function/events
Дело в том, что я уже пробовал OnTick, но, это была моя ошибка, с одновременным использованием OnInit и OnDeinit. Однако OnTick нужно использовать вместе с init и deinit. Несмотря на то, что компилятор выругался предупреждением: "no OnStart function defined in the script". Всё заработало. Этот случай я ранее тоже хотел использовать, но тогда меня остановило это предупреждение.
 

ValPra

Интересующийся
У метаквототв всё бывает.

Софт находится в процессе разработки и поэтапного внедрения, поэтому
столько глюков.
Они уже выпустили версию МТ5 с локированием, поэтому скоро наступит время когда они откажутся от поддержки МТ4 и MQL4.
Возможно ещё некоторое время потянут "кота за хвост".
Но итог известен.

Смысл компилировать в 509 версии не вижу, по вышеперечисленным причинам.

А предложение по отладчику остается в силе.

Я могу перейти на mql5, но тестер TickDataSuite всё же лучше, чем то, что есть на MetaTrader 5. Или ситуация изменилась?
 

ansol

Местный знаток
У меня сова. Благодарю Вас автор ansol! Ваш ответ самый конкретный. Даже MetaQuotes отмахнулись просто ссылкой:
_https://docs.mql4.com/ru/basis/function/events
Дело в том, что я уже пробовал OnTick, но, это была моя ошибка, с одновременным использованием OnInit и OnDeinit. Однако OnTick нужно использовать вместе с init и deinit. Несмотря на то, что компилятор выругался предупреждением: "no OnStart function defined in the script". Всё заработало. Этот случай я ранее тоже хотел использовать, но тогда меня остановило это предупреждение.

Может все-таки вывести какой-нибудь Alert() сразу после start(), чтобы точно поянть, с какого момента не работает?
У меня все скрипты работают имеенно со start(), init() и deinit()
а на глазок я не вижу в вашем коде ошибку.
 

_SERG_

Активный участник
У меня сова. Благодарю Вас автор ansol! Ваш ответ самый конкретный. Даже MetaQuotes отмахнулись просто ссылкой:
_https://docs.mql4.com/ru/basis/function/events
Дело в том, что я уже пробовал OnTick, но, это была моя ошибка, с одновременным использованием OnInit и OnDeinit. Однако OnTick нужно использовать вместе с init и deinit. Несмотря на то, что компилятор выругался предупреждением: "no OnStart function defined in the script". Всё заработало. Этот случай я ранее тоже хотел использовать, но тогда меня остановило это предупреждение.

Смотрю, тут каша полная!

Посмотри в доке про зоны видимости данных. Про локальные и глобальные переменные, а также, переменные терминала. И так дальше всю доку.

Объясню фунционал, init()(OnInit() - по новой) Выполняется один раз, перд запуском советника и в ней размещается код необходимый для подготовки данных, для основного кода советника или скрипта. **Примечание, в начальном шаблоне скрипта инит и деинит отсутствуют, но также как советниках могут быть использованы.
Дэинит или ОнДэинит(), также выполняется один раз, только при штатном закрытии, в случаях сбоев процедуры завершения работы кода, работают другие механизмы, идентифицирующие результаты сбоя.

По аффтору (ansol), что мешает ему внести изменения в код?
Всё, что выше написано, это его (ansol) код?
 
Последнее редактирование:

ansol

Местный знаток
Всё, что выше написано, это его (ansol) код?
Не, это не мой код. :)
А так-то, да раз сова, то надо все три функции заменять - OnTick, OnInit, OnDeinit
Это несложно, надо только внимательным быть. Я в совах давно поменял, теперь не боюсь неприятностей(пока, во всяком случае)
 

_SERG_

Активный участник
Не, это не мой код. :)
А так-то, да раз сова, то надо все три функции заменять - OnTick, OnInit, OnDeinit
Это несложно, надо только внимательным быть. Я в совах давно поменял, теперь не боюсь неприятностей(пока, во всяком случае)

Та я без претензий, просто чел стрелки перевёл на аффтора :laugh:.
 

ansol

Местный знаток
Есть еще глупый вариант:
Автоторговля разрешена в МТ4, но не включена галка на закладке самого советника.
Ну, а вдруг? :)
 

ValPra

Интересующийся
Всё включено и разрешено. Короче, OnDeinit не работает, а компилятор предупреждает: "OnDeinit function declared with wrong type or/and parameters SB-experiments.mq4". Оба варианта работают: init и OnInit. Работает OnTick, но компилятор ругается: "no OnStart function defined in the script". Вот такая кривизна MetaQuotes.
 

ansol

Местный знаток
От деинит работает так:
PHP:
void OnDeinit(const int reason)
  {
//---

  }
Ему этот констант-ризон нужен обязательно.
Ну, я там еще созданные совой объекты удаляю (объектделит).
Ни каких проблем не должно быть.
А в скрипте не надо OnTick() там надо старт() - вы свой текст-то проверьте, сами объявляете скрипт в начале проги, а нам пишете, что это сова.
 

_SERG_

Активный участник
Всё включено и разрешено. Короче, OnDeinit не работает, а компилятор предупреждает: "OnDeinit function declared with wrong type or/and parameters SB-experiments.mq4". Оба варианта работают: init и OnInit. Работает OnTick, но компилятор ругается: "no OnStart function defined in the script". Вот такая кривизна MetaQuotes.

Ну так исправь тип дэинита(const int reason) на void.

Ичтобы не ругалсяя компилятор, перенеси код в папку "/MQL/Experts" из папки "Scripts", если считаешь, что это советник.
 
Последнее редактирование:

ansol

Местный знаток
#property show_inputs - это директива скрипта, не совы. Сова всегда входные параметры показывает.
 

_SERG_

Активный участник
#property show_inputs - это директива скрипта, не совы. Сова всегда входные параметры показывает.
Всегда?!! Ну-ну.
Вставь директиву в советник, и перед запуском она тебе параметры обязательно буднт выводить, те что по Ф7, а не вставишь, таки не будет.
 
Последнее редактирование:

ansol

Местный знаток
Вставь директиву в советник, и перед запуском она тебе параметры обязательно буднт выводить, те что по Ф7.

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

ansol

Местный знаток
Вставил в сову только что вот это:
PHP:
#property show_inputs
Получил:
'GAPnews.mq4' GAPnews.mq4 1 1
'stdlib.mqh' stdlib.mqh 1 1
no OnStart function defined in the script 0 0
0 error(s), 1 warning(s), compile time: 3448 msec 1 2
Что и требовалось доказать. Эта директива в сове не допустима, а?
Без нее всё без ошибок идет
 

ValPra

Интересующийся
Дык она без этой директивы показывает всегда.
Меня смущает, что ругань идет на скрипт. Я и хочу понять, это скрипт или сова?
Сова. Даже филин. Точно не скрипт. Теперь всё работает даже в таком кривом виде с кривым компилятором. Эксперименты помогли.
 

_SERG_

Активный участник

Слегка подправил.
Разместить в экспертах.
Компилнулось без ошибок.
Функционал не проверял.

В принте подправь преобразование из дабла в стринг с разрядами.
 

Вложения

  • SB-experiments.mq4
    1,6 КБ · Просмотры: 26
Последнее редактирование:

ansol

Местный знаток
А так нет:

'SB-experiments.mq4' SB-experiments.mq4 1 1
'stdlib.mqh' stdlib.mqh 1 1
'stderror.mqh' stderror.mqh 1 1
no OnStart function defined in the script 0 0
0 error(s), 1 warning(s), compile time: 436 msec 1 2

OnTick() правильно, а start() - это просто для обратной соместимости оставлено.
 

Вложения

  • SB-experiments.mq4
    1,6 КБ · Просмотры: 24
Верх