Обсуждение статьи "Разрабатываем мультивалютный советник (Часть 2): Переход к виртуальным позициям торговых стратегий" - страница 2

 
Yuriy Bykov #:

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

Да.

 

Yuriy Bykov #:

привык уже к торговым функциям MT5

Хорошо ими владею, но отказался от них по этой причине.

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

Обсуждение статьи "Разрабатываем мультивалютный советник (Часть 2): Переход к виртуальным позициям торговых стратегий"

fxsaber, 2024.02.07 01:03

Тщательно подойдите к выбору торгового API для виртуальной торговли. Повыбирайте из имеющихся. Логично отдать предпочтение тому API, на котором получается максимально легко запрограммировать ТС. Сам не очень понимаю распространенную практику всех торговых платформ изобретать свой велосипед - торговый API. Наделять его ООП-сущностями "из коробки" и т.д. В этом смысле MQ пошли хорошим путем - все API без ООП.

 
fxsaber #:

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

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

 
А где файлик советника взять протестить?
 
fxsaber #:

Архитектурно виртуалку отвязал бы от ТС.

То есть в ТС используются обычные торговые функции, типа OrderSend(), а мы подключением свой библиотеки переопределяем их на использование виртуальных позиций?

 
fxsaber #:

Тщательно подойдите к выбору торгового API для виртуальной торговли. Повыбирайте из имеющихся. Логично отдать предпочтение тому API, на котором получается максимально легко запрограммировать ТС. 

Посмотрел, что фактически с конца 2021 года уже использовал свой API для виртуальной торговли своих ТС. Понятное дело, привык уже реализовывать на нем все, что нужно, используя в ТС только два общих метода и для позиций и для отложенных ордеров - Open() и Close().

В очередной раз сокрушаюсь, что не нашёл вовремя вашу библиотеку Virtual )

 
summertop #:
А где файлик советника взять протестить?

В конце статьи есть список приложенных файлов

 
Yuriy Bykov #:

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

Пример.

  1. Синхронизированные виртуалка и реал с одной позицией и ее тейком.
  2. Тик дошел до тейка: в виртуалке сработал, в реале - реджект тейка (лимитник).

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

Цена снова не коснулась тейка, а ушла в противоположную сторону. Казалось бы, можно держать тейк по истории закрытой позиции в виртуалке. Но цена до него может так и не дойти. Тогда по каким уровням синхронизировать?

И тут появляется виртуалка, которая торгует всегда - в ней сигнальное ядро. И она нужна только для закрытия повисших на реале позиций.

В общем, большая тема. У меня три виртуалки для синхронизации с реалом:

  1. Ядро, которое торгует с ограничениями времени - не синхронизируется с реалом.
  2. BestInterval натравливается на первую виртуалку. - синхронизируется с реалом для открытия позиций.
  3. Ядро, которое торгует без ограничений времени (всегда в торговле) - синхронизируется с реалом для закрытия позиций.

 
Yuriy Bykov #:

То есть в ТС используются обычные торговые функции, типа OrderSend(), а мы подключением свой библиотеки переопределяем их на использование виртуальных позиций?

Да, такой принцип вообще не требует что-либо переписывать в ТС, т.к. ТС не в курсе, где она торгует. Ее код не меняется для того, чтобы могла торговать в разных виртуалках или реале.

 
fxsaber #:

По входным хороший пример получился. Каждый входной параметр нужно прописать пять-шесть раз.

Сделал рефакторинг по инпутам. Несколько получившихся кусков кода для примера.

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit() {
   expert = new CAdvisor(new CVolumeReceiver(magic_));

   // Добавляем один экземпляр стратегии
   expert.Add(new CSimpleVolumesStrategy( symbol_, inStrategyInput + inSimpleVolumesStrategyInput));

   return(INIT_SUCCEEDED);
}
   InputBase.fixedLot = NormalizeDouble(0.01 / 0.16 * depoPart_, 2);
   const double Array0[] = {13, 0.3, 1.0, 0, 10500, 465, 1000, 3};
   strategies[0] = new CSimpleVolumesStrategy("EURGBP", InputBase + Input[Array0]);
//+------------------------------------------------------------------+
//| Конструктор                                                      |
//+------------------------------------------------------------------+
CSimpleVolumesStrategy::CSimpleVolumesStrategy( string p_symbol, const string sInputs ) : CStrategy(p_symbol, sInputs)
{
   this.Input = sInputs;

   ArrayResize(m_orders, this.Input.maxCountOfOrders);

   // Загружаем индикатор для получения тиковых объемов
   iVolumesHandle = iVolumes(m_symbol, this.InputStrategy.timeframe, VOLUME_TICK);

// Устанавливаем размер массива-приемника тиковых объемов и нужную адресацию
   ArrayResize(volumes, this.Input.signalPeriod);
   ArraySetAsSeries(volumes, true);
}
Файлы: