
Трехкратная подвижная средняя с тремя относительными подвижными средними - это количественная торговая система, которая сочетает в себе краткосрочные EMA (индексовая подвижная средняя) и RMA (относительная подвижная средняя). Эта стратегия использует показатель ATR (реальная волновая amplitude) для построения ценовых каналов, чтобы идентифицировать входные сигналы, захватывая прорывные действия цены на эти каналы. Встроенная в стратегию система управления риском, которая использует фиксированную пропорцию риска, рассчитывает размер позиции и использует цену открытия как остановку для убытков, а также разрабатывает механизм выравнивания позиции, основанный на цене открытия в предыдущем периоде, чтобы сформировать целостную торговую систему.
Основная логика этой стратегии основана на комбинации двух групп средних с их ATR-каналом:
Система каналов EMA:
Система каналов RMA:
Условия запуска сигнала:
Управление позицией:
Механизм стоп-ложа и плавающего положения:
Быстро реагировать на изменения рынкаИспользуя скользящие средние с ультракороткими циклами, стратегия позволяет быстро улавливать колебания цен и войти в тренд вовремя.
Механизм двойного подтверждения: Системы EMA и RMA работают совместно, и надежность торгов значительно повышается, когда оба сигнализируют о том же направлении.
Приспособность к корректировке колебанийПрименение ATR для регулирования ширины канала позволяет автоматически регулировать чувствительность при различных волатильных условиях.
Точное управление рискамиРиск каждой сделки фиксируется на уровне 0,5% от суммы на счету, при этом порог риска для каждой сделки строго контролируется.
Ясная стратегия выходаПозиционный механизм, основанный на начальной цене предыдущего цикла, обеспечивает четкие условия для получения прибыли.
Дифференцированный канал: Канал EMA использует ATR в 1,5 раза, а канал RMA - в 1,0 раза. Эта конструкция позволяет двум системам иметь разную чувствительность и быть в состоянии захватить различные типы рыночных возможностей.
Риски чрезмерной торговли3) Мобильные средние с очень короткими периодами могут создавать слишком много ложных сигналов на колеблющихся рынках, что приводит к частоте торгов и эрозии комиссий.
Слишком фиксированная настройка Stop LossПрименение цены открытия как точки остановки не всегда является оптимальным вариантом, особенно в условиях высокой волатильности или волатильности.
Условия для равных позиций более простыеКроссовка, основанная только на начале предыдущего цикла, может привести к преждевременному выходу из сильного тренда.
Отсутствие рыночных фильтров: стратегия не различает различные состояния рынка ((тренд/шок), может часто торговать в неблагоприятных условиях рынка.
Риски оптимизации параметров: текущие параметры (например, циклы 3 и ATR) могут быть слишком близки к историческим данным, и есть неопределенность в будущем.
Оптимизация адаптивности состояния рынка:
Подтверждение многократных временных рамок:
Динамическая оптимизация стоп-лосса:
Усиление стратегии “прямых позиций”:
Оценка качества сигнала:
Тройная индексная и тройная относительная подвижная средняя стратегии кросс-канальной адаптации хитро сочетают два различных типа подвижных средних и ATR-каналов, создавая торговую систему, которая чувствительна к ценовым прорывам, но обладает способностью контролировать риск. Эта стратегия особенно подходит для захвата краткосрочных колебаний цен и быстрого реагирования на быстро развивающиеся тенденции.
Тем не менее, существуют и потенциальные риски чрезмерного трейдинга и проблемы адаптации к рыночной среде. Устойчивость и долгосрочная производительность стратегии могут быть значительно улучшены путем добавления фильтрации состояния рынка, оптимизации механизмов остановки убытков и внедрения подтверждения многократных временных рамок.
В целом, это четко структурированная, логически строгая количественная торговая стратегия с хорошей теоретической основой и потенциалом применения. С помощью оптимизированного направления, рекомендованного в данной статье, стратегия может проявить большую адаптивность и стабильность в различных рыночных условиях.
/*backtest
start: 2024-04-07 00:00:00
end: 2025-04-06 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("EMA3 & RMA3 ATR Strategy", overlay=true, initial_capital=10000, currency=currency.USD)
// —— 输入参数 ——
ema_len = input.int(3, "EMA周期")
ema_mult = input.float(1.5, "EMA通道ATR乘数", step=0.1)
rma_len = input.int(3, "RMA周期")
rma_mult = input.float(1.0, "RMA通道ATR乘数", step=0.1)
atr_len = input.int(3, "ATR周期")
// —— 核心计算 ——
ema_val = ta.ema(close, ema_len)
atr_val = ta.atr(atr_len)
ema_upper = ema_val + atr_val * ema_mult
ema_lower = ema_val - atr_val * ema_mult
rma_val = ta.rma(close, rma_len)
rma_upper = rma_val + atr_val * rma_mult
rma_lower = rma_val - atr_val * rma_mult
// —— 信号条件 ——
ema_buy = barstate.isconfirmed and close > ema_upper
ema_sell = barstate.isconfirmed and close < ema_lower
rma_buy = barstate.isconfirmed and close > rma_upper
rma_sell = barstate.isconfirmed and close < rma_lower
// —— 仓位计算 ——
risk_percent = 0.5 // 单次风险0.5%
position_size(price, stop_price) =>
risk_amount = strategy.equity * risk_percent / 100
math.abs(price - stop_price) > 0 ? (risk_amount / math.abs(price - stop_price)) : na
// —— 交易逻辑 ——
var float prev_open = na
if barstate.isconfirmed
prev_open := open[1]
// 多单逻辑
if (ema_buy or rma_buy) and strategy.position_size == 0
stop_price = open
qty = position_size(close, stop_price)
if not na(qty)
strategy.entry("Long", strategy.long, qty=qty)
strategy.exit("Long Stop", "Long", stop=stop_price)
// 空单逻辑
if (ema_sell or rma_sell) and strategy.position_size == 0
stop_price = open
qty = position_size(close, stop_price)
if not na(qty)
strategy.entry("Short", strategy.short, qty=qty)
strategy.exit("Short Stop", "Short", stop=stop_price)
// 平仓逻辑
if strategy.position_size > 0
if ta.crossover(low, prev_open)
strategy.close("Long")
if strategy.position_size < 0
if ta.crossunder(high, prev_open)
strategy.close("Short")
// —— 可视化 ——
plot(ema_val, "EMA3", color.new(#00BFFF, 0), 2)
plot(ema_upper, "EMA Upper", color.red, 1)
plot(ema_lower, "EMA Lower", color.green, 1)
plot(rma_val, "RMA3", color.new(#FFA500, 0), 2)
plot(rma_upper, "RMA Upper", #FF1493, 1)
plot(rma_lower, "RMA Lower", #32CD32, 1)