
쌍기계 동적 트렌드 추적 전략은 두 가지 다른 거래 전략 신호를 조합한 트렌드 추적 전략이다. 이 전략은 먼저 123 역전 전략을 사용하여 가격 역점을 판단하고, 그 다음에는 추세 해제 합성 가격 ((D_DSP) 지수와 결합하여 가격 추세 방향을 판단하고, 마지막으로 두 가지 신호를 합성하여 거래 지침을 생성한다.
이 전략은 주로 중기 및 단기 트렌드를 추적하는 데 사용되며, 이중 메커니즘을 통해 동적 스톱로스를 설정하여 수익을 효과적으로 잠금하고 손실을 확대하지 않습니다. 또한, 트렌드 지표와 반전 지표의 이중 확인과 결합하여 노이즈 거래를 줄일 수 있습니다.
123 역전 전략은 울프 젠센의 ?? 나는 어떻게 선물 시장에서 3배의 자금을 벌었는가 ?? 의 183페이지에서 유래했다. 이 전략은 가격이 연속적으로 두 개의 BAR 역전 형태가 나타나면 가격 역전 신호를 구성하는지 판단한다.
구체적 논리는, 종결 가격이 전날의 종결 가격보다 낮고, 느린 K선이 50보다 낮으면 구매 신호를 발생시키고, 종결 가격이 전날의 종결 가격보다 높고, 빠른 K선이 50보다 높으면 판매 신호를 발생시키는 것이다.
동향성 합성 가격 지수 ((D_DSP) 는 가격 동향 방향을 판단하는 데 사용되는 지표로, 실제 가격 주기 변화와 일치한다. D_DSP의 계산 방법은 가격의 1⁄4 주기 지수 이동 평균을 빼고 1⁄2 주기 지수 이동 평균이다.
만약 D_DSP가 긍정적이면 가격이 상승 추세에 있다는 것을 뜻한다. 만약 D_DSP가 부정적이면 가격이 하락 추세에 있다는 것을 뜻한다.
이 전략은 123 역전 전략과 D_DSP 지수 두 가지 판단 메커니즘을 조합하여, 두 가지 신호가 동방향 (如双多或双空) 인 경우, 트레이드 명령을 생성합니다. 신호가 일치하지 않으면, 포장을 청산합니다.
이중 확인 메커니즘은 노이즈 트레이딩을 효과적으로 필터링하여 트렌드 수익을 고정시킬 수 있습니다.
이중 메커니즘 동적 트렌드 추적 전략의 가장 큰 장점은 두 차원의 스톱 포인트를 설정하는 데 있습니다. 첫째, 시간 차원에서, 급격한 무작위 지표의 차이는 시간적 오차의 스톱을 형성합니다. 두 번째, 가격 차원에서, 역전 전략 자체는 특정 스톱 기능을 포함합니다.
이 두 개의 스톱은 수익을 최대한 고정시키고 단일 스톱 전략의 사각지대를 막습니다. 또한, 이중 확인 메커니즘은 비주류 방향성 가격 변화로 인한 오류 신호를 효과적으로 필터링 할 수 있습니다.
이 전략의 가장 큰 위험은 매개 변수가 너무 고정되어 있다는 것입니다. 예를 들어, 주기 길이가 잘못 설정되면 주류 트렌드를 놓칠 수 있으며, 이로 인해 수익 기회를 놓치고 손실을 증가시킬 수 있습니다. 이중 확인은 너무 고정되어도 적시에 중지 손실을 놓칠 수 있습니다.
또한, 역전 전략과 트렌드 전략의 조합에서, 둘의 판단이 일치하지 않는 경우의 청산 작업은 후속 트렌드가 하나의 주류 방향으로 계속 운행되는 기회를 놓칠 수도 있다.
이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.
주기 변수 최적화. 더 많은 재측정 데이터를 통해 변수의 최적값을 계산하고, 더 적합한 주기 변수를 설정한다.
스톱 전략을 추가하십시오. 예를 들어, 스톱을 뚫고, 스톱을 추적하십시오. 더 역동적이고 합리적인 스톱 포인트를 설정하십시오.
판단 규칙을 최적화한다. 이중 확인 판단의 민감성을 조정하고, 너무 급진적인 청산의 기회를 놓치지 않도록 한다.
필터를 추가한다. 가격 변동 필터를 설정하고, 트렌드 말기 평균선 변동 변동 오류 신호를 피한다.
이중 메커니즘 동적 트렌드 추적 전략은 신속하고 무작위적인 지표 쌍방식 중지 및 역전과 트렌드 판단 쌍방식 확인을 통해 효과적인 트렌드 추적 및 위험 통제를 구현한다. 이 전략은 가격 행태의 시간 요소를 고려하고 가격 자체의 방향성을 고려하여 삼차원적 의사 결정 기반을 형성한다.
판단 규칙과 파라미터 설정을 계속적으로 최적화함으로써 이 전략은 더 좋은 효과를 얻을 수 있을 것으로 예상된다. 그러나 거래 전략 최적화는 많은 역사 데이터 테스트의 지원을 필요로 하며, 주식 선택 전략과 손해 중지 전략도 지속적으로 개선해야 한다. 실물 추적 관찰을 한동안 권장하고, 전략 효과를 더 검증한다.
/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
////////////////////////////////////////////////////////////
// Copyright by HPotter v1.0 18/11/2019
// 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
// Detrended Synthetic Price is a function that is in phase with the
// dominant cycle of real price data. This DSP is computed by subtracting
// a half-cycle exponential moving average (EMA) from the quarter cycle
// exponential moving average.
// See "MESA and Trading Market Cycles" by John Ehlers pages 64 - 70.
//
// 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
D_DSP(Length) =>
pos = 0.0
xHL2 = hl2
xEMA1 = ema(xHL2, Length)
xEMA2 = ema(xHL2, 2 * Length)
xEMA1_EMA2 = xEMA1 - xEMA2
pos := iff(xEMA1_EMA2 > 0, 1,
iff(xEMA1_EMA2 < 0, -1, nz(pos[1], 0)))
pos
strategy(title="Combo Backtest 123 Reversal & D_DSP (Detrended Synthetic Price)", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LengthDSP = input(14, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posD_DSP = D_DSP(LengthDSP)
pos = iff(posReversal123 == 1 and posD_DSP == 1 , 1,
iff(posReversal123 == -1 and posD_DSP == -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 )