이것은 유명한 트레이더인 래리 윌리엄스가 만든 단순하고 고전적인 이동 평균 크로스오버 전략이다. 이 전략은 9일 간 간단한 이동 평균을 빠른 라인과 21일 기하급수적 이동 평균을 느린 라인으로 사용합니다. 가격이 9일 라인을 넘어서면 길게, 가격이 9일 라인을 넘어서면 짧게 됩니다. 거짓 브레이크오프를 필터링하기 위해, 21일 라인은 트렌드를 확인하는 데도 사용됩니다.
이 전략은 장기 및 단기 기회를 결정하기 위해 움직이는 평균의 황금 크로스오버와 죽음의 크로스오버를 기반으로 한다. 빠른 선이 밑에서 느린 선 위에 넘어가면, 그것은 황금 크로스오버이며, 상승 추세로의 변화를 나타낸다. 그러한 브레이크오버는 장기간 이동을 위해 사용됩니다. 빠른 선이 위에서 느린 선 아래로 넘어가면, 그것은 죽음의 크로스오버이며, 쇠퇴 추세로의 변화를 나타냅니다. 그러한 브레이크오버는 짧은 이동을 위해 사용됩니다.
가상 손실로 이어지는 가짜 브레이크오프를 피하기 위해, 21일 라인은 주요 트렌드를 결정하는 데도 사용됩니다. 빠른 라인이 깨지고 가격이 21일 라인을 깨는 경우에만 거래 조치가 취됩니다. 이것은 많은 가짜 브레이크오프를 효과적으로 필터링 할 수 있습니다.
구체적으로, 긴 신호는: 빠른 라인이 어제의 최고치를 넘어서 21일 라인을 넘어서면 발사됩니다. 짧은 신호는: 빠른 라인이 어제의 최저치를 넘어서 21일 라인을 넘어서면 발사됩니다.
이 전략의 주요 장점은 다음과 같습니다.
이 전략의 주요 위험은 다음과 같습니다.
이러한 위험을 해결하기 위해 다음과 같은 측면에서 최적화를 할 수 있습니다.
이 전략의 주요 최적화 방향은 다음과 같습니다.
매개 변수 최적화. 더 체계적인 방법을 사용하여 더 나은 매개 변수를 찾기 위해 다른 MA 기간 조합을 테스트 할 수 있습니다.
스톱 손실을 추가합니다. 적절한 이동 스톱 손실, 비율 스톱 손실 등을 설정하여 단일 거래 손실을 효과적으로 제어합니다.
다른 지표를 결합합니다. MACD, ATR, KD 등에서 신호를 도입하여 더 많은 확인 차원을 얻고 전략 안정성을 향상시킵니다.
출구 메커니즘을 최적화합니다. 반전 신호 출구, 이동 수익 출구 등과 같은 다양한 출구 방법을 연구합니다.
요약하자면,이 이동 평균 크로스오버 전략은 매우 전형적이고 실용적인 트렌드 다음 전략입니다. 그것은 이해하기 쉽고 구현 할 수있는 장점이 있으며 개선할 여지가 있습니다. 매개 변수 최적화, 스톱 손실 최적화, 멀티 지표 조합 등과 같은 방법을 통해 더 안정적이고 실용적인 거래 시스템으로 전환하기 위해 지속적인 개선이 가능합니다.
// @_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) )