Ошибки, баги, вопросы - страница 2076

 

Коллеги,

Нужна помощь с кодом для советника. Не могу пройти проверку модератора из-за ошибки 131 (неправильный объем лота).

У меня в коде стоит проверка на свободную маржу и минимум/максимум лота. Вот такая проверка:

if((AccountFreeMarginCheck(Symbol(),OP_BUY,Lots)>=0) && (AccountFreeMarginCheck(Symbol(),OP_SELL,Lots)>=0))

if((MarketInfo(Symbol(),MODE_MAXLOT)>=Lots) && MarketInfo(Symbol(),MODE_MINLOT)<=Lots)

Модераторы пишут: 

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

  1. неподходящий для торговли символ
  2. недостаток средств на счете
  3. нехватка истории
  4. символы с 4 и 5 знаками после запятой
  5. различные режимы моделирования тиков

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

 
Ahmet Garyagdyyev:

Коллеги,

Нужна помощь с кодом для советника. Не могу пройти проверку модератора из-за ошибки 131 (неправильный объем лота).

У меня в коде стоит проверка на свободную маржу и минимум/максимум лота. Вот такая проверка:

Модераторы пишут: 

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

  1. неподходящий для торговли символ
  2. недостаток средств на счете
  3. нехватка истории
  4. символы с 4 и 5 знаками после запятой
  5. различные режимы моделирования тиков

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

Всё давно уже есть здесь. Читайте.

 

Бодрого здравия сильные мира сего!

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

Структура Индикатор от индикатора.

Основной индикатор подгружает данные из индикатора iAD, но с другого символа. Проблема собственно в том, что когда компилирую индикатор он выводит вот такой принт

Время сигнала: 2017.11.23 11:05:00   1.0   -116.0   -16.0   2292.0  999.0   470   4

В агенте, после прогона индикатора вот такой принт и соотвественно сигналы пляшут.... Танцоры хреновы :-(

Время сигнала: 2017.11.23 11:05:00   1.0   -116.0   140.0   -1889.0  -993.0   1   4

Я так думаю это связано с порядком расчёта индикаторов, всегда интересовал этот вопрос как выбирается порядок расчёта?

Данные сохраняются с помощью скрипта с первым результатом из сказанных. Там стоит слип и времени видать хватает. А вот в момент прогона индикатора по минуткам получаю другие значения :-( Выкладываю базовую стратегию и сам индикатор который не работает...

Буду признателен если поможете разобраться. Спасибо!





Файлы:
 

Такой вопрос имеется, может кто поможет

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Вопросы от начинающих MQL5 MT5 MetaTrader 5

Aleksey Vyazmikin, 2017.11.27 18:44

Прошу помощи в решении такой проблемы. При открытии ордера по рынку с объемом больше 1 на Moex происходит какое то странное явление, ордер отоваривается по стакану и информация об отоваривание приходит частично, из-за чего происходит вызов OnTrade() раньше времени - как сделать проверку, что б подождать пока придет вся информация по отоварившемуся ордеру?


[Удален]  
Aleksey Vyazmikin:

Такой вопрос имеется, может кто поможет

Вы взаимодействуете с несколькими контрагентами. Все корректно, никаких странных явлений. А OnTrade() не знает, с каким количеством контрагентов Вы взаимодействуете, у него задача другая. Вот. Чтобы решить задачу - суммируйте объем сделок, которые прошли по ордеру. Когда объемы сравняются (ордер зальется полностью) - вот тогда и анализируйте то, что нужно.
 
Alexey Kozitsyn:
Вы взаимодействуете с несколькими контрагентами. Все корректно, никаких странных явлений. А OnTrade() не знает, с каким количеством контрагентов Вы взаимодействуете, у него задача другая. Вот. Чтобы решить задачу - суммируйте объем сделок, которые прошли по ордеру. Когда объемы сравняются (ордер зальется полностью) - вот тогда и анализируйте то, что нужно.

Да вот для лимитки это было бы нормально, но когда покупка по стакану, то мне кажется странным, что информация о сделке приходит порционно.

Как я могу узнать, какой был объем, если открывает позиции один советник, а обрабатывает другой?

[Удален]  
Aleksey Vyazmikin:

Да вот для лимитки это было бы нормально, но когда покупка по стакану, то мне кажется странным, что информация о сделке приходит порционно.

Как я могу узнать, какой был объем, если открывает позиции один советник, а обрабатывает другой?

Вы своим рыночным ордером заливаете чужие лимитки. И не обязательно, что Вы зальете лимитку одного контрагента (если лот Вашего ордера > 1).

Как узнать.. В советнике, который обрабатывает историю, запросить эту самую историю, если есть открытая позиция. И проверить, обрабатывался ли ордер, который инициировал сделку текущей позиции.

 
Alexey Kozitsyn:

Вы своим рыночным ордером заливаете чужие лимитки. И не обязательно, что Вы зальете лимитку одного контрагента (если лот Вашего ордера > 1).

Как узнать.. В советнике, который обрабатывает историю, запросить эту самую историю, если есть открытая позиция. И проверить, обрабатывался ли ордер, который инициировал сделку текущей позиции.


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

Что значит, обрабатывался ордер или нет? Я запустил рыночный ордер в рынок, у него есть промежуточный статус "на исполнении"? Как его инициализировать?

[Удален]  
Aleksey Vyazmikin:

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

Что значит, обрабатывался ордер или нет? Я запустил рыночный ордер в рынок, у него есть промежуточный статус "на исполнении"? Как его инициализировать?

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

Если не понятно - прочитайте статью про биржевое ценообразование.

Что значит? Вы ведь хотите один раз обработать ордер вторым советником? Если да, тогда надо, наверно, запомнить номер последнего обработанного ордера.

 
Alexey Kozitsyn:

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

Если не понятно - прочитайте статью про биржевое ценообразование.


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

Alexey Kozitsyn:

Что значит? Вы ведь хотите один раз обработать ордер вторым советником? Если да, тогда надо, наверно, запомнить номер последнего обработанного ордера.

Я хочу проверить позицию на соответствие определенным критериям - SL/TP и объем. При этом часть позиции может быть сформирована другим ордером. Хорошо, я запомнил номер ордера в истории, что дальше делать?