Общество

Калькулятор лотов для MetaTrader 5: как автоматизировать рутину в трейдинге

В этой статье обозреваю возможности платформы для трейдинга MetaTrader 5, но глазами программиста. Покажу, как самому написать на MQL5 программы-советники (по-трейдерски — индикаторы), которые избавят трейдеров от рутины. Скелет программы: из чего состоит советник Любая программа на MQL5 начинается с описания свойств и подключений: #property strict #property version "1.00" #include После этого идут системные обработчики событий — функции, которые вызываются самим терминалом в нужный момент: Функция | Когда вызывается | Для чего нужна | |---|---|---| | при запуске эксперта | инициализация, загрузка параметров | | при остановке | очистка, сохранение состояния | | при каждом новом тике | основная логика торговли | | по таймеру | периодические проверки, повторные попытки | | при любых торговых событиях | реакция на ордера и сделки | | при действиях на графике | работа с линиями, кнопками, панелями | Дальше вы можете выбрать сами, какие именно события обрабатывать: в простых задачах достаточно OnTradeTransaction , а в торговых системах — весь набор. Зачем автоматизировать управление риском Смысл написания программ сводится к двум целям: автоматизировать рутинные процессы, которые отнимают время и отвлекают от наблюдений за движением рынка; устранить человеческий фактор при оценке риска и защитить капитал. Представьте, что вы видите четкий сигнал для входа в сделку и забываете поставить стоп-лосс — такое случается даже с опытными трейдерами. Увы, без стоп-лосса вероятность потерять депозит никогда не равна нулю. А с программой-советником не придется постоянно держать в голове мысль о стоп-лоссе. Достаточно один раз осознанно выбрать процент риска, который вы готовы понести в сделке — например, 1%. Дальше программа будет подставлять это значение в каждую вашу сделку. А если вы передумали, процент риска всегда можно поменять как в большую, так и в меньшую сторону. Как автоматизировать расчет стоп-лосса и тейк-профита В прошлой главе я привел в пример ситуацию, когда трейдер забыл про стоп-лосс. Но в реальности все гораздо прозаичнее: большинству просто лень его проставлять вручную в каждой сделке. Наблюдая эту тенденцию, брокер обратился ко мне с запросом автоматизировать установку стоп-лосса и тейк-профита. Для решения проблемы я написал помощника, который автоматически ставит SL и TP на основе заданного трейдером риска. Вот как он работает. Определяем допустимый убыток в деньгах: double balance = AccountInfoDouble(ACCOUNT_BALANCE); double risk_money = balance * (RiskPercent / 100.0); Получаем стоимость пункта и минимальный шаг: double pip_size = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE); double pip_value = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE); Вычисляем, сколько пунктов допустимо до стопа: double volume = PositionGetDouble(POSITION_VOLUME); double sl_pips = risk_money / (pip_value * volume); double dist = sl_pips * pip_size; Строим уровни SL и TP: double entry = PositionGetDouble(POSITION_PRICE_OPEN); double sl, tp; if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY){ sl = entry - dist; tp = entry + dist * RiskRewardRatio; }else{ sl = entry + dist; tp = entry - dist * RiskRewardRatio; } Отправляем изменения в торговый сервер: MqlTradeRequest req={0}; MqlTradeResult res={0}; req.action = TRADE_ACTION_SLTP; req.position = PositionGetInteger(POSITION_TICKET); req.sl = NormalizeDouble(sl, _Digits); req.tp = NormalizeDouble(tp, _Digits); req.symbol = _Symbol; OrderSend(req, res); «А может сразу и расчет лотности нам автоматизируешь?», — получил я в догонку от брокера, приступив к созданию помощника. «Человеческая лень не ведает границ», — подумал я и согласился сделать калькулятор лотов. double lot = risk_money / (stop_pips * pip_value); double step = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP); double minlot = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN); lot = MathMax(minlot, MathRound(lot / step) * step); Переводя с MQL5 на человеческий, я сделал так, чтобы при срабатывании стоп-лосса убыток всегда был равен заданному проценту от депозита. Программа делает все расчеты за вас и подстраивает SL и TP под ваш риск. Причем не важно, открыли вы сделку вручную, кнопкой или по рыночному ордеру. Почему нельзя просто написать «100 пунктов стопа» У разных инструментов — разные размеры пункта и разная стоимость тика: Символ | Размер тика | Стоимость тика | Комментарий | |---|---|---|---| EURUSD | 0.00001 | ~1 USD | стандартная пара | USDJPY | 0.001 | ~1 USD | другая точность | XAUUSD (золото) | 0.01 или 0.1 | ~1 USD / 0.01 | брокер-зависимо | US500 (индекс) | 0.25 или 1.0 | зависит от контракта | CFD-инструмент | Но есть нюанс. Для сделок по золоту брокеры часто используют: нестандартный шаг цены (0.01 или 0.1); крупный минимальный лот (0.1 или 1); другие параметры контракта. Если указать «100 пунктов», то на паре EURUSD — это 10 пипсов, а на золоте (XAUUSD) — уже 10 долларов движения. Если вы этого не учли, то советник откроет позицию в 10 раз больше расчётной. Поэтому важно всегда запрашивать параметры у брокера — только так вы можете быть уверены, что расчёт будет точным для любого рынка. Например, я использовал такие: double tick_value = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE); double tick_size = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE); double pip_value_per_lot = (tick_value * pip_size) / tick_size; Что калькулятор лотов даёт трейдеру В эпоху нейросетей странно пренебрегать программами, которые автоматизируют рутину. При этом калькулятор лотов дает больше свободы и гибкости в принятии решений, чем классический алготрейдинг. Проще говоря, трейдер будет кататься, а программа — саночки возить. Преимущества очевидны, но давайте огласим весь список: Контроль риска: вы устанавливаете процент риска от депозита всего один раз и дальше он действует для всех сделок, пока вы не поменяете его вручную. Защита капитала от лени и провалов в памяти: стопы ставятся мгновенно, можно не перепроверять. Совместимость: калькулятор подходит для сделок с валютными парами, металлами и индексами. Дисциплина: риск перестаёт зависеть от эмоций. Программу можно развивать: например, добавить перенос стопа в безубыток, частичное закрытие позиции, визуальную панель для управления риском. Напишите, какой еще помощник нужен трейдерам — возьму идеи в разработку.

Фильтры и сортировка