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

 
VIRTUAL::Select(handle); // Выбрали виртуальное торговое окружение
VIRTUAL::NewTick();      // Добавили тик в виртуальное торговое окружение
System();                // Запустили ТС на выбранном торговом окружении (виртуальное)

как понял, этот метод добавляет текущий тик для расчетов

можно пример, когда нужно провести виртуальный тест на произвольном участке истории? например, с заданным временным интервалом

static void NewTick( const MqlTick &Tick )
  {
    if (VIRTUAL::SelectOrders)
      VIRTUAL::SelectOrders.NewTick(Tick);

    return;
  }
оно?
 
Maxim Dmitrievsky:

можно пример, когда нужно провести виртуальный тест на произвольном участке истории? например, с заданным временным интервалом

#include <fxsaber\Virtual\Virtual.mqh> // Виртуальное торговое окружение

// Переворотная ТС
void System( const MqlTick &Tick, const int Interval = 200, const double Lots = 1 )
{
  if (!OrderSelect(OrdersTotal() - 1, SELECT_BY_POS))
    OrderSend(_Symbol, OP_BUY, Lots, Tick.ask, 100, 0, 0); // Если нет позиции - открываем
  else if (Tick.time - OrderOpenTime() > Interval) // Если позиция прожила больше заданного времени
  {
    // Перевернули позицию
    OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 100);
    OrderSend(_Symbol, 1 - OrderType(), Lots, OrderClosePrice(), 100, 0, 0);
  }
}

void OnStart()
{
  if (VIRTUAL::Select(VIRTUAL::Create()))
  {
    MqlTick Ticks[];
    
    const int Amount = CopyTicks(_Symbol, Ticks); // Взяли тики из любого источника
    
    for (int i = 0; i < Amount; i++)
    {
      VIRTUAL::NewTick(Ticks[i]);
      
      System(Ticks[i]); // Запускаем систему на произвольных тиках - Тестер.
    }
        
    if (OrderSelect(OrdersHistoryTotal() - 1, SELECT_BY_POS, MODE_HISTORY))
      OrderPrint(); // Распечатали последний ордер в истории торгов
      
    Print("\n" + VIRTUAL::ToString(true)); // Распечатали текущее состояние вместе с историей торгов      
  }
}


Результат

#-11 2018.10.24 21:24:56 sell 1.00 EURUSD 1.13874 0.00000 0.00000 2018.10.24 21:28:19 1.13904 0.00 0.00 -30.00  0

#12 2018.10.24 21:28:19 buy 1.00 EURUSD 1.13904 0.00000 0.00000 1.13890 0.00 0.00 -14.00  0

Balance = 999959.00, Equity = 999945.00
#-1 2018.10.24 21:29:32 balance 0.00 EURUSD 0.00000 0.00000 0.00000 2018.10.24 21:29:32 0.00000 0.00 0.00 1000000.00  0
#-2 2018.10.24 20:54:21 buy 1.00 EURUSD 1.13895 0.00000 0.00000 2018.10.24 20:57:47 1.13882 0.00 0.00 -13.00  0
#-3 2018.10.24 20:57:47 sell 1.00 EURUSD 1.13882 0.00000 0.00000 2018.10.24 21:01:08 1.13888 0.00 0.00 -6.00  0
#-4 2018.10.24 21:01:08 buy 1.00 EURUSD 1.13888 0.00000 0.00000 2018.10.24 21:04:29 1.13871 0.00 0.00 -17.00  0
#-5 2018.10.24 21:04:29 sell 1.00 EURUSD 1.13871 0.00000 0.00000 2018.10.24 21:07:59 1.13870 0.00 0.00 1.00  0
#-6 2018.10.24 21:07:59 buy 1.00 EURUSD 1.13870 0.00000 0.00000 2018.10.24 21:11:20 1.13874 0.00 0.00 4.00  0
#-7 2018.10.24 21:11:20 sell 1.00 EURUSD 1.13874 0.00000 0.00000 2018.10.24 21:14:41 1.13869 0.00 0.00 5.00  0
#-8 2018.10.24 21:14:41 buy 1.00 EURUSD 1.13869 0.00000 0.00000 2018.10.24 21:18:02 1.13874 0.00 0.00 5.00  0
#-9 2018.10.24 21:18:02 sell 1.00 EURUSD 1.13874 0.00000 0.00000 2018.10.24 21:21:31 1.13869 0.00 0.00 5.00  0
#-10 2018.10.24 21:21:31 buy 1.00 EURUSD 1.13869 0.00000 0.00000 2018.10.24 21:24:56 1.13874 0.00 0.00 5.00  0
#-11 2018.10.24 21:24:56 sell 1.00 EURUSD 1.13874 0.00000 0.00000 2018.10.24 21:28:19 1.13904 0.00 0.00 -30.00  0


ЗЫ Увидел, что первая запись с историей пополнения (balance) несколько не соответствует по времени. Наверное, нужно будет исправить.

 
fxsaber:


Результат


ЗЫ Увидел, что первая запись с историей пополнения (balance) несколько не соответствует по времени. Наверное, нужно будет исправить.

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

 
Maxim Dmitrievsky:

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

++

 
Maxim Dmitrievsky:

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

Грубые прогоны Вы можете сейчас сами организовать через OHLC-тики. Делать NewBar в дополнение к NewTick, наверное, можно.

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

 
fxsaber:

Грубые прогоны Вы можете сейчас сами организовать через OHLC-тики. Делать NewBar в дополнение к NewTick, наверное, можно.

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

точно, копировать по тику с каждой даты нового бара.. торможу

 
Единственное отличие "по ценам открытия" от своих OHLC-тиков - это более высокий приоритет исполнения SL-уровня перед TP. В Вашем случае, думаю, не критично.
 

Беру стандартный эксперт из примеров МТ5 под названием macd sample.

Вставляю в шапку эксперта этот код

#define VIRTUAL_TESTER // Запуск в виртуальном торговом окружении
#include <fxsaber\Virtual\Virtual.mqh> // Виртуальное торговое окружение

Вылетает куча ошибок при компиляции

Файлы:
ctz93f.JPG  152 kb
 
ilvic:

Беру стандартный эксперт из примеров МТ5 под названием macd sample.

Вставляю в шапку эксперта этот код

Чего хотите добиться? Ваш советник не соответствует условию.

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

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

fxsaber, 2018.10.05 12:32

Бесплатное ускорение Тестера - это бонус для тех, кто хочет быстрее делать Оптимизацию своего MT4-style советника в MT5-Тестера (многоядерность + Облако) и не заморачиваться совсем (код менять не нужно).

 

Не думали попробовать еще ускорить через GPU? или там нечего разделять на потоки

просто как упражнение в кодировании кернелов :)