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

 

не до конца еще разобрался с Virtual, еще нужна помощь - нужен пример такого сценария (тестовый ЕА из КБ virtual_example):

1. запустить ЕА с первого числа месяца в виртуальном окружении

2. после выполнения пп.1 перевести ЕА в реальную торговлю из Virtual

 
Igor Makanu:

не до конца еще разобрался с Virtual, еще нужна помощь - нужен пример такого сценария (тестовый ЕА из КБ virtual_example):

1. запустить ЕА с первого числа месяца в виртуальном окружении

2. после выполнения пп.1 перевести ЕА в реальную торговлю из Virtual

// https://www.mql5.com/ru/forum/282062/page23#comment_15389594

input datetime inFrom = D'2020.03.01';

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

int OnInit()
{
  MqlTick Ticks[];
  
  return(!(CopyTicksRange(_Symbol, Ticks, COPY_TICKS_INFO, (long)inFrom * 1000) > 0) || // Взяли тики
         !VIRTUAL::Tester(Ticks, OnTick, 0, false) || 				        // Прогнали по ним ТС. false - не закрывали в конце.
         !VIRTUAL::Delete());                                                           // Удалили созданное виртуальное окружение.
}

void OnTick() {}
 
fxsaber:

логика вроде понятна, но в таком виде ЕА с ошибкой инициализации удаляется, и хочу разобраться как последний ордер ЕА в виртуальном торговом окружении видеть открытым

если не затруднит, то вот пример из КБ, дополнил секцию  OnInit() - почему последний ордер пропал из виртуального окружения?

input datetime inFrom = D'2020.03.01';
input double Lots = 1;
input int Interval = 100;  // Время жизни позиции
input bool Example = true; // Какой пример кода выбрать

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


// Переворотная ТС
void System()
{
   if (!OrderSelect(OrdersTotal() - 1, SELECT_BY_POS))
      OrderSend(_Symbol, OP_BUY, Lots, SymbolInfoDouble(_Symbol, SYMBOL_ASK), 100, 0, 0); // Если нет позиции - открываем
   else if (TimeCurrent() - OrderOpenTime() > Interval) // Если позиция прожила больше заданного времени
   {
      // Перевернули позицию
      OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 100);
      OrderSend(_Symbol, 1 - OrderType(), Lots, OrderClosePrice(), 100, 0, 0);
   }
}
//+------------------------------------------------------------------+
int OnInit()
{
   MqlTick Ticks[];

   CopyTicksRange(_Symbol, Ticks, COPY_TICKS_INFO, (long)inFrom * 1000);         // Взяли тики
   VIRTUAL::Tester(Ticks, OnTick, 0, false);                                     // Прогнали по ним ТС. false - не закрывали в конце.
   VIRTUAL::Delete();                                                            // Удалили созданное виртуальное окружение.
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnTick()
{
   static const int handle = VIRTUAL::Create(); // Создали хэндл виртуального торгового окружения. 0 - реальное торговое окружение

   if (Example)
   {
      if (VIRTUAL::SelectByHandle()) // Выбрали реальное торговое окружение
         System();                    // Запустили ТС на выбранном торговом окружении (реальное)

      if (VIRTUAL::SelectByHandle(handle)) // Выбрали виртуальное торговое окружение
      {
         VIRTUAL::NewTick();      // Добавили тик в виртуальное торговое окружение
         System();                // Запустили ТС на выбранном торговом окружении (виртуальное)
      }
   }
   else // Альтернативная запись тех же действий.
      // Пробегаемся по всем имеющимся торговым окружениям
      for (int i = 0; i <= VIRTUAL::Total(); i++)
         if (VIRTUAL::SelectByIndex(i)) // Выбрали соответствующее торговое окружение
         {
            VIRTUAL::NewTick(); // Добавили тик в выбранное торговое окружение

            System(); // Запустили ТС на выбранном торговом окружении
         }

   Comment(VIRTUAL::ToString()); // Вывели на чарт состояние виртуального торгового окружения

}


мой пример отработал в комментарии тестирование - видел, потом комментарий удалился и ЕА больше не подает признаков жизни в виртуальном окружении

 
Igor Makanu:

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

мой пример отработал в комментарии тестирование - видел, потом комментарий удалился и ЕА больше не подает признаков жизни в виртуальном окружении

Пока не понимаем друг друга. Напишите четче, что нужно.

 
fxsaber:

Пока не понимаем друг друга. Напишите четче, что нужно.

хочу разобраться как пользоваться Virtual

1. запускаю тестовый пример из КБ Virtual_Example - все ОК

2. хочу запустить код Virtual_Example на истории с 01.03.2020

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

4. если баланс тестирования положительный, то последний открытый ордер открыть в реале

ЗЫ: опционально бы увидеть как установить виртуальный баланс  - видел метод, но еще не тестировал это


UPD: кажется понял как это работает, этот код правильно все сделал:

//+------------------------------------------------------------------+
int OnInit()
{
   MqlTick Ticks[];

   CopyTicksRange(_Symbol, Ticks, COPY_TICKS_INFO, (long)inFrom * 1000);         // Взяли тики
   VIRTUAL::Tester(Ticks, System, 10000, false);                                // Прогнали по ним ТС. false - не закрывали в конце.
   Print(VIRTUAL::ToString());
   VIRTUAL::Delete();                                                            // Удалили созданное виртуальное окружение.
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
 
Igor Makanu:

UPD: кажется понял как это работает, этот код правильно все сделал:

Рад, что во всем разобрались.

 
fxsaber:

Рад, что во всем разобрались.

баланс еще не научился имитировать в Virtual

а так, да, в целом очень годная веЩь!

КРУТО! СПАСИБО!

ЗЫ: сейчас из виртуального окружения копировщиком научусь переносить сделки, пока с целью определения проскальзований

 
Igor Makanu:

баланс еще не научился имитировать в Virtual

Не понимаю терминологию.

 
fxsaber:

Не понимаю терминологию.

хочу задать начальный баланс счета для тестирования в Virtual и хочу чтобы далее виртуальное окружение работало с заданным балансом в виртуальном окружении

это нужно чтобы объединить несколько ТС в виртуальном окружении (в штатном тестере не хочу, хотя там это проще сделать)

 
Igor Makanu:

хочу задать начальный баланс счета для тестирования в Virtual и хочу чтобы далее виртуальное окружение работало с заданным балансом в виртуальном окружении

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

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

Igor Makanu, 2020.03.11 19:30

   VIRTUAL::Tester(Ticks, System, 10000, false);                                // Прогнали по ним ТС. false - не закрывали в конце.

Вы же умеете это делать.

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