더블 이동 평균 채널 추세 추종 전략

SMA EMA RSI MACD
생성 날짜: 2024-09-26 16:28:19 마지막으로 수정됨: 2024-09-26 16:28:19
복사: 2 클릭수: 748
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

더블 이동 평균 채널 추세 추종 전략

개요

이 전략은 쌍평준선과 통로를 기반으로 한 트렌드 추적 시스템이다. 이 전략은 단기 및 장기 이동 평균의 교차 신호를 사용하여 지수 이동 평균 ((EMA) 가 형성하는 통로와 결합하여 시장의 추세를 포착하고 거래한다. 이 전략은 다단계 및 공백 시장에 동시에 적용되며, 스톱 손실 및 스톱을 설정하여 위험과 이익을 관리한다.

전략 원칙

전략의 핵심 논리는 다음과 같은 핵심 부분으로 구성됩니다.

  1. 두 개의 간단한 이동 평균 ((SMA) 을 주요 트렌드 지표로 사용한다. 각각 55주기 및 300주기 SMA이다.
  2. 두 개의 지수 이동 평균 ((EMA) 을 사용하여 576 주기의 EMA와 676 주기의 EMA를 사용하여 거래 통로를 형성합니다.
  3. 단기 SMA 상에서 장기 SMA 또는 EMA를 착용할 때, 멀티 신호를 트리거; 단기 SMA 아래에서 장기 SMA 또는 EMA를 착용할 때, 하위 신호를 트리거.
  4. 고정 점수의 스톱 및 스톱 전략을 사용하여, 스톱은 입시 가격의 1/70으로 설정하고, 스톱은 입시 가격의 1/140으로 설정합니다.
  5. 이윤이 300점을 달성했을 때, 이미 얻은 이윤을 보호하기 위해 이동적 손실 제도를 실행하십시오.
  6. 전략은 또한 평형 조건, 예를 들어, 가격이 스톱로스 또는 스톱 포인트 지점을 만지면 자동 평형.

전략적 이점

  1. 다중 지표 결합: 여러 이동 평균과 EMA 채널을 결합하여 트렌드 판단의 정확성을 강화한다.
  2. 양방향 거래: 이 전략은 상장과 공시장에서 모두 수익을 올릴 수 있으며, 자금 활용 효율성을 높인다.
  3. 리스크 관리: 고정 점수의 스톱로스 및 스톱스톱을 사용하여 거래 당 위험을 효과적으로 제어하십시오.
  4. 이윤 보호: 유동적 인 중지 메커니즘을 사용하여 추세가 지속되는 동안 일부 이윤을 잠금합니다.
  5. 유연성: 전략의 매개 변수는 시장의 다른 조건에 맞게 조정할 수 있다.

전략적 위험

  1. 변동 시장 위험: 변동 시장에서는 잘못된 신호가 자주 발생하여 연속적인 손실이 발생할 수 있습니다.
  2. 슬라이드 포인트 위험: 높은 변동성이 있는 시장에서 실제 거래 가격은 이상적인 가격과 큰 오차가 있을 수 있다.
  3. 과도한 거래: 거래 신호의 빈도가 과도한 거래 비용으로 이어질 수 있다.
  4. 매개 변수 민감성: 전략의 성능은 매개 변수 설정에 매우 민감할 수 있으며, 다른 시장 환경에는 자주 조정할 필요가 있을 수 있다.

전략 최적화 방향

  1. 변동률 지표를 도입: ATR ((평균 실제 범위) 를 추가하여 상이한 시장 변동 상황에 맞게 스톱로즈 및 스톱포트 지점을 동적으로 조정하는 것을 고려하십시오.
  2. 트렌드 강도 필터링을 높여: ADX를 도입하여 약한 트렌드 신호를 필터링하여 가짜 브레이크로 인한 손실을 줄일 수 있습니다.
  3. 진출 시기를 최적화: RSI ((상대적으로 강한 지표) 또는 MACD ((이동 평균 동향 분산도) 를 결합하여 진출 시기를 최적화하여 승률을 높이는 것을 고려하십시오.
  4. 자금 관리 최적화: 동적 포지션 관리를 구현하여, 계좌의 순가치와 시장의 변동에 따라 매 거래의 자금 비율을 조정한다.
  5. 회전 주기의 확장: 전략에 대해 더 긴 시간 주기의 회전을 실시하여 다양한 시장 환경에서 안정성을 검증한다.

요약하다

이 쌍방향 트렌드 추적 전략은 여러 기술 지표를 결합하여 전체적인 거래 시스템을 제공합니다. 그것은 주요 트렌드를 포착 할 수있을뿐만 아니라 위험 관리 및 수익 보호 장치를 갖추고 있습니다.

전략 소스 코드
/*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)