Обсуждение статьи "Разрабатываем мультивалютный советник (Часть 2): Переход к виртуальным позициям торговых стратегий"
Не дочитал пока. По входным хороший пример получился.
1.
input string symbol_ = "EURGBP"; // Торговый инструмент (символ) input ENUM_TIMEFRAMES timeframe_ = PERIOD_H1; // Период графика input group "=== Параметры сигнала к открытию" input int signalPeriod_ = 13; // Количество свечей для усреднения объемов input double signalDeviation_ = 0.3; // Относ. откл. от среднего для открытия первого ордера input double signaAddlDeviation_ = 1.0; // Относ. откл. от среднего для открытия второго и последующих ордеров input group "=== Параметры отложенных ордеров" input int openDistance_ = 0; // Расстояние от цены до отлож. ордера input double stopLevel_ = 10500; // Stop Loss (в пунктах) input double takeLevel_ = 465; // Take Profit (в пунктах) input int ordersExpiration_ = 1000; // Время истечения отложенных ордеров (в минутах) input group "=== Параметры управление капиталом" input int maxCountOfOrders_ = 3; // Макс. количество одновременно отрытых ордеров
int OnInit() { expert = new CAdvisor(new CVolumeReceiver(magic_)); expert.Add(new CSimpleVolumesStrategy( symbol_, timeframe_, fixedLot_, signalPeriod_, signalDeviation_, signaAddlDeviation_, openDistance_, stopLevel_, takeLevel_, ordersExpiration_, maxCountOfOrders_) ); // Добавляем один экземпляр стратегии return(INIT_SUCCEEDED); }
class CSimpleVolumesStrategy : public CStrategy { private: //--- Параметры сигнала к открытию int m_signalPeriod; // Количество свечей для усреднения объемов double m_signalDeviation; // Относ. откл. от среднего для открытия первого ордера double m_signaAddlDeviation; // Относ. откл. от среднего для открытия второго и последующих ордеров //--- Параметры отложенных ордеров int m_openDistance; // Расстояние от цены до отлож. ордера double m_stopLevel; // Stop Loss (в пунктах) double m_takeLevel; // Take Profit (в пунктах) int m_ordersExpiration; // Время истечения отложенных ордеров (в минутах) //--- Параметры управление капиталом int m_maxCountOfOrders; // Макс. количество одновременно отрытых ордеров
4.
public: //--- Публичные методы CSimpleVolumesStrategy( string p_symbol, ENUM_TIMEFRAMES p_timeframe, double p_fixedLot, int p_signalPeriod, double p_signalDeviation, double p_signaAddlDeviation, int p_openDistance, double p_stopLevel, double p_takeLevel, int p_ordersExpiration, int p_maxCountOfOrders );
5-6.
//+------------------------------------------------------------------+ //| Конструктор | //+------------------------------------------------------------------+ CSimpleVolumesStrategy::CSimpleVolumesStrategy( string p_symbol, ENUM_TIMEFRAMES p_timeframe, double p_fixedLot, int p_signalPeriod, double p_signalDeviation, double p_signaAddlDeviation, int p_openDistance, double p_stopLevel, double p_takeLevel, int p_ordersExpiration, int p_maxCountOfOrders) : // Список инициализации CStrategy(p_symbol, p_timeframe, p_fixedLot), // Вызов конструктора базового класса m_signalPeriod(p_signalPeriod), m_signalDeviation(p_signalDeviation), m_signaAddlDeviation(p_signaAddlDeviation), m_openDistance(p_openDistance), m_stopLevel(p_stopLevel), m_takeLevel(p_takeLevel), m_ordersExpiration(p_ordersExpiration), m_maxCountOfOrders(p_maxCountOfOrders) { ArrayResize(m_orders, m_maxCountOfOrders); // Загружаем индикатор для получения тиковых объемов iVolumesHandle = iVolumes(m_symbol, m_timeframe, VOLUME_TICK); // Устанавливаем размер массива-приемника тиковых объемов и нужную адресацию ArrayResize(volumes, m_signalPeriod); ArraySetAsSeries(volumes, true); }
Каждый входной параметр нужно прописать пять-шесть раз.
Прочел статью. Спасибо автору, хорошее прощупывание, в какие стороны можно двигаться.
Мощное замечание, после которого нет смысла критиковать, а следует сразу переходить к конструктивной части - предлагать.
В статье рассматривается концепция виртуальной торговли с последующей односторонней синхронизацией виртуальной торговли с реальной. В качестве примера для Тестера - пойдет. Но только примера.
На практике такой портфель ТС собирается из EX5 (достаются из Маркета бесплатно для Тестера) - прогнали, получили tst-файлы одиночных проходов, из них сделали совместный одиночный прогон с любыми правилами ММ.
Для Тестера нужна скорость. Попробуйте оценить, насколько изменяется скорость оптимизации для варианта с виртуалкой и без.
Сама концепция хороша для реальной торговли. Но там для синхронизатора придется вести и историю виртуальной торговли. Да много всего. Серьезный путь, мягко говоря.
Архитектурно виртуалку отвязал бы от ТС. У меня только текущий исходник виртуалки 350 Кб. И будет расти.
Тщательно подойдите к выбору торгового API для виртуальной торговли. Повыбирайте из имеющихся. Логично отдать предпочтение тому API, на котором получается максимально легко запрограммировать ТС. Сам не очень понимаю распространенную практику всех торговых платформ изобретать свой велосипед - торговый API. Наделять его ООП-сущностями "из коробки" и т.д. В этом смысле MQ пошли хорошим путем - все API без ООП.
Прежде, чем читать подобные статьи, всегда смотрю на результаты тестирования. Хотя бы в тестере. Увидел 19% профита за 5 лет и на душе стало светло и радостно! Это гораздо больше, чем у автора 75 статей по нейросетям! ))
Зато теперь ясно, как гарантированно заработать на форексе. Раньше я думал, только обучать лохов на волнах Эллиота, но оказывается, есть еще отличный способ )).
Прежде, чем читать подобные статьи, всегда смотрю на результаты тестирования. Хотя бы в тестере. Увидел 19% профита за 5 лет и на душе стало светло и радостно! Это гораздо больше, чем у автора 75 статей по нейросетям! ))
Зато теперь ясно, как гарантированно заработать на форексе. Раньше я думал, только обучать лохов на волнах Эллиота, но оказывается, есть еще отличный способ )).
Не могу тут удержаться, чтобы не отметить, что 19% прибыли за пять лет на тесте сделаны постоянным лотом в условиях просадки менее $1000, то есть 1%. При ориентировании на максимальную просадку даже в 10% и использовании переменного лота результаты будут выглядеть еще интереснее.
//+------------------------------------------------------------------+ //| SimpleVolumesExpertSingle.mq5 | //| Copyright 2024, Yuriy Bykov | //| https://www.mql5.com/ru/users/antekov | //+------------------------------------------------------------------+ #property copyright "Copyright 2024, Yuriy Bykov" #property link "https://www.mql5.com/ru/articles/14107" #property description "Советник отложенный ордер в тот момент, когда тиковый объем свечи превышает средний объем," #property description "в направлении текущей свечи." #property description "Если ордера еще не превратились в позиции, то они удаляются по времени истечения." #property description "Открытые позиции закрываются только по SL или TP." #include "Advisor.mqh" #include "SimpleVolumesStartegy.mqh"
Опечатка.
На практике такой портфель ТС собирается из EX5 (достаются из Маркета бесплатно для Тестера) - прогнали, получили tst-файлы одиночных проходов, из них сделали совместный одиночный прогон с любыми правилами ММ.
Такой вариант еще не рассматривал, буду иметь ввиду, что так тоже можно. Правда, если получится подобрать хороший набор готовых советников с маркета, то как потом их использовать совместно? Просто запустить с подобранными параметрами ММ весь набор?
Для Тестера нужна скорость. Попробуйте оценить, насколько изменяется скорость оптимизации для варианта с виртуалкой и без.
Попробую, но тут, кажется, выигрыш будет заметен при количестве одновременно работающих стратегий в десятки-сотни экземпляров.
Я всё собираюсь более подробно заняться использованием вашей библиотеки Virtual для ускорения тестирования, но пока не дошёл. Основная причина в том, что привык уже к торговым функциям MT5, хотя когда приходилось в свое время переделывать свои советники с MT4 на MT5, тоже было много неудобств с этим связано, а про Virtual я узнал уже позже.
Теперь рассматриваю возможность сделать дочерний класс от CReceiver, который будет использовать виртуальное окружение.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Разрабатываем мультивалютный советник (Часть 2): Переход к виртуальным позициям торговых стратегий:
Продолжим разработку мультивалютного советника с несколькими параллельно работающими стратегиями. Попробуем перенести всю работу, связанную с открытием рыночных позиций с уровня стратегий на уровень эксперта, управляющего стратегиями. Сами стратегии будут торговать только виртуально, не открывая рыночных позиций.
В прошлой статье мы начали разработку мультивалютного советника, работающего одновременно с различными торговыми стратегиями. На первом этапе различных стратегий было всего две. Они представляли реализацию одной и той же торговой идеи, работали на одинаковом торговом инструменте (символе) и периоде графика (таймфрейме). Отличались же они между собой только числовыми значениями параметров.
Также мы определили оптимальный размер открываемых позиций исходя из желаемого максимального уровня просадки (10% от депозита). Мы сделали это для каждой стратегии по отдельности. Когда мы объединили две стратегии вместе, то для удержания заданного уровня просадки нам пришлось уменьшить размер открываемых позиций. Для двух стратегий уменьшение было небольшим. Но что, если мы захотим объединить десятки или сотни экземпляров стратегий? Вполне может случиться, что у каких-то стратегий придется уменьшить размер позиций до значения, меньшего чем минимальный размер открываемых позиций, позволенный брокером. В этом случае эти стратегии просто не смогут участвовать в торговле. Как же всё-таки заставить их работать?
Для этого мы заберем у стратегий право самостоятельно открывать позиции и выставлять отложенные ордера. Стратегии должны будут вести только виртуальную торговлю, то есть запоминать на каких уровнях должны быть открыты позиции определенного размера и по запросу сообщать, какой объем сейчас должен быть открыт. Открывать реальные рыночные позиции мы будем только после опроса всех стратегий и вычисления суммарного требуемого объема с учетом масштабирования для выдерживания заданной просадки.
Нас сейчас будет интересовать только проверка пригодности такого подхода, а не эффективность его реализации. Поэтому в рамках этой статьи мы постараемся написать хотя бы какую-то рабочую реализацию этого подхода, которая в дальнейшем поможет нам построить более красивую с архитектурной точки зрения. Поможет не в том смысле, что мы будем улучшать уже имеющуюся, а в том, что мы сможем понять, что вот так делать не надо, а можно сделать по-другому, и это будет лучше.
Автор: Yuriy Bykov