리소스 로딩... 로딩...

전략에 따라 트리플 이동 평균 트렌드

저자:차오장, 날짜: 2024-02-01 11:02:17
태그:

img

전반적인 설명

이 전략은 거북이 거래의 개념을 니코 베이커의 단계 분석과 결합하여, 트렌드를 따르는 트렌드 방향을 결정하기 위해 다른 주기의 세 개의 이동 평균을 사용하여 트렌드 방향을 결정합니다. 빠른 이동 평균이 중간 이동 평균을 넘어서고 세 가지 이동 평균이 동일한 상향 또는 하향 트렌드에있을 때 길게 갈 수 있습니다. 빠른 이동 평균이 중간 이동 평균을 넘어서고 세 가지 이동 평균이 동일한 상향 또는 하향 트렌드에있을 때 짧게 갈 수 있습니다.

전략 논리

  1. 서로 다른 주기의 이동 평균을 세 개 계산합니다. 빠른 이동 평균 기간은 8일이고, 중간 이동 평균 기간은 21일이고, 느린 이동 평균 기간은 55일입니다.

  2. 진입 조건을 결정합니다. 빠른 이동 평균이 중간 이동 평균을 넘어서고 세 가지 이동 평균이 모두 상승 추세를 보이는 경우, 길게 이동합니다. 빠른 이동 평균이 중간 이동 평균을 넘어서고 세 가지 이동 평균이 모두 하락 추세를 보이는 경우, 짧게 이동합니다.

  3. 출구 조건을 결정합니다: 빠른 이동 평균이 반대 방향으로 중간 이동 평균을 넘을 때 포지션을 닫습니다.

  4. 위치 사이징: 고정 위치 사이징을 사용, 매번 1 개의 계약을 열 수 있습니다. ATR은 또한 위치 사이징을 동적으로 조정하는 데 사용할 수 있습니다.

이점 분석

  1. 3개의 이동 평균을 사용하면 트렌드 방향을 결정하고 잘못된 브레이크를 피하는 데 도움이 됩니다.

  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

더 많은