이 전략은 본질적으로 이동 평균의 십자 전략입니다. 가격의 이동 평균을 계산하고 특정 단기 및 장기 이동 평균을 설정함으로써, 단기 이동 평균이 하위에서 장기 이동 평균을 넘을 때 길게 이동합니다. 단기 이동 평균이 상위에서 장기 이동 평균을 넘을 때 짧게 이동하십시오.
가격 이동 평균 크로스 전략의 핵심 아이디어는: 가격 이동 평균은 가격 변화의 경향을 효과적으로 반영 할 수 있습니다. 전략은 다른 주기의 두 이동 평균을 설정하고 거래 신호를 생성하기위한 특정 거래 논리를 통해 시장 트렌드의 변화를 판단합니다.
이 전략은 장기 이동 평균과 단기 이동 평균을 계산한다. 긴 선은 주로 주요 트렌드를 판단하고, 짧은 선은 주요 트렌드 동안 중장기 변동을 캡처하는 데 사용됩니다. 전략의 거래 신호는 주로 긴 선의 짧은 선의 교차에서 온다: 짧은 선이 긴 선 위에 넘어가면 긴 신호, 짧은 선이 아래에 넘어가면 짧은 신호. 또한, 전략은 잘못된 신호를 피하기 위해 신호를 필터링합니다.
특히, 전략은 SMA, EMA, VWMA 등을 포함한 7 가지 다른 유형의 이동 평균을 사용합니다. 사용자는 이동 평균 유형을 선택할 수 있습니다. 이동 평균의 길이는 또한 유연하게 설정할 수 있습니다. 또한, 전략은 특정 거래 시간 기간과 위치 관리 메커니즘에 대한 제한을 제공합니다. 이러한 설정을 통해 사용자는 다양한 품종과 시장 환경에 적응하기 위해 전략의 매개 변수를 유연하게 조정할 수 있습니다.
가격 이동 평균의 크로스 전략의 주요 장점은 다음과 같습니다.
전략 논리는 명확하고 간단하며, 이해하기 쉽고 실행하기 쉽고, 초보자도 배울 수 있습니다.
전략의 원칙은 견고하며, 완전히 검증된 이동 평균 거래 규칙을 기반으로 하며, 시장에서 실질적으로 테스트되었습니다.
전략의 매개 변수는 유연하고 조정 가능하며 사용자는 자신의 판단과 시장 선호도에 따라 적절한 매개 변수를 선택할 수 있습니다.
이 전략은 손실된 주문의 보유 시간을 줄이고 불필요한 리버스 포지션을 방지하기 위한 특정 리스크 제어 메커니즘을 갖추고 있습니다.
이 전략에는 여러 종류의 이동 평균이 포함되어 있습니다. 사용자는 거래 품종에 가장 적합한 이동 평균 유형을 선택할 수 있습니다.
이 전략은 주요 휴가 시장에서 비정상적인 변동을 피하기 위해 특정 거래 시간 동안 거래 논리를 가능하게 하는 것을 지원합니다.
비록 가격 이동 평균 크로스 전략은 많은 장점을 가지고 있지만, 실제 거래에는 여전히 다음과 같은 두 가지 측면으로 반영되는 몇 가지 위험이 있습니다.
대부분의 이동 평균의 지연으로 인해 가격 반전이 완료 된 후 후 단계에 교차 신호가 나타날 수 있으며 함정에 빠지기 쉽습니다.
부적절한 매개 변수 설정의 경우 교차 신호가 너무 자주 발생하여 거래 활동이 너무 높고 거래 비용이 증가할 수 있습니다.
위 위험에 대응하여 통제 및 대처 방법은 다음과 같은 방법으로 수행됩니다.
적절한 스톱 로스 범위를 설정하여 단일 손실 위험을 제어합니다.
거래 빈도를 줄이고 필터 조건을 추가하여 과도한 거래를 방지하십시오. 예를 들어 가격 채널 또는 가격 변동 범위 조건을 설정하십시오.
이동 평균의 매개 변수를 최적화하여 자신의 거래 품종과 주기에 가장 적합한 매개 변수 조합을 선택하십시오. 다른 시장 조건 하에서 전략의 안정성을 테스트하십시오.
이 가격 이동 평균 크로스오버 전략의 더 많은 최적화가 여전히 가능합니다. 다음 측면에서 할 수 있습니다.
극단적인 시장 조건에서 보호 메커니즘을 강화하십시오. 예를 들어 비정상적인 시장 상황을 피하기 위해 폭력적인 가격 변동 중에 일시적으로 거래를 중단하십시오.
신호 품질과 안정성을 향상시키기 위해 더 많은 필터 조건과 결합 된 거래 신호를 증가시킵니다. 예를 들어 다른 기술적 지표와 결합 된 트렌드 크로스오버를 식별하십시오.
동적 매개 변수 시스템을 채택합니다. 시장 조건과 품종의 특성에 따라 고정 값을 사용하는 대신 이동 평균 길이, 거래 스위치 등과 같은 주요 매개 변수를 자동으로 조정합니다.
이 이동 평균 크로스오버 신호를 복합 다양성 중재와 같은 고급 전략에 적용합니다. 깊이 있는 전략 최적화를 위해 다른 정보와 결합하십시오.
위의 제안들은 이 전략의 적용 환경과 효과를 넓히고 더 나은 위험과 보상 타협을 달성할 수 있습니다.
이 문서에서는 간단한 이동 평균 크로스오버 전략 - Noro
/*backtest start: 2022-11-20 00:00:00 end: 2023-11-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2019 //@version=4 strategy(title = "Noro's CrossMA", shorttitle = "CrossMA", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0, commission_value = 0.1) needlong = input(true, "long") needshort = input(true, "short") lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %") type = input(defval = "SMA", options = ["SMA", "EMA", "VWMA", "DEMA", "TEMA", "KAMA", "PCMA"], title = "MA type") src = input(close, defval = close, title = "MA Source") len = input(30, defval = 30, minval = 1, title = "MA length") off = input(00, defval = 00, minval = 0, title = "MA offset") anti = input(true, defval = true, title = "Anti-saw filter") showma = input(true, defval = true, title = "Show MA") showbg = input(false, defval = false, title = "Show background") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //DEMA dema = 2 * ema(src, len) - ema(ema(close, len), len) //TEMA xPrice = close xEMA1 = ema(src, len) xEMA2 = ema(xEMA1, len) xEMA3 = ema(xEMA2, len) tema = 3 * xEMA1 - 3 * xEMA2 + xEMA3 //KAMA xvnoise = abs(src - src[1]) nfastend = 0.20 nslowend = 0.05 nsignal = abs(src - src[len]) nnoise = sum(xvnoise, len) nefratio = iff(nnoise != 0, nsignal / nnoise, 0) nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2) kama = 0.0 kama := nz(kama[1]) + nsmooth * (src - nz(kama[1])) //PriceChannel lasthigh = highest(src, len) lastlow = lowest(src, len) center = (lasthigh + lastlow) / 2 sma_1 = sma(src, len) ema_1 = ema(src, len) vwma_1 = vwma(src, len) ma2 = type == "SMA" ? sma_1 : type == "EMA" ? ema_1 : type == "VWMA" ? vwma_1 : type == "DEMA" ? dema : type == "TEMA" ? tema : type == "KAMA" ? kama : type == "PCMA" ? center : 0 ma = ma2[off] macol = showma ? color.blue : na plot(ma, color = macol, linewidth = 3, transp = 0) //Background trend = 0 trend := anti == false and close > ma ? 1 : anti == false and close < ma ? -1 : low > ma ? 1 : high < ma ? -1 : trend[1] bgcol = showbg ? trend == 1 ? color.lime : trend == -1 ? color.red : na : na bgcolor(bgcol, transp = 70) //Trading size = strategy.position_size truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59) lot = 0.0 lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1] if trend == 1 and trend[1] == -1 strategy.entry("Long", strategy.long, lot, when = needlong and truetime) if trend == -1 and trend[1] == 1 strategy.entry("Short", strategy.short, lot, when = needshort and truetime) if size > 0 and needshort == false and trend == -1 strategy.close_all() if size < 0 and needlong == false and trend == 1 strategy.close_all() if time > timestamp(toyear, tomonth, today, 23, 59) strategy.close_all() strategy.cancel("Long") strategy.cancel("Short")