Стратегия MACD Sample 1010
Обзор
Данный модуль переносит советник MetaTrader macd_sample_1010.mq4 в высокоуровневый API StockSharp. Изначально скрипт использовал полосы Боллинджера и простые правила управления капиталом: закрытие выше верхней полосы с учётом заданного буфера открывало короткую позицию, закрытие ниже нижней полосы — длинную. Каждая позиция сопровождалась фиксированным профитом и стопом, заданными в пунктах. Перенесённая стратегия подписывается на нужный поток свечей, привязывает индикатор BollingerBands и повторяет всю логику входа и выхода через обработчик завершённых свечей.
Как и оригинальный советник, порт работает только с полностью сформированными свечами, чтобы решения совпадали с обработкой на закрытии бара в MetaTrader. Флаг LotIncrease, отвечающий за автоматическое изменение объёма относительно баланса, также реализован и ведёт себя аналогично МТ4-версии.
Особенности портирования
- Используется высокоуровневая связка
SubscribeCandles+Bind, поэтому индикатор получает готовые свечи без ручного накопления данных. - Все входные параметры оформлены через
StrategyParam<T>, что делает их видимыми в интерфейсе и пригодными для оптимизации. - Расстояния в пунктах переводятся в денежные единицы через
Security.PriceStep, поэтому вызовыBuyMarketиSellMarketвоспроизводят вычисления MQL4. - Баланс-зависимое масштабирование объёма опирается на
Portfolio.CurrentValue(при недоступности — наBeginValue) и ограничено 500 лотами, как в исходном коде. - Обработка ограничена завершёнными свечами, что исключает «дребезг» сигнала между тиками.
- В код добавлены подробные комментарии на английском, поясняющие назначение каждого блока.
Параметры
| Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
ProfitTargetPips |
decimal |
3 |
Количество пунктов прибыли, после достижения которого позиция закрывается. Ноль отключает правило. |
LossLimitPips |
decimal |
20 |
Допустимая просадка в пунктах. При значении 0 стоп-правило не используется. |
BandDistancePips |
decimal |
3 |
Дополнительный буфер (в пунктах) к верхней и нижней полосам Боллинджера перед подтверждением пробоя. |
BollingerPeriod |
int |
4 |
Длина окна для расчёта полос Боллинджера. |
BollingerDeviation |
decimal |
2 |
Множитель стандартного отклонения в индикаторе. |
BaseVolume |
decimal |
1 |
Базовый торговый объём в лотах и одновременно стартовое значение для масштабирования. |
LotIncrease |
bool |
true |
При включении пересчитывает объём на каждой свече в зависимости от отношения текущего баланса к стартовому. |
OneOrderOnly |
bool |
true |
Разрешает новые входы только при нулевой нетто-позиции. Даже при отключении StockSharp всё равно ведёт одну совокупную позицию. |
CandleType |
DataType |
TimeFrame(15m) |
Тип свечей, применяемый и для индикатора, и для торговых решений. |
Логика торговли
- В
OnStartedсоздаётся индикатор Bollinger Bands с заданными параметрами, оформляется подписка наCandleTypeи связывается обработчикProcessCandle. - Каждая завершённая свеча вызывает
ProcessCandle; при активномLotIncreaseпредварительно обновляется рабочий объём сделки. - Если закрытие выше верхней полосы плюс буфер, отправляется рыночная заявка на продажу. Если закрытие ниже нижней полосы минус буфер — рыночная заявка на покупку. При
OneOrderOnly = trueвходы возможны только при отсутствии позиции. - После возможного входа стратегия контролирует открытую позицию:
- Для лонга фиксируется прибыль при достижении
ProfitTargetPipsи фиксируется убыток приLossLimitPips. - Для шорта условия симметричные: закрытие по прибыли или убытку в тех же диапазонах.
- Для лонга фиксируется прибыль при достижении
- Все сравнения выполняются в ценовых единицах, рассчитанных из пункта (
PriceStep), что обеспечивает идентичность расчётам MQL4.
Управление объёмом
- При выключенном
LotIncreaseобъём всегда равенBaseVolume. - При включённом
LotIncreaseпервая свеча запоминает «баланс на один лот». Далее объём на каждой свече равен отношению текущего баланса к этому эталону, округлённому до одной десятой (аналогNormalizeDouble(..., 1)), и ограниченному сверху значением 500. - Если данные по портфелю недоступны, стратегия автоматически возвращается к фиксированному объёму.
Рекомендации по использованию
- Перед запуском убедитесь, что
Security.PriceStepсоответствует минимальному шагу цены для инструмента. - Подберите подходящий таймфрейм в
CandleType. Оригинал чаще запускался на внутридневных свечах (5–15 минут), но допускается любой горизонт. - Настройте параметры полос Боллинджера, величину буфера и значения take-profit/stop-loss под свои требования.
- Определите, требуется ли динамическое масштабирование объёма (
LotIncrease). - Запустите стратегию и следите за журналом: входы и выходы должны совпадать с закрытиями свечей и рассчитанными уровнями.
Отличия от MetaTrader-версии
- StockSharp оперирует агрегированной позицией, поэтому даже при отключенном
OneOrderOnlyфактически будет существовать один нетто-объём, а не отдельные сделки по билетам. - Правила выхода реализованы проверками в коде на закрытии свечей, а не установкой отложенных заявок, однако фактическое поведение остаётся тем же.
- Переключатели детального логирования (
logging,logerrs,logtick) не переносились: встроенный логгер StockSharp уже фиксирует все ордера и сделки. - Файловая статистика оригинального советника не воспроизводится — в StockSharp доступны более полные отчёты по портфелям и стратегиям.