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

 
fxsaber:

В описании библиотеки есть такой пункт.

ОК, кажется нашел, скорее всего речь идет о

ReverseDeals = false;
 
Добавлены:
// С какого времени считать TesterStatistics.
bool VIRTUAL::InitStat( const long StartTime );

// Вывод статистики.
string VIRTUAL::StatToString( void );


// Сброс номеров тикетов Истории торгов.
bool VIRTUAL::ResetTickets( void );

Штатная TesterStatistics-функция доступна для виртуальных окружений в любое время - реал-тайм. Например, можно получать значение PF в любое время и с какой нужно даты.

В отличие от стандартного TesterStatistics, который выдает результат только по оконачании работы штатного Тестера, здесь все можно получать, как вздумается.

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

 
fxsaber:
Добавлены:

Штатная TesterStatistics-функция доступна для виртуальных окружений в любое время - реал-тайм. Например, можно получать значение PF в любое время и с какой нужно даты.

В отличие от стандартного TesterStatistics, который выдает результат только по оконачании работы штатного Тестера, здесь все можно получать, как вздумается.

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

Что-то сброс номеров не работает, наверно что-то не так делаю.

// вызывается в цикле при разных параметрах торгового алгоритма
  VIRTUAL::ResetTickets();
  VIRTUAL::Tester(_ticks, OnTick, TesterStatistics(STAT_INITIAL_DEPOSIT));
  Print(VIRTUAL::ToString(INT_MAX));

Номера в логе увеличиваются постоянно.

