단일 포인트 이동 평균의 브레이크업 전략

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

img

전반적인 설명

싱글 포인트 이동 평균 브레이크아웃 전략 (single point moving average breakout strategy) 은 데 모멘텀 오시레이터 (Chande Momentum Oscillator) 를 기반으로 한 양적 거래 전략이다. 시장이 가격의 모멘텀 변화를 계산함으로써 통합 단계에있을 때 감지합니다. 데 모멘텀 라인이 구매 라인 이상 또는 판매 라인 아래로 넘어갈 때 긴 또는 짧은 거래가 그에 따라 실행됩니다.

전략 논리

전략은 먼저 가격 동력 변화를 계산합니다momm, 그러면 양적 운동량으로 분리m1그리고 마이너스 모멘텀m2다음으로, 그것은 복귀 기간 동안 긍정적 인 및 부정적인 추진력을sm1그리고sm2마지막으로, 데 모멘텀 오시레이터chandeMO이 지표는 0선 주위에서 진동한다. 0위 값은 더 강한 상승 모멘텀을 나타내고, 0위 값은 더 강한 하락 모멘텀을 나타낸다.

데 모멘텀 라인이 하위 레벨에서 구매 라인의 위를 넘을 때, 가격은 하락 추세에서 벗어나 상승 추세를 시작할 준비가되어 있음을 신호합니다. 전략은 길게 갈 것입니다. 라인이 더 높은 레벨에서 판매 라인의 아래에 떨어지면 짧은 포지션이 시작됩니다.

이점 분석

  • 이 전략은 하락 추세에서 통합 추세로 상승 추세로 전환점을 식별 할 수 있으며, 낮은 가격으로 입출과 높은 가격으로 출출을 허용합니다.
  • 데 모멘텀 오시레이터는 가격 변화의 크기와 속도를 모두 고려하여 트렌드 검출에 매우 효과적입니다.
  • 전략 논리는 간단하고 쉽게 구현할 수 있습니다.

위험 분석

  • 데 모멘텀 오시레이터는 입력 매개 변수에 민감합니다. 다른 매개 변수 조정으로 인해 매우 다른 거래 신호와 결과가 발생할 수 있습니다.
  • 정적 구매 및 판매 라인 설정 또한 과도한 잘못된 신호를 도입 할 수 있습니다.
  • 스톱 로즈가 없다는 것은 트레이드를 잃는 것이 큰 손실을 줄 수 있다는 것을 의미합니다.

개선하는 몇 가지 방법은 동적인 구매/판매 라인을 사용, 다른 지표와 신호를 필터링, 위험을 제어하기 위해 손해를 중지 구현을 포함합니다.

최적화 방향

  • 최적 값을 찾기 위해 다른 매개 변수 설정을 테스트
  • 동적인 구매 및 판매 라인을 채택
  • 다른 지표와 함께 추가 필터를 추가
  • 손실을 줄이기 위해 스톱 로스 논리를 포함

결론

단일 포인트 이동 평균 브레이크아웃 전략은 데 모멘텀 오시레이터를 사용하여 하락 추세에서 통합으로 상승 추세로의 트렌드 전환점을 식별하여 낮은 구매 높은 판매 거래를 허용합니다. 간단하고 직관적임에도 불구하고 매개 변수 조정, 신호 필터링 및 위험 통제의 개선은 성능을 더욱 향상시킬 수 있습니다. 전반적으로 양적 거래자가 트렌드 반전을 결정하는 효과적인 도구로 사용됩니다.


/*backtest
start: 2024-01-02 00:00:00
end: 2024-02-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

//* Backtesting Period Selector | Component *//
//* https://www.tradingview.com/script/eCC1cvxQ-Backtesting-Period-Selector-Component *//
//* https://www.tradingview.com/u/pbergden/ *//
//* Modifications made *//
testStartYear = input(2021, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(10, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(999999, "Backtest Stop Year")
testStopMonth = input(9, "Backtest Stop Month")
testStopDay = input(26, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true
/////////////// END - Backtesting Period Selector | Component ///////////////
strategy(title="Chande Momentum Strat", shorttitle="ChandeMO Strat", format=format.price, precision=2)
length = input(9, minval=1)
src = input(close, "Price", type = input.source)
momm = change(src)
f1(m) => m >= 0.0 ? m : 0.0
f2(m) => m >= 0.0 ? 0.0 : -m
m1 = f1(momm)
m2 = f2(momm)
sm1 = sum(m1, length)
sm2 = sum(m2, length)
percent(nom, div) => 100 * nom / div
chandeMO = percent(sm1-sm2, sm1+sm2)
plot(chandeMO, "Chande MO", color=color.blue)
hline(0, color=#C0C0C0, linestyle=hline.style_dashed, title="Zero Line")
buyline= input(-80)
sellline= input(80)
hline(buyline, color=color.gray)
hline(sellline, color=color.gray)

if testPeriod()
    if crossover(chandeMO, buyline)
        strategy.entry("Long", strategy.long, alert_message="a=ABCD b=buy e=binanceus q=1.2 s=uniusd")
    //    strategy.exit(id="Long Stop Loss", stop=strategy.position_avg_price*0.8) //20% stop loss 
        
    if crossunder(chandeMO, sellline)
        strategy.entry("Short", strategy.short, alert_message="a=ABCD b=sell e=binanceus q=1.2 s=uniusd")
    //    strategy.exit(id="Short Stop Loss", stop=strategy.position_avg_price*1.2) //20% stop loss

//      remember to alert as    {{strategy.order.alert_message}}

더 많은