Библиотеки: MT4Orders - страница 26

 

Привет! :) 

Пытаюсь воспользоваться Вашей библиотекой. МТ5 режим Hedge билд 1959, режим тестирования. 

Вызов OrderSelect(... , SELECT_BY_TICKET) возвращает false для ордера в истории, хотя ордер явно присутствует в логах тестера. Можете предположить, как такое возможно?


 
Ilya Malev:

Привет! :) 

Пытаюсь воспользоваться Вашей библиотекой. МТ5 режим Hedge билд 1959, режим тестирования. 

Вызов OrderSelect(... , SELECT_BY_TICKET) возвращает false для ордера в истории, хотя ордер явно присутствует в логах тестера. Можете предположить, как такое возможно?

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

Тикет закрытой MT4-позиции равен тикету закрывающей MT5-сделки, если кратко. На то есть масса полностью обоснованных причин. В частности, прочтите об этом в шапке библиотеки. А лучше, конечно, ветку почитать на эту тему.


Чтобы лучше понять, руками в MT5 сделайте всякие замысловатые торговые операции, а затем запустите этот скрипт

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

Библиотеки: Report

fxsaber, 2018.12.11 12:28

Утомили MT5-отчеты одиночных проходов. Поэтому добавление в конец любого MT5-советника этих трех строк
#define REPORT_TESTER       // В тестере будут автоматически записываться отчеты
#define REPORT_BROWSER      // Создание отчета с запуском браузера - требует разрешения DLL.
#include <Report.mqh>  // https://www.mql5.com/ru/code/18801

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

Попробуйте это сделать, например, с Experts\Examples\Moving Average\Moving Average.mq5.


Чтобы сразу понять, как выглядит отчет, достаточно на своем счете запустить этот скрипт

#define REPORT_BROWSER      // Создание отчета с запуском браузера - требует разрешения DLL.
#include <Report.mqh> // https://www.mql5.com/ru/code/18801

void OnStart()
{
  REPORT::ToFile(); // Создание и открытие отчета в браузере.
}


Все актуально и для MT4.

Или, как написано выше, добавьте в любой MT5-советник соответствующие строки и увидите, что к чему делает MT4Orders, когда дело касается истории.
 
fxsaber:

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

Тикет закрытой MT4-позиции равен тикету закрывающей MT5-сделки, если кратко. На то есть масса полностью обоснованных причин. В частности, прочтите об этом в шапке библиотеки. А лучше, конечно, ветку почитать на эту тему.


Чтобы лучше понять, руками в MT5 сделайте всякие замысловатые торговые операции, а затем запустите этот скрипт

Или, как написано выше, добавьте в любой MT5-советник соответствующие строки и увидите, что к чему делает MT4Orders, когда дело касается истории.

Получается, что добиться полной совместимости МТ4 -> МТ5 все таки невозможно? ОК, спасибо за наводку, буду разбираться.

 
Ilya Malev:

Получается, что добиться полной совместимости МТ4 -> МТ5 все таки невозможно? ОК, спасибо за наводку, буду разбираться.

Да, кривой MT4-код не всегда будет работать в MT5.

 
fxsaber:

Да, кривой MT4-код не всегда будет работать в MT5.

Кривой - это тот, который рассчитывает, что результат OrderSend отправки pending-ордера останется под тем же номером после того, как он станет рыночным, я правильно Вас понял? )

Как эта проблема проще всего решается, без переработки логики оригинального кода, может подскажете? Если сам быстрее не додумаюсь )

Вообще, такое поведение уже нельзя назвать ордерной системой МТ4. Потому что сохранение тикетов отложек при их активации в системе МТ4 является одной из её основ

 
Ilya Malev:

Кривой - это тот, который рассчитывает, что результат OrderSend отправки pending-ордера останется под тем же номером после того, как он станет рыночным, я правильно Вас понял? )

При исполнении отложки тикет позиции останется тем же в MT5. А вот при закрытии - нет.

Кривой - это использование SELECT_BY_TICKET. Особенно, если речь заходит об отслеживании таким образом события "а не закрылась ли моя позиция".

Вообще, такое поведение уже нельзя назвать ордерной системой МТ4. Потому что сохранение тикетов отложек при их активации в системе МТ4 является одной из её основ

Все сохраняется. Вам нужно только попробовать.

 
fxsaber:

При исполнении отложки тикет позиции останется тем же в MT5. А вот при закрытии - нет.

Кривой - это использование SELECT_BY_TICKET. Особенно, если речь заходит об отслеживании таким образом события "а не закрылась ли моя позиция".

