MQL5 Ордера истории - страница 4

 
fxsaber #:

220 секунд.

Так выполняется другой скрипт.
2023.11.21 14:27:48.115 Scripts script Test6 (EURGBP,M1) loaded successfully
2023.11.21 14:27:48.278 Scripts script Test6 (EURGBP,M1) removed

Этот скрипт корректно обрабатывает все возможные рыночные ситуации, собирает даже такую информацию, как проскальзывания на открытии/закрытии, Reason открытия/закрытия и т.д. И все это за 160 мс на тех же 30К сделок.

#define MT4ORDERS_BYPASS_MAXTIME 1000000 // Максимальное время (в мкс.) на ожидание синхронизации торгового окружения
#include <MT4Orders.mqh>

#define PRINT(A) Print(#A + " = " + (string)(A))

void OnStart()
{
  double SumProfit = 0;
  double SumCommission = 0;
  double SumSwap = 0;
  
  for (uint i = OrdersHistoryTotal(); (bool)i--;)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL))
    {
      SumProfit += OrderProfit();
      SumCommission += OrderCommission();
      SumSwap += OrderSwap();
    }
      
  PRINT(SumProfit);
  PRINT(SumCommission);
  PRINT(SumSwap);
}

К сожалению, факт отсутствия альтернативных рабочих решений нет. Поэтому не реклама, а вынужденная мера.


Результат.

SumProfit = 52906.029999999926
SumCommission = -29673.429999999644
SumSwap = -16752.809999999816


Сверяем.

 
Alexey Viktorov #:

Все необходимые проверки Виталий, для кого писался этот пример, сам в состоянии дописать.

Никто на этом форуме не в состоянии это дописать до рабочего состояния.
 
Alexey Viktorov #:

Вторая сделка IN на счёте hadge может быть только в недокомпании ранна. У всех остальных такого не встречается.

Вы не в курсе современного состояния индустрии. Частичное исполнение лимитных приказов - стандарт.
 
fxsaber #:
Так выполняется другой скрипт.

Этот скрипт корректно обрабатывает все возможные рыночные ситуации, собирает даже такую информацию, как проскальзывания на открытии/закрытии, Reason открытия/закрытия и т.д. И все это за 160 мс на тех же 30К сделок.

К сожалению, факт отсутствия альтернативных рабочих решений нет. Поэтому не реклама, а вынужденная мера.


Результат.


Сверяем.

fxsaber #:
Никто на этом форуме не в состоянии это дописать до рабочего состояния.

Ну конечно, конечно… Ещё допишите «я самый самый…»

Вы посчитали прибыль, комиссию и своп по-отдельности. Соберите всё это по ID позиций, так чтобы можно было посмотреть каждую позицию отдельно и посмотрите результат. Самое большое время занимают функции …Select(), а сколько селектов будет в вашем коде?

 
Alexey Viktorov #:

Вы посчитали прибыль, комиссию и своп по-отдельности. Соберите всё это по ID позиций, так чтобы можно было посмотреть каждую позицию отдельно и посмотрите результат.

На самом деле посчитал каждую позицию. OrderProfit, OrderCommission и т.д. - это получение уже посчитанного. Т.е. все позиции собраны.


Самое большое время занимают функции …Select(), а сколько селектов будет в вашем коде?

Такой вставкой в начале исходника посчитал - 69631.

int CountSelect = 0;

bool HistorySelect2( const datetime Time1, const datetime Time2 )
{
  return((bool)++CountSelect && HistorySelect(Time1, Time2));
}

#define HistorySelect HistorySelect2

Другие исторические Select-функции не вызываются.

 
Alexey Viktorov #:

Ну конечно, конечно… Ещё допишите «я самый самый…»

Никто на форуме - включая и меня. Даже свою библиотеку не смог бы написать, если бы исчез исходник. Слишком сложно.

 
fxsaber #:

На самом деле посчитал каждую позицию. OrderProfit, OrderCommission и т.д. - это получение уже посчитанного. Т.е. все позиции собраны.


Такой вставкой в начале исходника посчитал - 69631.

Другие исторические Select-функции не вызываются.

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

  1. Символ
  2. Тикет позиции(ID позиции или тикет ордера, не важно)
  3. Объём позиции
  4. Время открытия позиции
  5. Время закрытия позиции
  6. Цена открытия позиции
  7. Цена закрытия позиции
  8. Прибыль позиции.
  9. Комиссия по позиции
  10. Своп по позиции.

