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

 
fxsaber:

На реал-тайме сказываться не должно.

У меня, к сожалению, сказывается.

Есть кнопка, нажатие на которую отображает/скрывает историю сделок. Все, конечно, отображать смысла нет, но часто нужно выбрать несколько десятков "своих" по символу, магику, или комментарию из нескольких тысяч других. Вот тогда и начинаются тормоза. Мысль — кэшировать список "своих" и обновлять его только новыми историческими сделками.

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

 
fxsaber:

Нужен пример ТС, в которой торговая история (не ценовая) существенно влияет на время бэктеста.

В качестве фантазии: построение кривой баланса по историческим сделкам и расчет лота новых сделок в зависимости от наклона кривой.

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

 
Andrey Khatimlianskii:

У меня, к сожалению, сказывается.

Есть кнопка, нажатие на которую отображает/скрывает историю сделок. Все, конечно, отображать смысла нет, но часто нужно выбрать несколько десятков "своих" по символу, магику, или комментарию из нескольких тысяч других. Вот тогда и начинаются тормоза. Мысль — кэшировать список "своих" и обновлять его только новыми историческими сделками.

Понял проблему. Да, встроенное в библу полноценное кеширование все же назрело. Надо будет думать, как реализовать.

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

Хотелось бы посмотреть этого замечательного брокера.

 
Andrey Khatimlianskii:

В качестве фантазии: построение кривой баланса по историческим сделкам и расчет лота новых сделок в зависимости от наклона кривой.

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

Думал про такое, но в том то и дело, что сразу напрашивается ВР баланса. Как это не парадоксально, но, похоже, кеширование торговой истории востребовано только для боевого применения (не Тестер).

 
fxsaber:

Понял проблему. Да, встроенное в библу полноценное кеширование все же назрело. Надо будет думать, как реализовать.

По идее, будет достаточно хранить тикет DEAL_ENTRY_IN для каждой сделки, т.к. 99% времени выполняется GetPositionDealIn (а в ней — HistorySelectByPosition).


fxsaber:

Хотелось бы посмотреть этого замечательного брокера.

PrimeXM-LiveUK

Это костыльный мост в саксо-банк.

 
Andrey Khatimlianskii:

По идее, будет достаточно хранить тикет DEAL_ENTRY_IN для каждой сделки, т.к. 99% времени выполняется GetPositionDealIn (а в ней — HistorySelectByPosition).

Давно было сделано сравнение Hash с торговой историей. Поэтому, наверное, оптимально копать в Generic-сторону.

Как мотиватор изучить этот метод - пойдет! Где-нибудь летом в спокойной обстановке...

Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
  • 2017.12.08
  • www.mql5.com
С 6 декабря 2017 года в стандартную поставку MetaTrader 5 стали входить так называемые Generic-классы, реализующие эффективные алгоритмы для хранен...
 

Обновление от fxsaber:

// 30.05.2018
//   Add: Ускорена работа с историей торговли, выбрана золотая середина реализаций между производительностью и
//        потреблением памяти - важно для VPS. Используется стандартная Generic-библиотека.
//        Если не хочется использовать Generic-библиотеку, то доступен старый режим работы с историей.
//        Для этого нужно ДО MT4Orders-библиотеки прописать строку
//
//        #define MT4ORDERS_FASTHISTORY_OFF // Выключаем быструю реализацию истории торговли - не используем Generic-библиотеку.

Работа с длинной историей теперь просто летает!

Модераторы, если есть возможность, залейте код в базу.

Файлы:
MT4orders.mqh  77 kb
 
Andrey Khatimlianskii:

Обновление от fxsaber:

Работа с длинной историей теперь просто летает!

Модераторы, если есть возможность, залейте код в базу.

Спасибо, обновил на всех языках

 

Использую эту библиотеку в своих советниках на МТ4.


Обнаружил странный момент:

Если тестирование идет на серверах Метаквотс - демо, то библиотека работает нормально. (например при открытие ордера)

Если взять для тестов брокера фхтм демо- то функция OrderSend открывает сделку, но возвращает ошибку. 

      int ticket=OrderSend(_Symbol,type,lot,price,0,0,0,comment_,magic,0,clrDarkSlateBlue);

После отладки ticket = -1;

Текст журнала ниже:

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

Почему может быть такая проблема?

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) ::AccountInfoString(ACCOUNT_SERVER) = ForexTimeFXTM-Demo01

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) (bool)::TerminalInfoInteger(TERMINAL_CONNECTED) = true

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) ::TerminalInfoInteger(TERMINAL_PING_LAST) = 55335

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) ::TerminalInfoDouble(TERMINAL_RETRANSMISSION) = 0.8875739644970414

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) ::TerminalInfoInteger(TERMINAL_BUILD) = 1835

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) (bool)::TerminalInfoInteger(TERMINAL_X64) = true

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Res = false

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) MT4ORDERS::OrderSendBug = true

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.action = TRADE_ACTION_DEAL (1)

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.magic = 0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.order = 0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.symbol = EURUSD

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.volume = 0.01

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.price = 1.17681

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.stoplimit = 0.0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.sl = 0.0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.tp = 0.0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.deviation = 0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.type = ORDER_TYPE_BUY (0)

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.type_filling = ORDER_FILLING_FOK (0)

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.type_time = ORDER_TIME_GTC (0)

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.expiration = 1970.01.01 00:00:00

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.comment = 

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.position = 2210821620

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Request.position_by = 0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Result.retcode = 10009

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Result.deal = 0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Result.order = 2210821775

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Result.volume = 0.01

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Result.price = 0.0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Result.bid = 0.0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Result.ask = 0.0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Result.comment = Request executed 190.826 + 1000.396 ms

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Result.request_id = 154

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) Result.retcode_external = 0

2018.06.08 22:58:47.197 EA MT5 (EURUSD,M1) MT4ORDERS: not Sync with History!, please, send logs to fxsaber!

2018.06.08 22:55:47.197 EA MT5 (EURUSD,M1) OrderSend with error 4754



[Удален]  
Rashid Umarov:

Спасибо, обновил на всех языках

Хорошо бы и fxsaber-а вернуть.