Эта стратегия является системой, основанной на двойных скользящих средних и каналах. Она использует перекрестные сигналы от краткосрочных и долгосрочных скользящих средних, в сочетании с каналами, сформированными экспоненциальными скользящими средними (EMAs), для улавливания рыночных тенденций и выполнения сделок. Стратегия применима как к длинным, так и к коротким позициям, используя механизмы стоп-лосса и берут-прибыль для управления рисками и прибылью.
Основная логика стратегии включает следующие ключевые компоненты:
Эта двойная движущаяся средняя стратегия предоставляет комплексную торговую систему путем объединения нескольких технических индикаторов. Она не только отслеживает основные тенденции, но и включает в себя механизмы управления рисками и защиты прибыли. Хотя существуют некоторые потенциальные риски, благодаря постоянной оптимизации и корректировке параметров стратегия имеет потенциал для хорошей работы в различных рыночных условиях.
/*backtest start: 2024-08-26 00:00:00 end: 2024-09-24 08:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("RC BTC Vegas 5min free ", overlay=true ) // 定义输入参数 short_ma_length = input.int(55, title="Short MA Length") long_ma_length = input.int(300, title="Long MA Length") ema1_length = input.int(576, title="EMA 1 Length") ema2_length = input.int(676, title="EMA 2 Length") // 计算移动平均线 short_ma = ta.sma(close, short_ma_length) long_ma = ta.sma(close, long_ma_length) ema1 = ta.ema(close, ema1_length) ema2 = ta.ema(close, ema2_length) // 确定买入和卖出信号 enter_long = ta.crossover(short_ma +5 , ema1) enter_long2 = ta.crossover(short_ma +5 , long_ma) enter_long3 =ta.crossover(long_ma+5 , ema1) exit_long = ta.crossunder(short_ma -5, ema1) exit_long2 = ta.crossunder(short_ma -5, long_ma) exit_long3 = ta.crossunder(long_ma-5 , ema1) // 记录进场价格 var float long_stop_loss = na var float long_take_profit = na if (enter_long or exit_long ) long_stop_loss := close if (enter_long or exit_long) long_take_profit := close // 根据进场价格计算止损和止盈点数 stop_loss_points = long_stop_loss /70 take_profit_points = long_take_profit /140 // 设置固定点数的止损和止 Along_stop_loss = close - stop_loss_points Along_take_profit = close + take_profit_points short_stop_loss = close + stop_loss_points short_take_profit = close - take_profit_points // 检查持仓利润是否达到300点 long_profit_target_reached = (strategy.position_size > 0 and (close - strategy.position_avg_price) >= take_profit_points) short_profit_target_reached = (strategy.position_size < 0 and (strategy.position_avg_price - close) >= take_profit_points) // 即时止损和止盈检查 long_stop_loss_hit = (strategy.position_size > 0 and close <= strategy.position_avg_price - stop_loss_points) long_take_profit_hit = (strategy.position_size > 0 and close >= strategy.position_avg_price + take_profit_points) short_stop_loss_hit = (strategy.position_size < 0 and close >= strategy.position_avg_price + stop_loss_points) short_take_profit_hit = (strategy.position_size < 0 and close <= strategy.position_avg_price - take_profit_points) // 上一根K棒的止盈止损检查 long_stop_loss_hit_prev = (strategy.position_size > 0 and low[1] <= strategy.position_avg_price - stop_loss_points) long_take_profit_hit_prev = (strategy.position_size > 0 and high[1]>= strategy.position_avg_price + take_profit_points) short_stop_loss_hit_prev = (strategy.position_size < 0 and high[1] >= strategy.position_avg_price + stop_loss_points) short_take_profit_hit_prev = (strategy.position_size < 0 and low[1] <= strategy.position_avg_price - take_profit_points) // 创建警报条件 alertcondition(long_stop_loss_hit, title="Long Stop Loss Hit", message="Long position stop loss hit") alertcondition(long_take_profit_hit, title="Long Take Profit Hit", message="Long position take profit hit") alertcondition(short_stop_loss_hit, title="Short Stop Loss Hit", message="Short position stop loss hit") alertcondition(short_take_profit_hit, title="Short Take Profit Hit", message="Short position take profit hit") // 移动止损输入 initialProfitLevel = input.float(9, title="Initial Profit Level (points)") trailingStopIncrement = input.float(3, title="Trailing Stop Increment (points)") if (close - long_take_profit >= 150) strategy.exit("多單移平", from_entry="Buy", trail_price=close+5 , trail_offset=5 ) if (close - long_take_profit <= -150) strategy.exit("空單移平", from_entry="Sell", trail_price=close-5 , trail_offset=5) // 执行多单交易 if (enter_long or enter_long2 ) strategy.entry("Buy", strategy.long, qty=1 , comment = "做多") if (long_stop_loss_hit or long_take_profit_hit ) strategy.close("Buy",comment = "多單平倉") //死亡交叉才跟著做空就打開 if (exit_long or exit_long2 ) strategy.entry("Sell" ,strategy.short, qty=1 , comment = "做空") // 执行空单交易 if ( short_take_profit_hit or short_stop_loss_hit ) strategy.close("Sell",comment = "空單平倉") // 绘制移动平均线 plot(short_ma, title="Short MA", color=color.blue) plot(long_ma, title="Long MA", color=color.red) // 绘制进场和出场点 plotshape(series=enter_long, location=location.belowbar, color=color.green, style=shape.labelup, text="做多") plotshape(series=exit_long , location=location.abovebar, color=color.red, style=shape.labeldown, text="做空") plotshape(series=long_take_profit_hit , location=location.abovebar, color=color.yellow, style=shape.labeldown, text="多單止盈") plotshape(series=short_take_profit_hit , location=location.abovebar, color=color.yellow, style=shape.labeldown, text="空單止盈") plotshape(series=short_stop_loss_hit , location=location.abovebar, color=color.black, style=shape.labeldown, text="空單止損") plotshape(series=long_stop_loss_hit , location=location.abovebar, color=color.black, style=shape.labeldown, text="多單止損") // 绘制止盈和止损点 plot(series=enter_long ? Along_take_profit : na, title="Take Profit", color=color.green, linewidth=2, style=plot.style_linebr) plot(series=enter_long ? Along_stop_loss : na, title="Stop Loss", color=color.red, linewidth=2, style=plot.style_linebr)