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

 
Igor Makanu:

ЗЫ: оффтоп, но тут напишу, имхо поиск ТС которая будет работать один в один как в тестере, так и на реале - утопия, которая не позволяет оценить робастость ТС, все дальнейшие апгрейды для извлечения прибыли на реале ТС будут приводить к невозможности оценить саму ТС, а без оценки эффективности ТС "в будущем" (после тестирования на исторических данных) невозможно принять решение о том, что ТС уже не работает и требуется поиск другой ТС

Че к чему.. все тс работают/не работают почти 1 в 1
 
Maxim Dmitrievsky:
Че к чему.. все тс работают/не работают почти 1 в 1

не так

вот смотри, ты изобрел переворотного мартина, заоптил, сделал бек и форвард-тесты, получил МО, к-т Шарпа.... - статистику тестирования

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

продвинутые юзеры начинают апгрейдить эту мартышку, ну обычно перевод на лимитки, потом особо продвинутые начнут лимитки двигать за ценой - и вот в последнем случае это уже будет отличная от тестирования ТС ( это другая ТС! ) - понятно, что вроде принципы те же, получил лося - удвоился и отступил от цены открытия предыдущего ордера,

но имхо, это другая ТС, которую юзер не тестировал в тестере - как минимум новая ТС уже привязана к тикам и задержкам исполнения


вот и пишу, что если получил качественные результаты в тестере на форварде, то нужно ТС мониторить в идеальных условиях

 
Igor Makanu:

не так

вот смотри, ты изобрел переворотного мартина, заоптил, сделал бек и форвард-тесты, получил МО, к-т Шарпа.... - статистику тестирования

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

продвинутые юзеры начинают апгрейдить эту мартышку, ну обычно перевод на лимитки, потом особо продвинутые начнут лимитки двигать за ценой - и вот в последнем случае это уже будет отличная от тестирования ТС ( это другая ТС! ) - понятно, что вроде принципы те же, получил лося - удвоился и отступил от цены открытия предыдущего ордера,

но имхо, это другая ТС, которую юзер не тестировал в тестере - как минимум новая ТС уже привязана к тикам и задержкам исполнения


вот и пишу, что если получил качественные результаты в тестере на форварде, то нужно ТС мониторить в идеальных условиях

ну это мелочи

 
Igor Makanu:

в лаконичности и простоте ордерной системы 4-ки - это позволяет писать стратегии "на лету" не отвлекаясь на решение элементарных действий с ордерами

если хотите можете попрактиковаться на ордерной системе МТ5 выполнить простые действия с ордерами:


в топике "вопросы от начинающих МТ5" я задавал это вопрос, ответы в стиле - "зачем Вам это нужно?", решение в ордерной системе МТ5 смог только один человек написать - автор этого топика ;)

Желание приблизить терминал к реальной бирже привело к реальному усложнению. Приказ, сделка, позиция каждый со своими тикетами оказались усложнением системы и не очевидно что лучше, простота или близость к реалу.
 
Valeriy Yastremskiy:
Желание приблизить терминал к реальной бирже привело к реальному усложнению. Приказ, сделка, позиция каждый со своими тикетами оказались усложнением системы и не очевидно что лучше, простота или близость к реалу.

И если честно не понятно, почему в 4ке приказ, сделка, позиция заменены одним ордером и имеют один на всех тикет, а в 5ке тикеты для приказа-ордера, сделки, позиции сделали разные, ведь в рамках терминала их можно было сделать одинаковыми, и если уж нужно было получить реальные тикеты с биржы, то это можно было бы сделать дополнительно, но в задачах советника все было бы проще.

 
Valeriy Yastremskiy:

И если честно не понятно, почему в 4ке приказ, сделка, позиция заменены одним ордером и имеют один на всех тикет, а в 5ке тикеты для приказа-ордера, сделки, позиции сделали разные, ведь в рамках терминала их можно было сделать одинаковыми, и если уж нужно было получить реальные тикеты с биржы, то это можно было бы сделать дополнительно, но в задачах советника все было бы проще.

Чтобы адекватно сравнивать ордерные системы MT4 и MT5, нужно великолепно разбираться в обеих. Не только теоретически/практически, но и архитектурно.

С моей точки зрения, ордерная система MT5 значительно превосходит MT4 по возможностям. Удобство же достигается через высокоуровневые библиотеки.

