Стратегия двойного движущегося среднего трейдинга является краткосрочной торговой стратегией, которая использует как динамику цен, так и индикаторы тренда. Стратегия использует цену закрытия, цену открытия, канал цены, быстрый RSI и другие индикаторы для генерации торговых сигналов. Она будет устанавливать длинные или короткие позиции при появлении ценовых прорывов или сигналов индикатора. Она также устанавливает условия остановки потери, чтобы заставить ликвидацию, когда потери достигают определенного уровня.
Стратегия принимает торговые решения в основном на основе следующих показателей оценки:
Ценовой канал: рассчитывает самые высокие и самые низкие цены последних 30 свечей для определения диапазона канала. Цена закрытия выше средней точки канала считается быстрой. Цена закрытия ниже средней точки канала считается медвежьей.
Быстрый RSI: рассчитывает значение RSI последних 2 свечей. RSI ниже 25 считается перепроданным, а RSI выше 75 считается перекупленным.
Линия Инь-Ян: Вычислить размер сущности последних 2 свечей. Две красные свечи предполагают медвежий сигнал, а две зеленые свечи предполагают бычий сигнал.
Условие прекращения потерь: принудительная ликвидация, когда убытки достигают определенного процента для ограничения потерь.
С помощью комбинационных сигналов от тенденции, импульса и показателей перекупленности/перепроданности эта краткосрочная стратегия может эффективно выявлять изменения и генерировать своевременные торговые сигналы.
Преимущества этой стратегии включают:
Улучшенная точность сигнала путем объединения нескольких индикаторов, что помогает отфильтровать ложные сигналы.
Более быстрые реакции на поворотные моменты благодаря использованию Fast RSI, который более чувствителен, чем обычный RSI.
Высокая надежность в различных продуктах и временных рамках благодаря строгой оптимизации параметров во время бэкстестов.
Автоматический механизм остановки потерь для контроля потенциальных потерь, превышающих ожидания.
Некоторые риски этой стратегии:
Неправильное установление параметров ценового канала может вызвать шоки.
Время удержания односторонней позиции может быть слишком длинным во время сильных тенденций, превышая прогнозы.
Неправильное установление точки остановки может увеличить потери. Этот параметр требует осторожной конфигурации - слишком высокий или слишком низкий может быть неблагоприятным.
Мы можем смягчить и уменьшить эти риски путем корректировки параметров канала, оптимизации времени входа, динамической корректировки точек остановки потерь и т.д.
Некоторые направления, по которым стратегия может быть еще более оптимизирована:
Включить алгоритмы машинного обучения для автоматической оптимизации параметров, повышая адаптивность.
Объедините больше источников данных, таких как новости, чтобы улучшить торговые решения и точность сигналов.
Разработка динамических механизмов размещения позиций на основе рыночных условий для лучшего контроля рисков.
Расширение применения к торговле фьючерсными арбитражами для дальнейшего повышения абсолютной доходности.
Эта стратегия сочетает в себе различные методы, включая прорыв цены, индикаторный сигнал, стоп-лосс и т. Д. Она продемонстрировала хорошую стабильность и производительность в бэк-тестах и живой торговле. По мере прогресса алгоритма и технологий обработки данных для этой стратегии остается значительный рост. Можно ожидать постоянных улучшений.
/*backtest start: 2023-11-23 00:00:00 end: 2023-11-30 00:00:00 period: 30m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's Price Channel Strategy v1.2", shorttitle = "Price Channel str 1.2", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") capital = input(100, defval = 100, minval = 1, maxval = 100000, title = "capital, %") uset = input(true, defval = true, title = "Use trend entry") usect = input(true, defval = true, title = "Use counter-trend entry") usersi = input(true, defval = true, title = "Use RSI strategy") pch = input(30, defval = 30, minval = 2, maxval = 200, title = "Price Channel Period") showcl = input(true, defval = true, title = "Price Channel") fromyear = input(2018, defval = 2018, 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") src = close //Price channel lasthigh = highest(src, pch) lastlow = lowest(src, pch) center = (lasthigh + lastlow) / 2 trend = low > center ? 1 : high < center ? -1 : trend[1] col = showcl ? blue : na col2 = showcl ? black : na plot(lasthigh, color = col2, linewidth = 2) plot(lastlow, color = col2, linewidth = 2) plot(center, color = col, linewidth = 2) //Bars bar = close > open ? 1 : close < open ? -1 : 0 rbars = sma(bar, 2) == -1 gbars = sma(bar, 2) == 1 //Fast RSI fastup = rma(max(change(src), 0), 2) fastdown = rma(-min(change(src), 0), 2) fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown)) //Signals body = abs(close - open) abody = sma(body, 10) up1 = rbars and close > center and uset dn1 = gbars and close < center and uset up2 = close <= lastlow and close < open and usect dn2 = close >= lasthigh and close > open and usect up3 = fastrsi < 25 and close > center and usersi dn3 = fastrsi > 75 and close < center and usersi exit = (((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2) lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1] //Trading if up1 or up2 or up3 if strategy.position_size < 0 strategy.close_all() strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if dn1 or dn2 or dn3 if strategy.position_size > 0 strategy.close_all() strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59) or exit strategy.close_all()