이 전략은 빠른 30일 간편 이동 평균과 주식 가격의 느린 33일 간편 이동 평균이 교차할 때 LONG 또는 SHORT 엔트리 신호를 생성합니다. 반대 신호가 발생하면 즉시 포지션을 종료합니다. 이것은 트렌드의 변화를 효과적으로 파악 할 수 있습니다.
이 전략의 핵심은 빠른 30 일 MA와 느린 33 일 MA를 계산하는 것입니다. 빠른 라인은 가격 변화에 더 빨리 반응 할 수 있으며 느린 라인은 더 나은 필터링 효과를 가지고 있습니다. 빠른 라인이 느린 라인을 위로 돌파하면 구매 신호가 생성됩니다. 이것은 가격이 상승하기 시작하고 느린 라인이 여전히 뒤떨어지는 동안 빠른 라인이 반응했다는 것을 나타냅니다. 빠른 라인이 느린 라인을 아래로 돌파하면 판매 신호가 생성됩니다. 이것은 빠른 라인이 반응하지만 느린 라인이 여전히 뒤떨어지는 동안 가격이 감소하기 시작한다는 것을 나타냅니다.
이러한 빠르고 느린 MA 크로스오버 디자인을 통해 새로운 트렌드가 시작되면 거래 신호를 생성하고 반대 신호에서 종료하여 중장기 가격 추세를 효과적으로 파악 할 수 있습니다. 한편으로는 너무 많은 시장 변동에 의해 잘못 인도되는 것을 피할 수 있습니다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
이 전략에는 몇 가지 위험도 있습니다.
매개 변수 최적화, 스톱 로스 레벨 설정, 트렌드가 명확할 때만 거래 등과 같은 방법은 이러한 위험을 제어하고 줄이기 위해 사용될 수 있습니다.
이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.
테스트와 최적화를 통해 전략 규칙을 지속적으로 개선하여 다른 시장 환경에서 더 신뢰할 수있는 거래 신호를 얻을 수 있습니다.
요약하자면, 이 두 개의 MA 크로스오버 브레이크아웃 전략은 매우 간단하고 실용적입니다. 빠른 MA와 느린 MA를 결합함으로써 중장기 트렌드의 시작을 효과적으로 식별하고 비교적 신뢰할 수있는 거래 신호를 생성 할 수 있습니다. 또한, 중지 손실 규칙은 구현하기가 쉽습니다. 추가 최적화로,이 전략은 가치있는 장기 양적 시스템으로 변할 수 있습니다.
/*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"}] */ //@version=3 //future strategy //strategy(title = "es1!_1minute_hull", default_qty_type = strategy.fixed, initial_capital=250000, overlay = true, commission_type=strategy.commission.cash_per_contract,commission_value=2, calc_on_order_fills=false, calc_on_every_tick=false,pyramiding=0) //strategy.risk.max_position_size(2) //stock strategy strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital=1000000, overlay = false)//, calc_on_order_fills=true, calc_on_every_tick=true) //forex strategy //strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true,initial_capital=250000, default_qty_type = strategy.percent_of_equity) //crypto strategy //strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true, commission_type=strategy.commission.percent,commission_value=.005,default_qty_value=10000) //strategy.risk.allow_entry_in(strategy.direction.long) // There will be no short entries, only exits from long. testStartYear = 2010 testStartMonth = 1 testStartDay = 1 testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testEndYear = 2039 testEndMonth = 1 testEndDay = 1 testPeriodEnd = timestamp(testEndYear,testEndMonth,testEndDay,0,0) testPeriod() => //true time >= testPeriodStart and time <= testPeriodEnd ? true : false fast_length = 30 slow_length = 33 ema1 = 0.0 ema2 = 0.0 volumeSum1 = sum(volume, fast_length) volumeSum2 = sum(volume, slow_length) //ema1 := (((volumeSum1 - volume) * nz(ema1[1]) + volume * close) / volumeSum1) ema1 := ema(close,fast_length) //ema2 := (((volumeSum2 - volume) * nz(ema2[1]) + volume * close) / volumeSum2) ema2 := ema(close,slow_length) plot(ema1,color=#00ff00, linewidth=3) plot(ema2, color=#ffff00, linewidth=3) go_long = crossover(ema1,ema2) go_short = crossunder(ema1,ema2) if testPeriod() strategy.entry("long_ride", strategy.long, when=go_long) strategy.entry("short_ride", strategy.short,when=go_short) strategy.close("long_ride",when=go_short) strategy.close("short_ride",when=go_long)