MT5 и скорость в боевом исполнении
MT5 и скорость в боевом исполнении
  • 2020.08.27
  • www.mql5.com
MT5 - шустрая платформа. Но есть узкие горлышки, которые сводят на нет все старания быстрой торговли...
 
fxsaber:

Чтобы адекватно сравнивать ордерные системы MT4 и MT5, нужно великолепно разбираться в обеих. Не только теоретически/практически, но и архитектурно.

С моей точки зрения, ордерная система MT5 значительно превосходит MT4 по возможностям. Удобство же достигается через высокоуровневые библиотеки.

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

 

Смотрите, как на простых задачах чистый MQL5 уделывает по производительности в пух и прах хваленую быструю реализацию истории торгов в MT4Orders.

// Скрипт вычисляет время открытия/закрытия последней позиции в истории торгов.

#include <MT4Orders.mqh> // https://www.mql5.com/en/code/16006

void LastTimeMQL4( datetime &OpenTime, datetime &CloseTime )
{
  for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL))
    {
      OpenTime = OrderOpenTime();
      CloseTime = OrderCloseTime();
      
      break;
    }
}

// https://www.mql5.com/ru/forum/342090/page18#comment_18040164
void LastTimeMQL5( datetime &OpenTime, datetime &CloseTime )
{
  static ulong PrevTicketIn = 0;  // Хранит тикет входа позиции с последнего вызова.
  static ulong PrevTicketOut = 0; // Хранит тикет выхода позиции с последнего вызова.
  
  if (HistorySelect(0, INT_MAX))
  {
    for (int i = HistoryDealsTotal() - 1; i >= 0; i--)
    {
      const ulong Ticket = HistoryDealGetTicket(i);
      
      if (Ticket == PrevTicketOut)            
      {
        OpenTime = (datetime)HistoryDealGetInteger(PrevTicketIn, DEAL_TIME);
        CloseTime = (datetime)HistoryDealGetInteger(PrevTicketOut, DEAL_TIME);        
        
        break;
      }
      else if (HistoryDealGetInteger(Ticket, DEAL_ENTRY) == DEAL_ENTRY_OUT)
      {
        PrevTicketOut = Ticket;
        
        CloseTime = (datetime)HistoryDealGetInteger(Ticket, DEAL_TIME);

        if (HistorySelectByPosition(HistoryDealGetInteger(Ticket, DEAL_POSITION_ID)))
        {
          PrevTicketIn = HistoryDealGetTicket(0);
          OpenTime = (datetime)HistoryDealGetInteger(PrevTicketIn, DEAL_TIME);
        }
          
        break;
      }
    }
  }
}

typedef void (*GetLastTime)( datetime&, datetime& );

void Bench( GetLastTime LastTime, const int Amount = 10000 )
{
  datetime OpenTime, CloseTime;
  datetime Tmp = 0;

  for (int i = 0; i < Amount; i++)
  {
    LastTime(OpenTime, CloseTime);
    
    Tmp += CloseTime - OpenTime;        
  }
  
  Print(Tmp);
}

#define BENCH(A)                                                              \
{                                                                             \
  const ulong StartTime = GetMicrosecondCount();                              \
  A;                                                                          \
  Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - StartTime)); \
}

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

void OnStart()
{  
  if (HistorySelect(0, INT_MAX))
    PRINT(HistoryDealsTotal());

  BENCH(Bench(LastTimeMQL4))
  BENCH(Bench(LastTimeMQL5))  
}


Результат.

2020.08.29 00:57:38.561 HistoryDealsTotal() = 9435
2020.08.29 00:57:38.813 2046.04.30 00:13:20
2020.08.29 00:57:38.813 Time[Bench(LastTimeMQL4)] = 252274
2020.08.29 00:57:38.820 2046.04.30 00:13:20
2020.08.29 00:57:38.820 Time[Bench(LastTimeMQL5)] = 7162

Чистый MQL5 на данной задаче оказался быстрее в 40 раз. Учите MQL5!

 
traveller00:
Хочу на всякий случай отметить, что ZIP-архивы чинили, насколько помню. Но сейчас опять раздрай и там старая версия, обновляться надо пофайлово.
 
// Список изменений:
// 29.08.2020
//   Fix: Ускорена работа с историей торгов.