이 전략은 가격 동력 지표를 활용한 트렌드 다음 전략입니다. 특정 기간 동안의 종료 가격 변화를 계산하여 시장 트렌드를 판단하고 지속적인 상승 또는 하락 가격 추세가있을 때 해당 긴 또는 짧은 항목을 만듭니다.
이 전략의 핵심 지표는 가격 동력입니다. 동력은 이렇게 계산됩니다.
momentum = close - close[n]
여기서 n는 동력 기간의 길이를 나타냅니다. 동력 > 0이면, 현재 기간 동안 가격이 상승하고 있음을 의미합니다. 동력 < 0이면, 현재 기간 동안 가격이 하락하고 있음을 의미합니다.
전략은 먼저 confirmBars 매개 변수를 설정하여 거래를 실행하기 전에 트렌드 판단에 필요한 촛불의 수를 나타냅니다. 백테스트 범위 내에서 confirmBars 촛불에 대한 추진력 > 0이 지속되는 경우 긴 엔트리가 이루어집니다. confirmBars 촛불에 대한 추진력 < 0이 지속되는 경우 짧은 엔트리가 이루어집니다.
전략의 트렌드 판단의 핵심은 bcount 및 scount 변수를 통해 달성되는 0보다 크거나 작은 연속 촛불의 수를 계산하는 데 있습니다. 해당 조건이 충족되면 1으로 증가하고 조건이 충족되지 않을 경우 0으로 재설정됩니다. 카운트가 confirmBars에 도달하면 해당 긴 또는 짧은 거래가 실행됩니다.
이것은 다음과 같은 장점을 가진 전략에 따라 비교적 간단한 추세입니다.
이 전략은 또한 몇 가지 위험을 안고 있습니다.
이 전략은 몇 가지 측면에서 최적화 될 수 있습니다.
요약하자면, 이 모멘텀 브레이크아웃 전략은 도입적 양 거래 전략으로 적합한 간단한 그리고 실용적인 트렌드 다음 전략이다. 응용에서는 거래 빈도를 제어하고 과잉 거래를 방지하는 데 주의가 필요합니다. 한편, 매개 변수와 필터는 전략이 최대 성능을 달성하기 위해 실제 제품과 시장 환경에 따라 조정 및 최적화되어야합니다.
/*backtest start: 2024-01-09 00:00:00 end: 2024-01-16 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Momentum Strategy [TS Trader]", overlay=true) confirmBars = input(1) momentumLength = input(14, title="Momentum Length") price = close momentum = close - close[momentumLength] // === INPUT BACKTEST RANGE === fromYear = input.int(2019, title="Backtest Start Year") fromMonth = input.int(1, title="Backtest Start Month", minval=1, maxval=12) fromDay = input.int(1, title="Backtest Start Day", minval=1, maxval=31) toYear = input.int(2023, title="Backtest End Year") toMonth = input.int(12, title="Backtest End Month", minval=1, maxval=12) toDay = input.int(31, title="Backtest End Day", minval=1, maxval=31) startTimestamp = timestamp(fromYear, fromMonth, fromDay, 00, 00) endTimestamp = timestamp(toYear, toMonth, toDay, 23, 59) inBacktestRange = true // === STRATEGY LOGIC === bcond = momentum > 0 bcount = 0 bcount := bcond ? nz(bcount[1]) + 1 : 0 if (bcount == confirmBars and inBacktestRange) strategy.entry("Buy", strategy.long, comment="Long") scond = momentum < 0 scount = 0 scount := scond ? nz(scount[1]) + 1 : 0 if (scount == confirmBars and inBacktestRange) strategy.entry("Sell", strategy.short, comment="Short") // Plotting Momentum plot(momentum, title="Momentum", color=color.purple)