Все сохраняется. Вам нужно только попробовать.

Ну так я и попробовал. Разумеется, я говорил о номере тикета после закрытия. Они отличаются довольно сильно. то есть вся нумерация ордеров плывет. Открывается ордер под номером 59 (результат OrderSend), активируется и закрывается, потом печатаю номера из истории Вашим OrderPrint и получаю номера в истории от 1 до 13. Это нельзя назвать системой МТ4, к сожалению. В документации МТ4 ничего не было о том, что SELECT_BY_TICKET использовать нельзя, чтобы отслеживать таким образом событие "а не закрылась ли моя позиция", это уже Вы придумали. В МТ4 такое было вполне в порядке вещей (хотя не буду спорить, что это не лучший стиль программирования, но мы ведь не пишем библиотеки для идеального мира, или как =))

К тому же, тут речь не о проверке закрытия, к сожалению, это как раз исправить было бы просто. Речь о том, что многие системы организуют ордера в группы по какому-либо признаку и потом анализируют их результат для принятия последующих решений. И вся эта когорта систем (в которых без запоминания тикетов и их анализа на истории в принципе никак не обойтись) с Вашей библиотекой работать не будет, если прибавить сюда все прочие, которые просто "отслеживают событие а не закрылась ли моя позиция" через SELECT_BY_TICKET, получится довольно солидное число исключений.
 
Ilya Malev:

Ну так я и попробовал. Разумеется, я говорил о номере тикета после закрытия. Они отличаются довольно сильно. то есть вся нумерация ордеров плывет. Открывается ордер под номером 59 (результат OrderSend), активируется и закрывается, потом печатаю номера из истории Вашим OrderPrint и получаю номера в истории от 1 до 13. Это нельзя назвать системой МТ4, к сожалению. В документации МТ4 ничего не было о том, что SELECT_BY_TICKET использовать нельзя, чтобы отслеживать таким образом событие "а не закрылась ли моя позиция", это уже Вы придумали. В МТ4 такое было вполне в порядке вещей (хотя не буду спорить, что это не лучший стиль программирования, но мы ведь не пишем библиотеки для идеального мира, или как =))

Лень прочитать ветку знакома.

  • В принципе невозможно написание библиотеки, чтобы тикет закрытой позиции совпадал с тикетом, когда она была закрыта. Это архитектурное ограничение MT5.
  • Это очень хорошее ограничение, т.к. заставляет прекратить идиотскую практику написания кривых MT4-советников.
Есть простое правило. Если видите в MT4-советнике SELECT_BY_TICKET, это на 95% кривой код. Какое-либо хранение тикетов - почти всегда кривая логика, никак не выдерживающая боевого применения.

 
fxsaber:

Лень прочитать ветку знакома.

  • В принципе невозможно написание библиотеки, чтобы тикет закрытой позиции совпадал с тикетом, когда она была закрыта. Это архитектурное ограничение MT5.
  • Это очень хорошее ограничение, т.к. заставляет прекратить идиотскую практику написания кривых MT4-советников.
Есть простое правило. Если видите в MT4-советнике SELECT_BY_TICKET, это на 95% кривой код. Какое-либо хранение тикетов - почти всегда кривая логика, никак не выдерживающая боевого применения.

Зачем читать ветку, я вроде и так уже во всем разобрался. 

Представьте себе построение советником нескольких одновременных сеток ордеров, каждая из которых имеет свою логику в зависимости от результатов прошлых ордеров серии. Насколько проще Вам будет хранить их тикеты в массиве, чем реализовывать какую-либо иную логику. При этом единственный случай, когда эта логика не выдержит "боевого применения" - это мгновенное отключение электричества, причем именно в то мгновение, когда советник должен записать результат выполнения очередной торговой операции в файл со своими данными. Что при торговле на VPS (либо при наличии ИБП) практически исключено.

 
Ilya Malev:

Зачем читать ветку, я вроде и так уже во всем разобрался. 

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

Да полно случаев не выдерживания. Каждый ордер сетки породит десяток позиций, а каждая позиция, закрываясь по тому же TP, породит десятки закрытых позиций.

Библиотека создана для тех, кто умеет писать на MT4 боевые советники, а не демо-игрушки. Боевой - это вход в OnTick с чистого листа каждый раз.

Аргументов у меня для Вас нет, они все на форуме. Со мной Вы не согласитесь, безусловно. Но это не так страшно, как кривые MT4-советники.


Возможно, кто-то вмешается в этот диалог и укажет ссылками или озвучит мысли, почему мир настолько реален.

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