Пример лога.

  15.00000  9.00000
  OnCustomTester
   time = 2020.07.20 23:59:57.417 bid = 1.14556 ask = 1.14560 last = 0.00000 volume = 0 130 TICK_FLAG_BID FLAG_UNKNOWN (128)
  
  
  Balance = 10125.00, Equity = 10125.00, Profit = 125.00, 2020.07.20 - 2020.07.20 23:59:57
  #22 2020.07.17 09:00:00.246 sell 0.10 EURUSD.c 1.14162 0.00000 0.00000 2020.07.20 23:59:57.417 1.14560 0.00 0.00 -39.80 end of test 0: -398 (-398) - 3d 14:59:57
  #21 2020.07.16 18:00:00.101 buy 0.10 EURUSD.c 1.13829 0.00000 0.00000 2020.07.17 09:00:00.246 1.14162 0.00 0.00 33.30 0: +333 (+333) - 15:00:00
  #20 2020.07.16 14:00:00.030 sell 0.10 EURUSD.c 1.14291 0.00000 0.00000 2020.07.16 18:00:00.101 1.13829 0.00 0.00 46.20 0: +462 (+462) - 04:00:00
  #19 2020.07.16 03:00:00.297 buy 0.10 EURUSD.c 1.14035 0.00000 0.00000 2020.07.16 14:00:00.030 1.14291 0.00 0.00 25.60 0: +256 (+256) - 11:00:00
  #18 2020.07.16 01:00:00.332 sell 0.10 EURUSD.c 1.14144 0.00000 0.00000 2020.07.16 03:00:00.297 1.14035 0.00 0.00 10.90 0: +109 (+109) - 02:00:00
  #17 2020.07.15 19:00:00.189 buy 0.10 EURUSD.c 1.14059 0.00000 0.00000 2020.07.16 01:00:00.332 1.14144 0.00 0.00 8.50 0: +85 (+85) - 06:00:00
  #16 2020.07.14 09:00:00.260 sell 0.10 EURUSD.c 1.13507 0.00000 0.00000 2020.07.15 19:00:00.189 1.14059 0.00 0.00 -55.20 0: -552 (-552) - 1d 10:00:00
  #15 2020.07.14 08:00:00.334 buy 0.10 EURUSD.c 1.13314 0.00000 0.00000 2020.07.14 09:00:00.260 1.13507 0.00 0.00 19.30 0: +193 (+193) - 01:00:00
  #14 2020.07.10 14:00:00.313 sell 0.10 EURUSD.c 1.13071 0.00000 0.00000 2020.07.14 08:00:00.334 1.13314 0.00 0.00 -24.30 0: -243 (-243) - 3d 18:00:00
  #13 2020.07.09 15:00:00.046 buy 0.10 EURUSD.c 1.12954 0.00000 0.00000 2020.07.10 14:00:00.313 1.13071 0.00 0.00 11.70 0: +117 (+117) - 23:00:00
  #12 2020.07.08 12:00:00.242 sell 0.10 EURUSD.c 1.12893 0.00000 0.00000 2020.07.09 15:00:00.046 1.12954 0.00 0.00 -6.10 0: -61 (-61) - 1d 03:00:00
  #11 2020.07.07 08:00:00.375 buy 0.10 EURUSD.c 1.12858 0.00000 0.00000 2020.07.08 12:00:00.242 1.12893 0.00 0.00 3.50 0: +35 (+35) - 1d 04:00:00
  #10 2020.07.03 18:00:00.437 sell 0.10 EURUSD.c 1.12431 0.00000 0.00000 2020.07.07 08:00:00.375 1.12858 0.00 0.00 -42.70 0: -427 (-427) - 3d 14:00:00
  #9 2020.07.02 16:00:00.223 buy 0.10 EURUSD.c 1.12365 0.00000 0.00000 2020.07.03 18:00:00.437 1.12431 0.00 0.00 6.60 0: +66 (+66) - 1d 02:00:00
  #8 2020.07.01 15:00:00.216 sell 0.10 EURUSD.c 1.12604 0.00000 0.00000 2020.07.02 16:00:00.223 1.12365 0.00 0.00 23.90 0: +239 (+239) - 1d 01:00:00
  #7 2020.07.01 10:00:00.289 buy 0.10 EURUSD.c 1.12078 0.00000 0.00000 2020.07.01 15:00:00.216 1.12604 0.00 0.00 52.60 0: +526 (+526) - 05:00:00
  #6 2020.07.01 09:00:00.107 sell 0.10 EURUSD.c 1.12311 0.00000 0.00000 2020.07.01 10:00:00.289 1.12078 0.00 0.00 23.30 0: +233 (+233) - 01:00:00
  #5 2020.07.01 05:00:00.342 buy 0.10 EURUSD.c 1.12184 0.00000 0.00000 2020.07.01 09:00:00.107 1.12311 0.00 0.00 12.70 0: +127 (+127) - 04:00:00
  #4 2020.07.01 00:00:02.186 sell 0.10 EURUSD.c 1.12334 0.00000 0.00000 2020.07.01 05:00:00.342 1.12184 0.00 0.00 15.00 0: +150 (+150) - 04:59:58
  #3 2020.07.20 23:59:57.000 balance 0.00 0.00000 0.00000 0.00000 2020.07.20 23:59:57.000 0.00000 0.00 0.00 10000.00 0 - 00:00:00
  Trades: 20
  21.00000  9.00000
  OnCustomTester
   time = 2020.07.20 23:59:57.417 bid = 1.14556 ask = 1.14560 last = 0.00000 volume = 0 130 TICK_FLAG_BID FLAG_UNKNOWN (128)
  
  
  Balance = 10086.60, Equity = 10086.60, Profit = 86.60, 2020.07.20 - 2020.07.20 23:59:57
  #36 2020.07.17 10:00:00.200 sell 0.10 EURUSD.c 1.14130 0.00000 0.00000 2020.07.20 23:59:57.417 1.14560 0.00 0.00 -43.00 end of test 0: -430 (-430) - 3d 13:59:57
  #35 2020.07.16 19:00:00.225 buy 0.10 EURUSD.c 1.13790 0.00000 0.00000 2020.07.17 10:00:00.200 1.14130 0.00 0.00 34.00 0: +340 (+340) - 15:00:00
  #34 2020.07.16 14:00:00.030 sell 0.10 EURUSD.c 1.14291 0.00000 0.00000 2020.07.16 19:00:00.225 1.13790 0.00 0.00 50.10 0: +501 (+501) - 05:00:00
  #33 2020.07.16 04:00:00.286 buy 0.10 EURUSD.c 1.14055 0.00000 0.00000 2020.07.16 14:00:00.030 1.14291 0.00 0.00 23.60 0: +236 (+236) - 10:00:00
  #32 2020.07.10 15:00:00.087 sell 0.10 EURUSD.c 1.13193 0.00000 0.00000 2020.07.16 04:00:00.286 1.14055 0.00 0.00 -86.20 0: -862 (-862) - 5d 13:00:00
  #31 2020.07.09 15:00:00.046 buy 0.10 EURUSD.c 1.12954 0.00000 0.00000 2020.07.10 15:00:00.087 1.13193 0.00 0.00 23.90 0: +239 (+239) - 1d 00:00:00
  #30 2020.07.08 13:00:00.222 sell 0.10 EURUSD.c 1.12880 0.00000 0.00000 2020.07.09 15:00:00.046 1.12954 0.00 0.00 -7.40 0: -74 (-74) - 1d 02:00:00
  #29 2020.07.07 09:00:00.210 buy 0.10 EURUSD.c 1.12647 0.00000 0.00000 2020.07.08 13:00:00.222 1.12880 0.00 0.00 23.30 0: +233 (+233) - 1d 04:00:00
  #28 2020.07.03 19:00:00.840 sell 0.10 EURUSD.c 1.12443 0.00000 0.00000 2020.07.07 09:00:00.210 1.12647 0.00 0.00 -20.40 0: -204 (-204) - 3d 14:00:00
  #27 2020.07.02 16:00:00.223 buy 0.10 EURUSD.c 1.12365 0.00000 0.00000 2020.07.03 19:00:00.840 1.12443 0.00 0.00 7.80 0: +78 (+78) - 1d 03:00:00
  #26 2020.07.01 15:00:00.216 sell 0.10 EURUSD.c 1.12604 0.00000 0.00000 2020.07.02 16:00:00.223 1.12365 0.00 0.00 23.90 0: +239 (+239) - 1d 01:00:00
  #25 2020.07.01 05:00:00.342 buy 0.10 EURUSD.c 1.12184 0.00000 0.00000 2020.07.01 15:00:00.216 1.12604 0.00 0.00 42.00 0: +420 (+420) - 10:00:00
  #24 2020.07.01 00:00:02.186 sell 0.10 EURUSD.c 1.12334 0.00000 0.00000 2020.07.01 05:00:00.342 1.12184 0.00 0.00 15.00 0: +150 (+150) - 04:59:58
  #23 2020.07.20 23:59:57.000 balance 0.00 0.00000 0.00000 0.00000 2020.07.20 23:59:57.000 0.00000 0.00 0.00 10000.00 0 - 00:00:00
  Trades: 14

