래리 윌리엄스의 이동평균 크로스오버 전략

저자:차오장, 날짜: 2023-12-26 15:03:16
태그:

img

전반적인 설명

이것은 유명한 트레이더인 래리 윌리엄스가 만든 단순하고 고전적인 이동 평균 크로스오버 전략이다. 이 전략은 9일 간 간단한 이동 평균을 빠른 라인과 21일 기하급수적 이동 평균을 느린 라인으로 사용합니다. 가격이 9일 라인을 넘어서면 길게, 가격이 9일 라인을 넘어서면 짧게 됩니다. 거짓 브레이크오프를 필터링하기 위해, 21일 라인은 트렌드를 확인하는 데도 사용됩니다.

전략 논리

이 전략은 장기 및 단기 기회를 결정하기 위해 움직이는 평균의 황금 크로스오버와 죽음의 크로스오버를 기반으로 한다. 빠른 선이 밑에서 느린 선 위에 넘어가면, 그것은 황금 크로스오버이며, 상승 추세로의 변화를 나타낸다. 그러한 브레이크오버는 장기간 이동을 위해 사용됩니다. 빠른 선이 위에서 느린 선 아래로 넘어가면, 그것은 죽음의 크로스오버이며, 쇠퇴 추세로의 변화를 나타냅니다. 그러한 브레이크오버는 짧은 이동을 위해 사용됩니다.

가상 손실로 이어지는 가짜 브레이크오프를 피하기 위해, 21일 라인은 주요 트렌드를 결정하는 데도 사용됩니다. 빠른 라인이 깨지고 가격이 21일 라인을 깨는 경우에만 거래 조치가 취됩니다. 이것은 많은 가짜 브레이크오프를 효과적으로 필터링 할 수 있습니다.

구체적으로, 긴 신호는: 빠른 라인이 어제의 최고치를 넘어서 21일 라인을 넘어서면 발사됩니다. 짧은 신호는: 빠른 라인이 어제의 최저치를 넘어서 21일 라인을 넘어서면 발사됩니다.

이점 분석

이 전략의 주요 장점은 다음과 같습니다.

  1. 전략 아이디어는 간단하고 이해하기 쉽고 실행하기 쉽습니다.
  2. 이동 평균 기법은 성숙하고 널리 사용되고 있습니다.
  3. 21일 기준을 도입하면 가짜 유출을 효과적으로 차단할 수 있습니다.
  4. 어제의 극한점들을 이용하여 포지션에 진입하면 함락되는 것을 막을 수 있습니다.
  5. 전략 매개 변수는 비교적 견고하지만 쉽게 부착되지 않습니다.

위험 분석

이 전략의 주요 위험은 다음과 같습니다.

  1. 변동성 있는 시장에서는 이동 평균이 뒤떨어지고 가장 좋은 입점점을 놓칠 수 있습니다.
  2. 가격 움직임이 옆으로 나타나는 범위 시장에서는 빈번한 작은 손실이 발생할 수 있습니다.
  3. 갑작스러운 사건과 중요한 트렌드 변화에 효과적으로 대응할 수 없습니다.

이러한 위험을 해결하기 위해 다음과 같은 측면에서 최적화를 할 수 있습니다.

  1. 더 많은 실시간 신호를 위해 MACD 지표를 도입합니다.
  2. 매매 기간 매개 변수를 높이고 거래 빈도를 낮추는 것
  3. 단일 거래 손실 금액을 제어하기 위해 스톱 로스 전략을 추가합니다.

최적화 방향

이 전략의 주요 최적화 방향은 다음과 같습니다.

  1. 매개 변수 최적화. 더 체계적인 방법을 사용하여 더 나은 매개 변수를 찾기 위해 다른 MA 기간 조합을 테스트 할 수 있습니다.

  2. 스톱 손실을 추가합니다. 적절한 이동 스톱 손실, 비율 스톱 손실 등을 설정하여 단일 거래 손실을 효과적으로 제어합니다.

  3. 다른 지표를 결합합니다. MACD, ATR, KD 등에서 신호를 도입하여 더 많은 확인 차원을 얻고 전략 안정성을 향상시킵니다.

  4. 출구 메커니즘을 최적화합니다. 반전 신호 출구, 이동 수익 출구 등과 같은 다양한 출구 방법을 연구합니다.

