ディナポリ・デトレンデッド・オシレーター戦略

作者: リン・ハーンチャオチャン, 日時: 2023-09-23 15:48:40
タグ:

概要

この戦略は,ディナポリデトロンドオシレーターに基づく取引信号を生成する.価格と移動平均の差によって過買い/過売値を反映し,逆転機会を特定することを目的とする.オシレーターが限界を突破すると信号が生成される.

戦略の論理

主要な要素は次のとおりです.

  1. 移動平均: 傾向のベースラインを計算する.

  2. 差指数: 価格マイナス移動平均が振動器を形成する.

  3. 境界線: この境界線を越えると信号が発信されます

  4. 長信号:オシレーターが値を越える.

  5. 短信号:オシレーター値を下回る.

  6. リバース オプション: 長/短信号を回します.

この戦略は,価格とトレンドとの間の差異を特定することによって短期的な逆転を捉えることを目的としています.論理は単純で直感的です.

利点

他の逆転戦略と比較すると,以下のような利点があります.

  1. シンプルで直感的な論理で 簡単に実行できます

  2. 最小のパラメータ,便利なバックテスト.

  3. パラメータ調整の柔軟性

  4. 異なる市場に対応できる逆オプションです

  5. 停止と出口をクリアする リスク管理

  6. 相対的に小さな減量で パラメータによって調整できます

  7. 機械学習で最適化する可能性があります

  8. 短期取引のリスク/リターンプロフィールが全体的に良好です

リスク

しかし,主なリスクは次のとおりです.

  1. パラメータ最適化に過度に依存すると 過剰なフィットメントが起こる可能性があります

  2. 移動平均値と振動器の遅延です

  3. 他の変数から確認がない

  4. タイミング効果は変化する市場によって低下する可能性があります.

  5. アルファを生成するのは困難で 頻繁に調整が必要です

  6. 報酬/リスクの比率と曲線のスムーズさを監視する必要があります

  7. 高い取引頻度は 取引コストを増加させます

  8. 市場間での安定性には 検証が必要です

改良

分析に基づいて,改善には以下の要素が含まれる.

  1. 異なる移動平均パラメータをテストする

  2. 音量確認を追加します.

  3. リスク管理のために停止と終了を導入する.

  4. 異なる市場と時間枠における安定性を評価する

  5. ローリング・ウィンドウのバックテストを継続的に確認する

  6. 位置のサイズを低周波に調整する

  7. 機械学習を組み込み より良いパラメータを

  8. リスク管理戦略を最適化する

  9. 変化する市場に適応するために 継続的な繰り返しをします

結論

概要すると,これは比較的単純な平均逆転戦略のアイデアです.適切なパラメータ調整は立派な結果を生むことができます.しかし,オーバーフィット防止と持続的な成功を達成するには,複数の次元からの継続的なバックテスト,最適化,強化が必要です.


/*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 )

もっと