
이 전략은 양적 거래 영역의 이중 인자 역전 추적 전략에 속한다. 123 역전 전략과 켈트너 채널 전략의 두 인자를 통합하여 역전 신호를 발견하고 낮은 가격과 높은 가격의 거래 아이디어를 달성하는 것을 목표로 한다.
이 전략은 두 개의 하위 전략으로 구성된다. 첫 번째 하위 전략은 123 역전 전략이며, 이는 상주 2 일간의 종결 가격 변화를 계산하여 스토카스틱 지표와 결합하여 시장이 역전 지점에 있는지 판단한다. 구체적으로, 2 일 연속으로 종결 가격이 상승하면서 스토카스틱 지표가 50보다 낮으면 구매 신호를 발송하고, 2 일 연속으로 종결 가격이 떨어지고, 동시에 스토카스틱 지표가 50보다 높으면 판매 신호를 발송한다.
두 번째 하위 전략은 켈트너 채널 전략이다. 이 전략은 최근 n 거래 날의 전형적인 가격 평균선과 변동 범위를 계산하고, 가격이 상하 궤도에 가까워질 때 역전 거래 신호를 발산한다. 가격이 하하 궤도에 낮으면 상하, 상하 궤도에 높으면 상하한다.
마지막으로, 이 전략은 두 가지 하위 전략의 신호 방향을 판단한 후 최종 보유 신호를 계산한다. 두 가지 하위 전략의 신호가 일치하면 진정한 거래 지시를 발령하고, 그렇지 않으면 거래하지 않고, 2 인자 검증의 목적을 달성한다.
이 쌍인자 역추적 전략의 가장 큰 장점은 시장이 역전될 때 기회를 잡을 수 있고, 낮은 가격과 높은 가격의 거래 아이디어를 실현할 수 있다는 것입니다. 동시에, 쌍인자 확인 메커니즘을 통해 가짜 신호를 어느 정도 줄이고 신호의 품질을 향상시킬 수 있습니다.
구체적으로, 123 역전 전략의 Stochastic 지표 파라미터 설정은 더 보수적이며, 흔들림 상황에서 가짜 역전을 효과적으로 필터링할 수 있다. 켈트너 채널은 브린 띠의 생각을 추적하고, 경로를 돌파할 때 역전 기회를 잡을 수 있다. 둘을 함께 사용하면, 서로 검증할 수 있고, 불필요한 거래를 줄여서 더 높은 승률을 얻을 수 있다.
이 전략의 주요 위험은 반전 신호의 발생 시기를 선택하는 것이 매우 중요하다는 것입니다. 연속적인 가짜 반전이 발생하거나 반전 신호의 발생 시점을 선택하지 않으면 전체 추세를 유지할 수 없으며 최종 수익에 영향을 미칠 수 있습니다.
또한, 이중 요소 전략은 단일 전략에 비해 매개 변수 선택과 최적화 난이도가 더 크다. 두 개의 하위 전략의 매개 변수를 철저하게 테스트하고 평가해야 하며, 그렇지 않으면 실패할 가능성이 높다.
마지막으로, 반전 거래 자체의 수익률은 종종 상이한 편이며, 이상적인 상황이 발생하면 포지션을 파기하기 쉽다. 이것은 엄격한 손실을 막는 것으로 피해야합니다.
위와 같은 위험 분석을 통해, 이 전략은 다음과 같은 측면에서 최적화될 수 있습니다.
이 전략은 전형적인 2 인자 역전 추적 전략으로서, 123 역전과 켈트너 채널의 2 개의 하위 전략을 통합함으로써, 시장의 역전 시점에 낮은 가격과 높은 가격의 시기를 더 정확하게 파악하는 것을 목표로 한다. 매개 변수 최적화 및 위험 통제가 있는 경우, 이 전략은 비교적 상당한 초과 수익을 얻을 수 있다. 그러나 거래자는 여전히 역전 거래의 특수성에 주의를 기울여야 하며, 비정상적인 행동으로 인한 손실 확산을 막아야 한다.
/*backtest
start: 2023-11-18 00:00:00
end: 2023-12-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
////////////////////////////////////////////////////////////
// Copyright by HPotter v1.0 09/12/2020
// This is combo strategies for get a cumulative signal.
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50.
// The strategy sells at market, if close price is lower than the previous close price
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// The Keltner Channel, a classic indicator
// of technical analysis developed by Chester Keltner in 1960.
// The indicator is a bit like Bollinger Bands and Envelopes.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
vFast = sma(stoch(close, high, low, Length), KSmoothing)
vSlow = sma(vFast, DLength)
pos = 0.0
pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0)))
pos
KeltnerChn(nPeriod) =>
pos = 0.0
xPrice = sma(hlc3, nPeriod)
xMove = sma(high - low, nPeriod)
reverse = input(false, title="Trade reverse")
xUpper = xPrice + xMove
xLower = xPrice - xMove
pos := iff(close < xLower, -1,
iff(close > xUpper, 1, nz(pos[1], 0)))
pos
strategy(title="Combo Backtest 123 Reversal & Keltner Channel", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
nPeriod = input(title="Period", defval=10, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posKeltnerChn = KeltnerChn(nPeriod)
pos = iff(posReversal123 == 1 and posKeltnerChn == 1 , 1,
iff(posReversal123 == -1 and posKeltnerChn == -1, -1, 0))
possig = iff(reverse and pos == 1, -1,
iff(reverse and pos == -1 , 1, pos))
if (possig == 1)
strategy.entry("Long", strategy.long)
if (possig == -1)
strategy.entry("Short", strategy.short)
if (possig == 0)
strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )