이 전략은 디나폴리 유도 오시레이터 (DiNapoli Detrended Oscillator) 를 기반으로 거래 신호를 생성합니다. 가격과 이동 평균의 차이로 과소매/ 과소매 수준을 반영하여 역전 기회를 식별하는 것을 목표로합니다. 오시레이터가 한 임계점을 넘으면 신호가 생성됩니다.
주요 구성 요소는 다음과 같습니다.
이동 평균: 트렌드 기준을 계산합니다.
차이 지표: 가격 빼기 이동 평균은 오시레이터를 형성합니다.
임계선: 이 레벨을 넘으면 신호가 발사됩니다.
긴 신호: 오시레이터가 임계값을 넘는다.
단기 신호: 오시일레이터가 임계치 아래로 넘는다.
역전 옵션: 긴 / 짧은 신호를 돌립니다.
이 전략은 가격과 트렌드 사이의 오차를 식별함으로써 단기적 역전을 포착하는 것을 목표로합니다. 논리는 간단하고 직관적입니다.
다른 반전 전략과 비교하면 다음과 같은 장점이 있습니다.
단순하고 직관적인 논리, 구현하기 쉬운.
최소한의 매개 변수, 편리한 백테스팅
다양한 기간에 대한 매개 변수 조정의 유연성
다른 시장에 적응할 수 있는 역 옵션
정차와 출구를 제거해 위험 조절을 해
상대적으로 작은 수요, 매개 변수를 통해 조정할 수 있습니다.
기계 학습으로 최적화할 수 있는 잠재력
전반적으로 단기 거래의 위험/이익 프로파일은 좋습니다.
그러나 주요 위험 요소는 다음과 같습니다.
매개 변수 최적화에 지나치게 의존하는 것은 과도한 적합성을 초래할 수 있습니다.
이동평균과 오시레이터에서 뒤쳐져 있습니다.
다른 변수로부터 확인이 부족합니다.
타이밍 효과는 변화하는 시장에 따라 악화 될 수 있습니다.
알파를 지속적으로 생성하기 어렵고 자주 조정해야 합니다.
보상/위험 비율과 곡선의 부드러움을 모니터링해야 합니다.
높은 거래 빈도는 거래 비용을 증가시킵니다.
시장의 안정성은 검증을 필요로 합니다.
분석에 따라 개선은 다음을 포함 할 수 있습니다.
다른 이동 평균 매개 변수를 테스트합니다.
부피 확인을 추가합니다.
위험을 통제하기 위해 정지 및 출구를 구현합니다.
다양한 시장과 시간 프레임에 걸쳐 안정성을 평가합니다.
연속 검증을 위해 롤링 윈도우 백테스팅
위치 크기를 낮은 주파수로 조정합니다.
더 나은 매개 변수를 위해 기계 학습을 통합합니다.
전체적인 위험 관리 전략을 최적화합니다.
변화하는 시장에 적응하기 위해 지속적인 반복.
요약하자면, 이것은 비교적 간단한 평균 역전 전략 아이디어입니다. 적절한 매개 변수 조정으로 괜찮은 결과를 얻을 수 있습니다. 그러나 과잉 조정을 방지하고 지속적인 성공을 달성하려면 여러 차원에서 지속적인 백테스팅, 최적화 및 개선이 필요합니다.
/*backtest start: 2023-08-23 00:00:00 end: 2023-09-22 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version = 2 //////////////////////////////////////////////////////////// // Copyright by HPotter v1.0 05/12/2016 // DiNapoli Detrended Oscillator Strategy // You can change long to short in the Input Settings // Please, use it only for learning or paper trading. Do not for real trading. //////////////////////////////////////////////////////////// strategy(title="DiNapoli Detrended Oscillator Strategy Backtest") Length = input(14, minval=1) Trigger = input(0) reverse = input(true, title="Trade reverse") hline(Trigger, color=gray, linestyle=line) xSMA = sma(close, Length) nRes = close - xSMA pos = iff(nRes > Trigger, 1, iff(nRes <= Trigger, -1, nz(pos[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) plot(nRes, color=blue, title="DiNapoli") barcolor(possig == -1 ? red: possig == 1 ? green : blue )