결론

요약하자면,이 이동 평균 크로스오버 전략은 매우 전형적이고 실용적인 트렌드 다음 전략입니다. 그것은 이해하기 쉽고 구현 할 수있는 장점이 있으며 개선할 여지가 있습니다. 매개 변수 최적화, 스톱 손실 최적화, 멀티 지표 조합 등과 같은 방법을 통해 더 안정적이고 실용적인 거래 시스템으로 전환하기 위해 지속적인 개선이 가능합니다.


// @_benac
//@version=5
strategy('Larry', overlay=true , initial_capital=1000 )


////////////////////////////////////////////////////////
//                                                    //
//                                                    //
//                 Codigo Operacional                 //
//                                                    //
//                                                    //
////////////////////////////////////////////////////////

// Usage for Stocks , or Criptos with value bigger then 1, cuz of 0.01 ´pip.
// Daily timeframe
//Observation Point
start     = timestamp(2020, 00, 00, 00, 00)         // backtest start window
finish    = timestamp(2022, 01, 07, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"  

if time < start 
    strategy.close_all("Closing All")

// Take infos from inputs. 
inp_mmshort = input.int(defval = 9, title = "Media Curta"  )
inp_mminter = input.int(defval = 21, title = "Media Curta"  )

// Risk Manager, here define max and min 
inp_max = input.int(defval = 15, title = "Percentual Ganho"  )
inp_min = input.int(defval = 5, title = "Percental  Perda"  )

// Converting the input to % 
pmax = (inp_max / 100 )
pmin =  (inp_min / 100)

// Infos From Moving Average
mm_short = ta.sma(close , inp_mmshort)
mm_inter = ta.ema(close , inp_mminter)


// Trend Logic
//Long Condition 

//Setup do Larry Willians Bem Simples , media virou para cima e rompeu a maxima de referencia, compra. 
tendencia_alta = mm_short[2] > mm_short[1] and mm_short > mm_short[1] and close > high[1] and close > mm_short and mm_short > mm_inter
tendencia_baixa = mm_short[2] < mm_short[1] and mm_short < mm_short[1] and close > low[1] and close < mm_short and mm_short < mm_inter

// Creating the entry
if tendencia_alta 
    strategy.entry("Compra" , strategy.long , stop = low - 0.01  )
    stop_inst = low - 0.01 
if tendencia_baixa 
    strategy.entry("Venda" , strategy.short , stop= high + 0.01  )
    stop_inst = high + 0.01


// TrailingStop Creation

// Sell Position
if strategy.position_size < 0 
    gain_p = strategy.opentrades.entry_price(0) - (strategy.opentrades.entry_price(0) * pmax) 
    stop_p = strategy.opentrades.entry_price(0) + (strategy.opentrades.entry_price(0) * pmin) 
    // Managing the position
    if close < gain_p 
        strategy.close_all(comment = " 1 - Ganho : " + str.tostring( gain_p) + " Perda : " + str.tostring( stop_p)  )
    if close > stop_p 
        strategy.close_all(comment = " 2 - Ganho : " + str.tostring( gain_p) + " Perda : " + str.tostring( stop_p)  )
    
    if  high > mm_short[1]
        strategy.close_all(comment = " 3 - Ganho : " + str.tostring( gain_p) + " Perda : " + str.tostring( stop_p)  )
      

// Buy Position    
if strategy.position_size > 0
    gain_p = strategy.opentrades.entry_price(0) + (strategy.opentrades.entry_price(0) * pmax) 
    stop_p = strategy.opentrades.entry_price(0) - (strategy.opentrades.entry_price(0) * pmin) 
    // Managing the position
    if close > gain_p 
        strategy.close_all(comment = " 1- Ganho : " + str.tostring( gain_p) + " Perda : " + str.tostring( stop_p)  )
    if close < stop_p 
        strategy.close_all(comment = " 2 -Ganho : " + str.tostring( gain_p) + " Perda : " + str.tostring( stop_p)  )
    if low < mm_short[1]
        strategy.close_all(comment = " 3 -Ganho : " + str.tostring( gain_p) + " Perda : " + str.tostring( stop_p)  )
        



더 많은