Еще мне не понятно, почему таймстамп у баланса всегда равен концу тестирования, хотя сделка идет самой первой по номеру.

 
Stanislav Korotky:

Что-то сброс номеров не работает, наверно что-то не так делаю.

ResetTickets нужно делать после Tester.

 
Stanislav Korotky:

Еще мне не понятно, почему таймстамп у баланса всегда равен концу тестирования, хотя сделка идет самой первой по номеру.

С кодом проще будет разобраться.

 

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

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

Stanislav Korotky, 2020.08.03 20:14

// вызывается в цикле при разных параметрах торгового алгоритма
  VIRTUAL::ResetTickets();
  VIRTUAL::Tester(_ticks, OnTick, TesterStatistics(STAT_INITIAL_DEPOSIT));
  Print(VIRTUAL::ToString(INT_MAX));


Логика такая.

// вызывается в цикле при разных параметрах торгового алгоритма

// Создали виртуальное окружение и по _ticks-архиву прогнали OnTick.
// При этом автоматически это виртуальное торговое окружение стало активным.
  VIRTUAL::Tester(_ticks, OnTick, TesterStatistics(STAT_INITIAL_DEPOSIT));

// У выбранного торгового окружения сбросили тикеты в Истории торгов.
  VIRTUAL::ResetTickets();

// Посмотрели торговое окружение.
  Print(VIRTUAL::ToString(INT_MAX));

// Работаем с нашим торговым окружением, как с обычным.
// ...

// Раз оно больше не нужно (в цикле), то удаляем его.
  VIRTUAL::Delete();
// Если хочется сразу иметь все проходы в памяти с возможностью к любому обратиться - не удаляем.
 
fxsaber:

С кодом проще будет разобраться.

Проект немаленький (вряд ли кто захочет в нем разбираться без документации, которой пока нет). Номера сквозных тикетов некрасивы, но не критичны, а приготовить мелкий пример нет времени.

 
fxsaber:


Логика такая.

Да, так работает, спасибо.

А почему таймстамп у баланса соответствует концу тестового периода, а не начала (см. лог)?

 
Stanislav Korotky:

А почему таймстамп у баланса соответствует концу тестового периода, а не начала (см. лог)?

Предполагаю, что используете это.

#define VIRTUAL_TESTER // Запуск в виртуальном торговом окружении

Если так, то для Вашей задачи это делать неправильно.

 
fxsaber:

Предполагаю, что используете это.

Если так, то для Вашей задачи это делать неправильно.

Если этого не сделать, то не получится виртуальной торговли -- только из-за этого макроса переопределяется OnTick.  Все равно дата "баланса" не должна из-за этого съезжать на конец истории, ИМХО.

Могу через пару дней прислать на рецензию свой проект (целиком, без доков, может быть сложно разобраться).

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