ПО КАЖДОЙ ПОЗИЦИИ ОТДЕЛЬНО, а не все вместе. Сделайте пожалуйста и скажите сколько селектов у вас получилось.

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

 
Alexey Viktorov #:

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

  1. Символ
  2. Тикет позиции(ID позиции или тикет ордера, не важно)
  3. Объём позиции
  4. Время открытия позиции
  5. Время закрытия позиции
  6. Цена открытия позиции
  7. Цена закрытия позиции
  8. Прибыль позиции.
  9. Комиссия по позиции
  10. Своп по позиции.

ПО КАЖДОЙ ПОЗИЦИИ ОТДЕЛЬНО, а не все вместе. Сделайте пожалуйста и скажите сколько селектов у вас получилось.

Все, что умеет считать MT4Orders.

int CountSelect = 0;

bool HistorySelect2( const datetime Time1, const datetime Time2 )
{
  return((bool)++CountSelect && HistorySelect(Time1, Time2));
}

#define HistorySelect HistorySelect2

#define MT4ORDERS_BYPASS_MAXTIME 1000000 // Максимальное время (в мкс.) на ожидание синхронизации торгового окружения
#include <MT4Orders.mqh>

struct POSITION
{
  string             symbol;
  ulong              ticket;
  double             lot;
  double             priceOpen;
  double             priceClose;
  datetime           timeOpen;
  datetime           timeClose;
  double             profit;
  double             commission;
  double             swap;
  ENUM_POSITION_TYPE type;
/*
  ENUM_DEAL_REASON   reasonOpen;
  ENUM_DEAL_REASON   reasonClose;
  ulong              ticketIn;
  ulong              ticketOut;
  double             priceOpenRequest;
  double             priceCloseRequest;
  ulong              magic;
  double             stoploss;
  double             takeprofit;
  long               timeOpenMsc;
  long               timeCloseMsc;
  int                dealsAmount;
  double             LotsOpen;
  string             comment;
*/  
  void Set( void )
  {
    this.symbol = OrderSymbol();
    this.ticket = OrderTicketID();
    this.lot = OrderLots();
    this.priceOpen = OrderOpenPrice();
    this.priceClose = OrderClosePrice();
    this.timeOpen = OrderOpenTime();
    this.timeClose = OrderCloseTime();
    this.profit = OrderProfit();
    this.commission = OrderCommission();
    this.swap = OrderSwap();
    this.type = (ENUM_POSITION_TYPE)OrderType();
/*    
    this.reasonOpen = OrderOpenReason();
    this.reasonClose = OrderCloseReason();    
    this.ticketIn = OrderTicketOpen();
    this.ticketOut = OrderTicket();
    this.priceOpenRequest = OrderOpenPriceRequest();
    this.priceCloseRequest = OrderClosePriceRequest();
    this.magic = OrderMagicNumber();
    this.stoploss = OrderStopLoss();
    this.takeprofit = OrderTakeProfit();
    this.timeOpenMsc = OrderOpenTimeMsc();
    this.timeCloseMsc = OrderCloseTimeMsc();
    this.dealsAmount = OrderDealsAmount();
    this.LotsOpen = OrderLotsOpen();
    this.comment = OrderComment();   
*/    
  }
};

void OnStart()
{
  POSITION position[];
  int Amount = 0;
  
  for (uint i = ArrayResize(position, OrdersHistoryTotal()); (bool)i--;)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL))
      position[Amount++].Set();

  ArrayResize(position, Amount);
  ArrayReverse(position);
      
  ArrayPrint(position, _Digits, NULL, 0, 100);
      
  Print(CountSelect);
}

69631 раз вызывался HistorySelect. 170 мс.

2023.11.21 18:02:53.857 Scripts script Test6 (CADCHF,M1) loaded successfully
2023.11.21 18:02:54.028 Scripts script Test6 (CADCHF,M1) removed


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

Крайне сложно вытащить. Сильная внутренняя взаимосвязь. Надо сильно вникнуть, чтобы вытащить. При желании, возможно, конечно.

 
fxsaber #:

Все, что умеет считать MT4Orders.

69631 раз вызывался HistorySelect. 170 мс.


Крайне сложно вытащить. Сильная внутренняя взаимосвязь. Надо сильно вникнуть, чтобы вытащить. При желании, возможно, конечно.

Зачем мне ордера? Меня интересуют ПОЗИЦИИ!!!

 
Alexey Viktorov #:

Зачем мне ордера? Меня интересуют ПОЗИЦИИ!!!

Код собирает данные по всем позициям в истории торговли. Не в курсе причин вашего ора.