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

 

Часть объявления из Фриланса.

Конвертация должна быть выполнена в родном MQL5 без использования сторонних библиотек типа MT4Orders.

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

Видимо, где-то что-то плохо работает.

 
fxsaber #:

Файл битый

---

В архиве последняя версия

// 01.06.2021
//   Fix: Compatibility with the compiler build 2449 and higher.
//   Fix: Improved synchronization. ByPass.mqh must be of the latest version.
//   Add: OrderLots(true) - synchronized size of the selected position, taking into account all orders which close this position.
 
Vitaly Muzichenko #:

Файл битый

Нужно скачать.

 
fxsaber #:

Нужно скачать.

Да, действительно. Чудеса какие-то, разные файлы.

Спасибо!
 
// Список изменений:
// 06.01.2022
//   Fix: Точное определение данных открытия позиций и размера комиссии. Корректно работает только в ByPass-режиме.
//   Add: Добавлена OrderDealsAmount() - количество MT5-сделок, участвующих в формировании позиции. Корректно работает только в ByPass-режиме.

Кто имеет дело с частичными исполнениями и CloseBy-перекрытиями, рекомендую данное обновление.

 
fxsaber #:

Кто имеет дело с частичными исполнениями и CloseBy-перекрытиями, рекомендую данное обновление.

Проверочный скрипт точности вычислений.

#define MT4ORDERS_BYPASS_MAXTIME 1000000 // ByPass-режим для точных вычислений.
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

// Суммирование всех денежных операций - MT5-style.
double GetProfitMT5( void )
{
  double Res = 0;
  
  if (HistorySelect(0, INT_MAX))
    for (int i = HistoryDealsTotal() - 1; i >= 0; i--)
    {
      const ulong Ticket = HistoryDealGetTicket(i);
      
      Res += HistoryDealGetDouble(Ticket, DEAL_PROFIT) +
             HistoryDealGetDouble(Ticket, DEAL_SWAP) +
             HistoryDealGetDouble(Ticket, DEAL_COMMISSION);
    }
    
  return(Res);
}

// Суммирование всех денежных операций - MT4-style.
double GetProfitMT4( void )
{
  double Res = 0;

  for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)  
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
      Res += OrderProfit() + OrderSwap() + OrderCommission();
    
  return(Res);
}

void OnStart()
{
  if (PositionsTotal())
    MessageBox("The script works only if there are no open positions."); // Проверяем только при отсутствии открытых позиций.
  else
  {
    const double ProfitMT5 = GetProfitMT5(); // Суммирование всех денежных операций - MT5-style.
    const double ProfitMT4 = GetProfitMT4(); // Суммирование всех денежных операций - MT4-style.
    
    // Сравниваем суммы денежных операций, посчитанные разными способами.
    Alert("MT5 (" + DoubleToString(ProfitMT5, 8) + ") == MT4 (" + DoubleToString(ProfitMT4, 8) + ") - " +
          (string)(bool)!NormalizeDouble(ProfitMT4 - ProfitMT5, 8));
    Print(__MT4ORDERS__);
  }  
}


Результат работы - одна строка.

Alert: MT5 (0.00000000) == MT4 (-0.00500000) - false
Alert: MT5 (0.00000000) == MT4 (0.00000000) - true

false - MT4Orders где-то допускает ошибку. Просьба проверить на заковыристых счетах. Если false - дайте знать.

 
fxsaber #:

Проверочный скрипт точности вычислений.

Просьба проверить на заковыристых счетах.

Проверка показала, что библиотека с очень сложной историей торгов отрабатывает идеально. Надежность 100%.

 

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

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

fxsaber, 2022.01.06 03:18

// Список изменений:
// 06.01.2022
//   Fix: Точное определение данных открытия позиций и размера комиссии. Корректно работает только в ByPass-режиме.
//   Add: Добавлена OrderDealsAmount() - количество MT5-сделок, участвующих в формировании позиции. Корректно работает только в ByPass-режиме.

На примере CustomReport покажу, как это выглядит

Слева-направо выделенные места.

  • OrderDealsAmount. Есть позиции, которые формировались соответствующим количеством сделок. В общем случае это могут быть не только ENTRY_IN-сделки, но и остальных типов.
  • По этой причине цены открытия могут быть столь дробными - средневзвешенная по объему цена всех сделок, что формировали позицию.
  • Размер комиссии в пипсах. Он не должен сильно разниться (если объем немалый) на одном символе. Иначе - баг MT4Orders.

На скрине довольно простой случай. Есть значительно заковыристей, где OrderDealsAmount измеряется десятками. Например, в MT5 могут быть непересекающиеся по времени жизни позиции с одним и тем же тикетом. При этом MT5-GUI покажет, что это одна позиция, со временем открытия первой. А MT4Orders покажет несколько позиций с разным временем (и ценой) открытия и OrderTicketOpen (тикет сделки открытия).


Короче говоря, все очень точно и в привычном MT4-Style. Только в ByPass-режиме.

 
// Список изменений:
// 12.01.2022
//   Fix: OrderPrint() выводит корректные данные редких типов MT5-ордеров/сделок.
 
// Список изменений:
// 14.01.2022
//   Fix: Значительно ускорена OrderSelect(index, SELECT_BY_POS, MODE_HISTORY) в ByPass-режиме.