Библиотеки: Virtual - страница 39

 

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

Получается делать оптимизацию не 30 часов, а в два раза меньше - 15. Для сеточников разница должна быть еще больше.

Очень существенная экономия времени выходит. Бесплатный способ ускорить числодробилку на основе MT5-Тестера.

 

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

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

fxsaber, 2021.05.25 12:17

Ниже на примере покажу одно из преимуществ работы через снепшоты.

Реальное торговое окружение можно полностью снепшотить, после чего работа с ним становится очень быстрой.

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

#define VIRTUAL_SNAPSHOT_REFRESHTIME 1000 // Время жизни снепшота для обновления. В MT5 требует подключенной MT4Orders.mqh
#include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/ru/code/22577

void OnStart()
{  
  VIRTUAL::Snapshot(VIRTUAL_SNAPSHOT_REFRESHTIME, -1, false, ""); // Снепшот реального торгового окружения. "" - все символы.
  VIRTUAL::Save("Real.virt");                                     // Сохранили реальное торговое окружение.
    
  if (VIRTUAL::SelectByHandle(VIRTUAL::Create("Real.virt"))) // Загрузили торговое окружение в виртуальное.
    Print(VIRTUAL::ToString(5));                             // С высокой производительностью работаем с окружением.
}


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

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

 
fxsaber #:

Реальное торговое окружение можно полностью снепшотить, после чего работа с ним становится очень быстрой.

Время работы со снепшотом на примере.

И без снепшота.

Alert: Bench_Stack = 0, 1 <= Time[Test19.mq5 547 in OnStart: Bench(GetNoPositionsTime_fxsaber1,From,To)] = 188870756 mcs.


Снепшот на данной задаче в 20 раз быстрее! Если хотите быстро работать, например, с большой историей торговли, рекомендую снепшотить. Многие стат. продукты оживут за счет прописывания только одной строки.

 
Способ оторваться от привязки к символу чарта.
#define _Digits 8
  #include <fxsaber\Virtual\Virtual.mqh>
#undef _Digits
 
Чтобы найти загвоздку в Тестере, делал такой способ сохранения торгового окружения в конце бэктеста.
#include <MT4Orders.mqh>

#define VIRTUAL_SNAPSHOT_REFRESHTIME 1000 // Время жизни снепшота для обновления. В MT5 требует подключенной MT4Orders.mqh
#include <fxsaber\Virtual\Virtual.mqh>

double OnTester()
{     
  if (!MQLInfoInteger(MQL_OPTIMIZATION))
  {
    VIRTUAL::Snapshot(); // Сделали снепшот реального торгового окружения.
    
    VIRTUAL::Save("Snapshot.bin", true); // Сохранили окружение в файл (true - FILE_COMMON).
  }
  
  return(0);
}


Затем уже без обращения к Тестеру изучал его историю, как вздумается.

#include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/ru/code/22577

void OnStart()
{     
  if (VIRTUAL::SelectByHandle(VIRTUAL::Create("Snapshot.bin", true)))
  {
    // Изучаем историю, как вздумается.
    double SumProfit = 0;
    
    for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
        SumProfit += OrderProfit() + OrderCommission() + OrderSwap();
        
    Print(SumProfit);
  }  
}


Очень удобно при отладке работать так с Тестерной историей. 

 
fxsaber #:

Затем уже без обращения к Тестеру изучал его историю, как вздумается.

Один из сценариев такого механизма. Сохранить окружения бэктестов  Маркет-продуктов. А затем мгновенно объядинять их вместе в любом сочетании.

 
fxsaber #:
Способ оторваться от привязки к символу чарта.
На сторонней крипте бывает нужно.
#define ORDER_CURRENCY_DIGITS 2 // Задание Digits для вычисления профита/комиссии/свопа при помещении в историю торгов.
 
fxsaber #:
Способ оторваться от привязки к символу чарта.
#define
_Digits 8

Как это должно сработать?

_Digits используется только для округления цен, насколько я вижу.

 
Andrey Khatimlianskii #:

Как это должно сработать?

_Digits используется только для округления цен, насколько я вижу.

Например, пробрасываете тики от символа с digits=8, а скрипт висит на USDJPY.

 
fxsaber #:

Например, пробрасываете тики от символа с digits=8, а скрипт висит на USDJPY.

Виртуал теперь может быть мультивалютным?

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