동적 트렌드 추적 역전 전략 (Dynamic Trend Tracking Reversal Strategy) 은 JD 순차 지표에 기반한 단기 정량적 거래 전략이다. 이 전략은 실시간으로 가격 최고와 최하위를 추적함으로써 현재 트렌드 방향과 동력을 결정하여 출입 및 출출 시기를 위해 시장 역전 지점을 효율적으로 파악합니다. 전통적인 JD 순차 전략과 비교하면이 전략은 다음과 같은 개선 사항을 제공합니다.
이 전략은 5분 및 15분 차트와 같은 단기 시간 프레임에 적합하며, 이는 단기 가격 변동과 반전 기회를 효과적으로 포착할 수 있습니다.
동적 트렌드 추적 역전 전략의 핵심 논리는 JD 순차 지표에 기반합니다. 현재 기간의 높은 가격과 낮은 가격을 이전 두 기간의 가격과 비교함으로써, 이 지표는 연속적인 높은 가격이나 낮은 가격의 하락이 발생했는지 여부를 결정하고 1에서 7까지 순차적인 수치를 생성합니다. 수치가 7까지 축적되면 거래 신호가 생성됩니다.
구체적으로, 전략은 다음과 같은 변수를 정의합니다:
트레이드 신호 생성 논리는 다음과 같습니다.
스톱 손실 논리는 다음과 같습니다.
트렌드 방향과 강도를 결정하기 위해 실시간으로 최고/하위치를 비교하여, 진입에 대한 카운트 기반 타이밍과 함께, 이 전략은 단기 반전 기회를 효과적으로 포착할 수 있습니다. 스톱 로스 라인은 또한 위험을 제어하도록 구성됩니다.
전통적인 JD 연속 전략과 비교하면 동적 트렌드 추적 역전 전략은 다음과 같은 장점을 가지고 있습니다.
이 전략의 주요 장점은 단기 이벤트로 인한 큰 변동을 효과적으로 파악할 수 있는 빠른 반응이다. 또한 알고리즘 신호 생성 및 스톱 로스 기계화는 거래자의 정서적 간섭을 줄여 일관성을 향상시킬 수 있다.
동적 트렌드 추적 역전 전략은 또한 몇 가지 위험을 안고 있습니다.
위의 위험을 완화하기 위해 전략은 다음 측면으로 최적화 될 수 있습니다.
동적 트렌드 추적 역전 전략은 다음과 같은 방향으로 더 이상 최적화 할 수있는 충분한 공간이 있습니다.
다중 시간 프레임 조합: 더 높은 시간 프레임에서 주요 트렌드 방향을 결정하여 거래를 피하십시오.
다른 지표와 결합. 신호 품질을 향상시키기 위해 변동성 메트릭, 볼륨 데이터 등을 포함합니다.
추가 검증을 위한 기계 학습. 오류 트레이드를 줄이기 위해 AI/ML 알고리즘을 거래 신호에 대한 보조 판단으로 활용합니다.
매개 변수 조정. 다른 시장 조건에 맞게 카운트 기간, 거래 세션, 포지션 사이징 등과 같은 매개 변수를 최적화합니다.
위험 통제 메커니즘을 확장하고, 더 복잡한 위험 관리 기술을 도입하여, 적응적 중지, 포지션 사이즈 등으로 위험을 더욱 제한합니다.
백테스팅을 통한 전략 평가. 매개 변수 안정성을 측정하기 위해 백테스트의 표본 크기와 시간 프레임을 확장하십시오.
동적 트렌드 추적 역전 전략은 트렌드 방향과 강도를 결정하기 위해 가격 최고와 최저의 실시간 비교를 통해 단기 역전 기회를 포착하며, 거래 타이밍을위한 JD 순차 지표 내의 7 카운트 규칙과 함께합니다. 전통적인 JD 전략과 비교하면이 전략은 폐쇄 가격 대신 최고 / 최저, 단축 카운트 기간, 추가 스톱 로스 메커니즘 등을 사용하여 더 빠른 신호 생성을 가능하게합니다.
이 전략의 핵심 강점은 단기 반전 거래에 적합한 빠른 반응에 있다. 동시에 높은 거래 빈도 및 공격적인 스톱과 같은 위험이 존재한다. 미래 최적화 방향에는 매개 변수 조정, 위험 통제 강화, 멀티 타임프레임 조합 등이 포함된다. 지속적인 최적화와 반복을 통해이 전략은 단기 반전 신호를 효율적으로 캡처하는 강력한 도구가 될 가능성이 있다.
/*backtest start: 2023-12-16 00:00:00 end: 2024-01-15 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @NeoButane 7 Dec. 2018 // JD Aggressive Sequential Setup // Not based off official Tom DeMarke documentation. As such, I have named the indicator JD instead oF TD to reflect this, and as a joke. // // Difference vs. TD Sequential: faster trade exits and a unique entry. Made for low timeframes. // - Highs or lows are compared instead of close. // - Mirrors only the Setup aspect of TD Sequential (1-9, not to 13) // - Count maxes out at 7 instead of 9. Also part of the joke if I'm going to be honest here // v1 - Release - Made as a strategy, 7 count // . S/R on 7 count // .. Entry on 7 count // ... Exit on 5 count or S/R cross //@version=3 title = "JD Aggressive Sequential Setup" vers = " 1.0 [NeoButane]" total = title + vers strategy(total, total, 1, 0) xx = input(true, "Include S/R Crosses Into Stop Loss") show_sp = input(true, "Show Count 1-4") sp_ct = 0 inc_sp(x) => nz(x) == 7 ? 1 : nz(x) + 1 sp_up = high > high[2] sp_dn = low < low[2] sp_col = sp_up ? green : red sp_comCol = sp_up ? red : green sp_ct := sp_up ? (nz(sp_up[1]) and sp_col == sp_col[1] ? inc_sp(sp_ct[1]) : 1) : sp_dn ? (nz(sp_dn[1]) and sp_col == sp_col[1] ? inc_sp(sp_ct[1]) : 1) : na sp_com = sp_ct == 7 sp_sr = valuewhen(sp_ct == 5, close, 0) sp_usr = valuewhen(sp_ct == 7 and sp_up, sma(hlc3, 2), 0) sp_usr := sp_usr <= sp_usr[1] * 1.0042 and sp_usr >= sp_usr[1] * 0.9958 ? sp_usr[1] : sp_usr sp_dsr = valuewhen(sp_ct == 7 and sp_dn, sma(hlc3, 2), 0) sp_dsr := sp_dsr <= sp_dsr[1] * 1.0042 and sp_dsr >= sp_dsr[1] * 0.9958 ? sp_dsr[1] : sp_dsr locc = location.abovebar plotchar(show_sp and sp_ct == 1, 'Setup: 1', '1', locc, sp_col, editable=false) plotchar(show_sp and sp_ct == 2, 'Setup: 2', '2', locc, sp_col, editable=false) plotchar(show_sp and sp_ct == 3, 'Setup: 3', '3', locc, sp_col, editable=false) plotchar(show_sp and sp_ct == 4, 'Setup: 4', '4', locc, sp_col, editable=false) plotshape(sp_ct == 5, 'Setup: 5', shape.xcross, locc, sp_comCol, 0, 0, '5', sp_col) plotshape(sp_ct == 6, 'Setup: 6', shape.circle, locc, sp_comCol, 0, 0, '6', sp_col) plotshape(sp_ct == 7, 'Setup: 7', shape.circle, locc, sp_comCol, 0, 0, '7', sp_col) // plot(sp_sr, "5 Count Support/Resistance", gray, 2, 6) plot(sp_usr, "7 Count Resistance", maroon, 2, 6) plot(sp_dsr, "7 Count Support", green, 2, 6) long = (sp_com and sp_dn) short = (sp_com and sp_up) sl_l = xx ? crossunder(close, sp_dsr) or (sp_ct == 5 and sp_up) or short : (sp_ct == 5 and sp_up) or short sl_s = xx ? crossover(close, sp_usr) or (sp_ct == 5 and sp_dn) or long : (sp_ct == 5 and sp_dn) or long strategy.entry('L', 1, when = long) strategy.close('L', when = sl_l) strategy.entry('S', 0, when = short) strategy.close('S', when = sl_s)