Это торговая стратегия, которая устанавливает лимитные ордера на основе нескольких скользящих средних. Она будет устанавливать различное количество длинных или коротких лимитных ордеров, когда цена проходит через различные уровни MA, образуя многопозиционную пирамиду. Когда цена снова проходит через MA, будут открыты обратные лимитные ордера. При хранении позиций позиции будут закрыты обратными рыночными ордерами, если цена пройдет средний MA.
Стратегия использует скользящие средние для определения направления тренда. В частности, она определяет количество длинных лимитных ордеров на основе того, проходит ли цена через 3 линии MA вверх. И она определяет количество коротких лимитных ордеров на основе того, проходит ли цена через 3 линии MA вниз.
Таким образом, чем сильнее тренд, тем больше ограничительных ордеров в одном направлении будет установлено. Когда цена показывает сигналы обратного движения, обратные позиции будут открыты. Средний MA используется для оценки прорыва существующих позиций и генерации сигналов закрытия.
Вся стратегия сочетает в себе открытие в стиле пирамиды с закрытием в стиле прорыва, чтобы сформировать логику торговли.
Преимущества этой стратегии включают:
Использование MAs для определения тенденций, простой и интуитивно понятный для работы.
Пирамидальное открытие может получить лучшие средние цены на ранней стадии трендов.
Средний стоп-лосс MA может своевременно остановить потери и контролировать риски.
Ограничьте приказы, избегайте проскальзывания.
Настраиваемые параметры адаптируются к различным продуктам.
Ясная структура, легкая для понимания и расширения.
Риски этой стратегии включают:
Отставание от МО может привести к ошибочным оценкам.
Неудачные ограничительные заказы могут лишить вас шансов на вход.
Средний MA стоп-лосс может быть слишком грубым, чтобы судить о прорывах.
Неправильное настройка параметров может привести к слишком большим позициям.
Недостаточный период обратного испытания может привести к переустановке.
Не учитывается стоимость сделки.
Решения:
Добавить другие показатели для подтверждения, оптимизировать параметры.
Установите срок годности, настроите предельные цены.
Добавьте прибыль или логику при среднем MA стоп-лосс.
Оптимизируйте параметры, оценивайте соотношение риск-вознаграждение.
Расширить период обратных тестов, многорыночные обратные тесты.
Добавьте затраты на транзакции и логику скольжения.
Стратегия может быть оптимизирована в следующих аспектах:
Оптимизировать параметры для большего количества продуктов, используя методы машинного обучения.
Добавить другие индикаторы для подтверждения, например MACD, KDJ и т.д.
Добавьте логику получения прибыли на средней линии MA.
Динамически регулируйте размеры позиций и уровни остановки.
Оптимизировать предельные цены для улучшения затрат на вход, например, на основе волатильности.
Управлять расходами, чтобы предотвратить перегонку тенденций.
Испытание параметров на различных продуктах для создания пулов параметров.
Эта стратегия открывает пирамидальные позиции с лимитовыми ордерами для достижения лучших средних затрат. Она использует средний MA для остановки потерь для контроля рисков. Структура стратегии проста и ясна, легко понять и расширить. Но ее можно улучшить путем введения других индикаторов, оптимизации параметров, улучшения логики лимитового ордера и т. Д., Чтобы сделать ее более надежной. В целом эта стратегия обеспечивает простую и практическую идею торговли лимитовыми ордерами, которая имеет некоторое эталонное значение.
/*backtest start: 2022-09-15 00:00:00 end: 2023-09-21 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2019 //@version=4 strategy(title = "Robot WhiteBox MultiMA", shorttitle = "Robot WhiteBox MultiMA", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3) //Settings capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot") len = input(3, minval = 1, title = "MA Length") s = input(defval = "7. OHLC4", options = ["1. Open", "2. High", "3. Low", "4. Close", "5. HL2", "6. HLC3", "7. OHLC4", "8. OC2", "9. PCMA"], title = "Data") short3 = input(true, title = "short 3") short2 = input(true, title = "short 2") short1 = input(true, title = "short 1") long1 = input(true, title = "long 1") long2 = input(true, title = "long 2") long3 = input(true, title = "long 3") shortlevel3 = input(15.0, title = "Short line 3") shortlevel2 = input(10.0, title = "Short line 2") shortlevel1 = input(5.0, title = "Short line 1") longlevel1 = input(-5.0, title = "Long line 1") longlevel2 = input(-10.0, title = "Long line 2") longlevel3 = input(-15.0, title = "Long line 3") needoffset = input(true, title = "Offset") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //Variables size = strategy.position_size mult = 1 / syminfo.mintick needtime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59) //MA oc2 = (open + close) / 2 pcma = (highest(high, len) + lowest(low, len)) / 2 src = s == "1. Open" ? open : s == "2. High" ? high : s == "3. Low" ? low : s == "4. Close" ? close : s == "5. HL2" ? hl2 : s == "6. HLC3" ? hlc3 : s == "7. OHLC4" ? ohlc4 : s == "8. OC2" ? oc2: close sma = sma(src, len) ma = s == "9. PCMA" ? round(pcma * mult) / mult : round(sma * mult) / mult //Levels longline1 = long1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close longline2 = long2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close longline3 = long3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close shortline1 = short1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close shortline2 = short2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close shortline3 = short3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close //Lines colorlong1 = long1 ? color.lime : na colorlong2 = long2 ? color.lime : na colorlong3 = long3 ? color.lime : na colorshort1 = short1 ? color.red : na colorshort2 = short2 ? color.red : na colorshort3 = short3 ? color.red : na offset = needoffset ? 1 : 0 plot(shortline3, offset = offset, color = colorshort3, title = "Short line 3") plot(shortline2, offset = offset, color = colorshort2, title = "Short line 2") plot(shortline1, offset = offset, color = colorshort1, title = "Short line 1") plot(ma, offset = offset, color = color.blue, title = "MA line") plot(longline1, offset = offset, color = colorlong1, title = "Long line 1") plot(longline2, offset = offset, color = colorlong2, title = "Long line 2") plot(longline3, offset = offset, color = colorlong3, title = "Long line 3") //Trading lot = 0.0 lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1] lots = 0.0 if ma > 0 lots := round(size / lot) strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0 and long1 and needtime)) lots := round(size / lot) strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1 and long2 and needtime)) lots := round(size / lot) strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2 and long3 and needtime)) lots := round(size / lot) strategy.entry("S1", strategy.short, lot, limit = shortline1, when = (lots == 0 and short1 and needtime)) lots := round(size / lot) strategy.entry("S2", strategy.short, lot, limit = shortline2, when = (lots >= -1 and short2 and needtime)) lots := round(size / lot) strategy.entry("S3", strategy.short, lot, limit = shortline3, when = (lots >= -2 and short3 and needtime)) if size > 0 strategy.entry("TPL", strategy.short, 0, limit = ma) if size < 0 strategy.entry("TPS", strategy.long, 0, limit = ma) if time > timestamp(toyear, tomonth, today, 23, 59) strategy.close_all()