Интересный подход. Запустил как есть пока без оптимизации. Держит баланс, по малу есть прирост.
При желании можно закрытие сетки перенести на конец дня, до формирования свопа. Сечас закрываети сетку на старте торгов. Или не использовать ежедневное закрытие вообще.
Точно есть куда развивать и применять в комплексных решениях.
Продолжайте!
Статья всплыла в английском переводе, стало интересно, чего тут такого я пропустил в русском оригинале в марте.
Оказалось - сказочная чушь. ;-)
"Когда вы добавляете позиции после первоначального входа, всегда ли вы масштабируете весь трехпарный треугольник симметрично, или же вы добавляете позиции только по той паре, которая демонстрирует наибольший дисбаланс?"
Может ли это работать на реальном счете? Или это один из ботов, который работает только на демо-счетах?
Станислав, спрашиваю без ёрничества и подколов - а в каком месте расположена эта сказочная чушь? Честное слово, хотелось бы вникнуть и до конца понять, что в этой статье не так!
Начнем с того, что МТ5 поддерживает счета с неттинговым и хеджинговым учетом на равных правах. Предложенная система строго для хеджинга, но об этом нет ни слова. На неттинге встречные позиции от встречных ордеров быстро начинают схлопываться в убытке.
Во-вторых, идея выхватить кратковременное удачное разночтение котировок на кроссах не нова (начать можно, например, с работ hrenfx-а или работ getch-а - они, хоть и для МТ4, но сути не меняют и дают хорошее представление о картине рынка в динамике). Делать это с помощью отложенных ордеров, открывающихся без онлайн контроля сиюсекундного синтетического спреда, бессмысленно. Такие ордера сразу начинаются с минуса в размере суммы спредов по всем парам, и автор этой статьи предлагает потом держать позиции в надежде, когда-то дождаться от брокера неэффективности котировок даже больше этого спреда. Сетка ордеров ситуацию не меняет, а просто позволяет чуть дольше пересиживать убытки, закрывая только профит и накапливая плавающий минус.
В-третьих, в статье совершенно опущен вопрос маржи, и даже если представить огромный депозит, то каков будет % прибыли, если б, допустим, удалось дождаться закрытия сетки в плюс?
А теперь по фактической реализации с кучей ошибок. Например,
// Корректировка для пар с JPY и других экзотических валют string quoteCurrency = StringSubstr(symbol, 3, 3); if(quoteCurrency == "JPY" || quoteCurrency == "XAU" || quoteCurrency == "XAG") pointCost *= 100.0;
Это чушь. МТ5 возвращает правильную стоимость пункта независимо от валюты. Единственный нюанс, что для форекса стоимость пункта возвращается в валюте счета, а для биржевых инструментов - в валюте котирования и потому там нужен ручной пересчет в валюту счета. Но для данной статьи это не важно.
Далее.
// Коэффициент корректировки на основе текущего баланса double equityRatio = accountBalance / BaseEquity;
Если мы хотим отвести под эксперт только часть денег, а не весь счет, то данное отношение должно быть записано в обратную сторону. Сейчас получается, что если счет на 10000, а мы отвели под базу 1000, то эксперт будет открываться лотами в 10 раз больше, чем позволял бы счет для полной загрузки.
Я у себя для тестов поменял так (иначе быстро вылезает ошибка недостатка маржи):
// Коэффициент корректировки на основе текущего баланса double equityRatio = BaseEquity ? BaseEquity / accountBalance : 1.0;
Вот эту часть оставил как есть, но тут сплошные загадки:
// Расчет оптимального лота с учетом риска double riskAmount = accountBalance * (RiskPercentage / 100.0); double calculatedLot = (riskAmount / 100.0) * equityRatio / (pointCost * basePrice);
RiskPercentage - это именно процент, поэтому RiskPercentage/100 дают часть денег в натуральном выражении в переменной riskAmount.
Но что это за магическое 100, на которое делиться сумма денег? Жестко зашитое плечо?
И почему мы делим деньги на стоимость одного пункта * цену? В качестве риска обычно берется расстояние стоплосса, но раз у нас сетка, то логично было бы взять за меру риска дистанцию сетки, но здесь это не так. И 100 не равно шагу сетки по умолчанию, и вообще шаг сетки предполагается настраивать. На форекс формула расчета маржи (если это она) - другая, и в принципе её лучше запросить через API у MT5, а не пытаться считать на коленке по формулам с потолка.
Далее, в расчете комиссии пришлось сделать такую правку - было (давало 0):
double commission = PositionGetDouble(POSITION_COMMISSION);
Стало (история отфильтрована по позиции в начале цикла):
double commission = 0; // PositionGetDouble(POSITION_COMMISSION); for(int j = 0; j < HistoryDealsTotal(); j++) { commission += // multiple by 2 because out fees are not yet charged and may be equal to in 2 * (HistoryDealGetDouble(HistoryDealGetTicket(j), DEAL_COMMISSION) + HistoryDealGetDouble(HistoryDealGetTicket(j), DEAL_FEE)); }
Без подробностей отмечу, что для работы с разными брокерам пришлось добавить input-ы Prefix/Suffix для символов и везде их понадобавлять в выражения.
После правок и экспериментов получаем стабильный и ожидаемый слив.
- 2009.11.27
- www.mql5.com
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Арбитражный трейдинг Forex: Простой бот-маркетмейкер синтетиков для старта:
Сегодня разберем моего первого робота в сфере арбитража — поставщика ликвидности (если его можно так назвать) на синетических активах. Сегодня данный бот успешно работает как модуль в большой системе на машинном обучении, но я поднял старый арбитражный робот на Форекс из облака, и давайте посмотрим на него, и подумаем, что мы можем с ним сделать сегодня?
Революция в моем сознании произошла в 2017-м, когда после серии болезненных убытков, я начал изучать, как на самом деле работают крупные игроки. Не те, кто рассказывает о своих "миллионных заработках" на YouTube, а настоящие институционалы — банки, хедж-фонды и проп-трейдинговые компании.
И вот что я обнаружил: они не используют замысловатые индикаторные стратегии. Они применяют математические принципы, управление рисками, арбитраж, маркет-мейкинг и другие подходы, основанные на фундаментальном понимании рыночных механизмов. Именно тогда я принял решение: нужно торговать, как крупный игрок, или не торговать вообще.
Следующие три года я потратил на изучение институциональных методов торговли. Я погрузился в мир межрыночных корреляций, статистического арбитража и алгоритмической торговли. Я экспериментировал с Python и MQL, создавая прототипы систем, которые имитировали подходы крупных участников рынка, но были адаптированы для розничного трейдера с его ограничениями по капиталу и технологиям.
В январе 2020 года, накануне одного из самых турбулентных периодов в истории финансовых рынков, родился Tris_Optimized — мой ответ на вопрос: "Как розничному трейдеру применять институциональные стратегии?"
Этот советник не пытается предсказывать движения рынка, не полагается на индикаторы технического анализа и не требует "интуиции" трейдера. Вместо этого он математически вычисляет потенциальные дисбалансы между тремя связанными валютными парами и размещает сетку ордеров, готовую поймать эти дисбалансы, когда они возникнут.
За пять лет непрерывной работы в реальных рыночных условиях Tris_Optimized доказал свою жизнеспособность. Он пережил пандемию, инфляционные скачки, изменения процентных ставок и геополитические кризисы — и продолжает приносить стабильную прибыль (в те редкие периоды, когда я все же торгую, а не сижу целые ночи за идеями кодов и непосредственно кодами). Это не чудо-система, обещающая заоблачные доходы, а надежный рабочий инструмент, основанный на фундаментальных принципах институционального трейдинга.
Автор: Yevgeniy Koshtenko