MA선을 기반으로 한 추세추종 전략


생성 날짜: 2024-02-22 17:24:02 마지막으로 수정됨: 2024-02-22 17:24:02
복사: 0 클릭수: 589
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

MA선을 기반으로 한 추세추종 전략

개요

이 전략은 다양한 주기의 MA 이동 평균을 계산하여 시장의 경향 방향을 판단하고, 추세가 상승할 때 더 많이 하고, 추세가 하락할 때 공백을 하고, 추세 추적을 구현한다.

전략 원칙

  1. 20주기, 60주기, 120주기 MA선을 계산합니다.
  2. MA20, MA60, 그리고 MA120의 크기를 비교하여 현재의 트렌드 방향을 판단합니다.
    • 만약 MA20>MA60>MA120이 있다면, 추세가 올라간다고 판단합니다.
    • 만약 MA20
  3. MA20에서 MA60을 착용할 때 상장하고, MA20 아래에서 MA60을 착용할 때 상장합니다.
  4. MA60을 기준으로 하락을 멈추는 기준선
    • MA60의 3배에 달하는 멀티 헤드 스티커
    • MA60의 0.9배

우위 분석

  1. 다른 주기의 MA 조합을 사용하여 트렌드를 판단하고, whipsaws를 피하십시오.
  2. 트렌드 전환점에서만 출전하여 승률을 높여라
  3. 뚜렷한 ‘정지’와 ‘피해’의 규칙으로 위험을 줄일 수 있습니다.

위험 분석

  1. 위기상황에서 MA선 교차가 빈번하게 발생할 수 있으며, 이는 과도한 거래 빈도를 초래할 수 있다.
  2. 스톱 스톱 손실 파라미터는 최적화해야 하며, 그렇지 않으면 너무 일찍 스톱 스톱 손실 또는 스톱 스톱 손실이 부족할 수 있습니다.

최적화 방향

  1. 지표를 늘리고, 자주 거래하는 것을 피한다.
  2. MA 주기 변수 조합을 최적화하여 최적의 변수를 찾습니다.
  3. 이득을 극대화하고 위험을 줄이는 균형을 보장하기 위해 스톱 스톱 손실 인자를 테스트하고 최적화하십시오.

요약하다

이 전략은 전체적인 아이디어가 명확하며 MA를 사용하여 트렌드를 판단하는 것은 매우 고전적이며, 매개 변수 최적화 및 지표 최적화 후 매우 실용적인 트렌드 추적 전략이 될 수 있다.

전략 소스 코드
/*backtest
start: 2023-02-15 00:00:00
end: 2024-02-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("MA60上多下空", overlay=true)

// 计算MA20/60/120
ma20 = ta.sma(close, 20)
ma60 = ta.sma(close, 60)
ma120 = ta.sma(close, 120)

// 判断MA的趋势
maUpTrend = ma20 > ma60 and ma60 > ma120
maDownTrend = ma20 < ma60 and ma60 < ma120

// 画竖直线标记MA趋势转折点
plotshape(maUpTrend and ta.crossover(ma20, ma60), style=shape.triangledown, location=location.abovebar, color=color.green, size=size.small)
plotshape(maDownTrend and ta.crossunder(ma20, ma60), style=shape.triangleup, location=location.belowbar, color=color.red, size=size.small)

// 画背景标记MA趋势
bgcolor(maUpTrend ? color.new(color.green, 90) : na)
bgcolor(maDownTrend ? color.new(color.red, 90) : na)

// 建立多头仓位的条件
longCondition = ta.crossover(close, ma60)

// 建立空头仓位的条件
shortCondition = ta.crossunder(close, ma60)

// 在穿过MA60时,根据条件建立相应的多头或空头仓位
if (longCondition)
    strategy.entry("Long", strategy.long)

if (shortCondition)
    strategy.entry("Short", strategy.short)

// 止盈止损规则
calculateReturns() =>
    close / strategy.position_avg_price - 1

takeProfitCondition = calculateReturns() >= 3  // 仓位盈利达到300%
stopLossCondition = calculateReturns() <= -0.1  // 仓位亏损达到10%

if (takeProfitCondition)
    strategy.close("Long", comment="Take Profit")
    strategy.close("Short", comment="Take Profit")

if (stopLossCondition)
    strategy.close("Long", comment="Stop Loss")
    strategy.close("Short", comment="Stop Loss")