트리플 이동 평균 추세 추종 전략


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

트리플 이동 평균 추세 추종 전략

개요

이 전략은 까마귀 거래법의 개념과 니코 베이커스의 단계 분석을 결합하여 트렌드 방향을 판단하기 위해 세 개의 다른 주기의 이동 평균을 사용하여 트렌드를 추적하여 수익을 얻습니다. 빠른 이동 평균 위에 중간 이동 평균을 가로질러 세 개의 이동 평균이 동일한 상승 또는 하락 추세에있을 때 더 많이하십시오. 빠른 이동 평균이 중간 이동 평균을 가로질러 세 개의 이동 평균이 동일한 상승 또는 하락 추세에있을 때 공백하십시오.

전략 원칙

  1. 세 개의 다른 주기의 이동 평균을 계산한다: 빠른 이동 평균의 주기 8일, 중간 이동 평균의 주기 21일, 느린 이동 평균의 주기 55일.

  2. 진입 조건을 판단하기: 빠른 이동 평균 위에 중간 이동 평균을 통과하고 세 개의 이동 평균이 상승 추세에있을 때 더 많이; 빠른 이동 평균 아래 중간 이동 평균을 통과하고 세 개의 이동 평균이 하향 추세에있을 때 공백을 다.

  3. 출전 조건을 판단하기: 빠른 이동 평균이 반전하여 중속 이동 평균을 가로질러 평행한다.

  4. 포지션 제어: 고정 포지션을 적용하여, 매번 포지션을 1개씩 열립니다. 또한 ATR의 동적에 따라 포지션을 조정할 수도 있습니다.

전략적 이점

  1. 세 개의 이동 평균을 사용하면 트렌드 방향을 판단하고 가짜 돌파구를 피하는 데 도움이 됩니다.

  2. 트렌드를 추적하고 수익 가능성이 높습니다.

  3. 이동 평균을 사용하면 수익이 안정적이고, 인출은 상대적으로 적습니다.

  4. 통제할 수 있는 손해 방지 전략으로 큰 손실을 줄일 수 있다.

위험 분석

  1. 소규모 손실을 반복해서 발생하게 되고, 수익효율이 떨어지게 됩니다.

  2. 이동 평균이 뒤쳐져 있고, 트렌드 전환점을 놓칠 수도 있다.

  3. 고정된 포지션은 위험을 효과적으로 통제할 수 없으며, 큰 시장의 흔들림에 포지션이 폭발할 수 있다.

  4. 매개 변수 최적화가 잘못되면 너무 자주 매매가 이루어지고 거래비용과 지점 손실이 증가합니다.

최적화 방향

  1. 이동 평균의 주기적 변수를 최적화하여 거래 품종의 특성에 더 적합하게 만듭니다.

  2. 변동률 지표 ATR 동적 조정 포지션을 적용하십시오.

  3. 손해배상 정책에 참여하세요.

  4. 거래량 지표와 함께 트렌드 신뢰성을 판단한다.

요약하다

이 전략은 전통적인 기술 분석 지표와 까마귀 거래법의 개념을 통합하고, 세 개의 이동 평균을 사용하여 추세를 추적하고, 파라미터를 최적화하면 더 나은 수익 효과를 얻을 수 있습니다. 그러나이 전략에는 위험도 있습니다.

전략 소스 코드
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// LOVE JOY PEACE PATIENCE KINDNESS GOODNESS FAITHFULNESS GENTLENESS SELF-CONTROL 
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © JoshuaMcGowan

//@version=4

// 1. Define strategy settings
strategy(title="Triple Moving Average", overlay=true,
     pyramiding=0, initial_capital=1000,
     commission_type=strategy.commission.cash_per_order,
     commission_value=4, slippage=2)
     
fastMALen = input(title="Fast MA Length", type=input.integer, defval=8)
medMALen  = input(title="Medium MA Length", type=input.integer, defval=21)
slowMALen = input(title="Slow MA Length", type=input.integer, defval=55)

//endMonth = input(title="End Month Backtest", type=input.integer, defval=11)
//endYear  = input(title="End Year Backtest", type=input.integer, defval=2019)

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 12, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2016, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true

usePosSize = input(title="Use Position Sizing?", type=input.bool, defval=true)
riskPerc   = input(title="Risk %", type=input.float, defval=0.5, step=0.25)

// 2. Calculate strategy values
fastMA = sma(close, fastMALen)
medMA  = sma(close, medMALen)
slowMA = sma(close, slowMALen)

//Position Sizing
riskEquity  = (riskPerc / 100) * strategy.equity
atrCurrency = (atr(20) * syminfo.pointvalue)
posSize     = usePosSize ? floor(riskEquity / atrCurrency) : 1

//Backtest Window
//tradeWindow = (time <= timestamp(endYear, endMonth, 1, 0, 0))

// 3. Determine long trading conditions
enterLong = crossover(fastMA, medMA) and
     (fastMA > slowMA) and (medMA > slowMA) and
     window() 

exitLong = crossunder(fastMA, medMA)

// 4. Code short trading conditions
enterShort = crossunder(fastMA, medMA) and
     (fastMA < slowMA) and (medMA < slowMA) and
     window() 

exitShort = crossover(fastMA, medMA)

// 5. Output strategy data
plot(series=fastMA, color=color.green, title="Fast MA")
plot(series=medMA, color=color.purple, title="Medium MA")
plot(series=slowMA, color=color.red, title="Slow MA",
     linewidth=2)
     
bgColour =
     enterLong and (strategy.position_size < 1) ? color.green :
     enterShort and (strategy.position_size > -1) ? color.red :
     exitLong and (strategy.position_size > 0) ? color.lime :
     exitShort and (strategy.position_size < 0) ? color.orange :
     na

bgcolor(color=bgColour, transp=85)

// 6. Submit entry orders
if (enterLong)
    strategy.entry(id="EL", long=true, qty=1)

if (enterShort)
    strategy.entry(id="ES", long=false, qty=1)

// 7. Submit exit orders
strategy.close_all(when=exitLong and
     (strategy.position_size > 0))
strategy.close_all(when=exitShort and
     (strategy.position_size < 0))

strategy.close_all(when=not window())

//END