この戦略は,ダイナポリー (DiNapoli) のトレンドオシャラーによる取引信号判断を行う.この指標は,価格と移動平均の差値によって,価格の超買い超売り領域を反映して,反転の機会を識別する.この戦略は,特定の門檻を突破することで取引信号を与える.
この戦略は主に以下の要素から構成されています.
移動平均:一定の周期の平均線を計算し,価格の傾向を判断する.
差値指数: 価格を平均線の差値から引いて,振動指数を形成する.
門限線:差値指標が門限値を超えると取引シグナルを生成する.
差値の限界線を越える際にもっとする.
空き信号:差値の下の門限線を通過する際空きする.
逆行オプション:多/空の信号を逆行して取引信号として使うことができる.
この戦略は,価格とトレンドの間の逸脱を判断し,短期的な反転の機会を捉えるためのものです. 論理はシンプルで直感的です.
この戦略は,他の反転戦略と比べて,以下の利点があります.
原則はシンプルで,直観的に理解しやすい. 実行の難しさは少ない.
微量パラメータ,回測最適化便利.
異なる周期に適用するためにパラメータを自分で調整できます.
逆のオプションが提供され,異なる市場に対して柔軟に利用できます.
危険を制御する明確な止損策
撤回は比較的小さいので,パラメータを調整することで曲線の振動を減らすことができます.
機械学習を導入してパラメータを最適化する.
概して,リスクと利益のバランスが良く,ショートライン取引に適しています.
しかし,この戦略には以下の主要なリスクがあります.
パラメータ最適化に過度に依存し,過度に適合するリスクがある.
移動平均と指標は遅滞している.
価格以外の補助変数の検証がない.
市場環境の変化により,タイミングの効果が弱まる可能性があります.
アルファは長期にわたって維持できないので,頻繁に調整する必要があります.
利回り率に注目し,曲線が太くならないようにしましょう.
取引の頻度が高く,取引コストに影響する.
パラメータの多市場での安定性を検証する.
分析の結果,この戦略の最適化方向は以下の通りです.
異なる均線パラメータの効果をテストする.
取引量指数への加入を検証する.
リスク管理のための止損止めを設定する.
多種多周期性強さを評価する
ローラー回転で再確認する.
ポジション管理を調整し,取引頻度を下げる.
機械学習の導入により優れたパラメータが生成されます.
資金管理戦略を最適化する
市場変化に適応する戦略を継続的に展開する.
この戦略は,全体として,より単純な逆転戦略の考え方であり,パラメータ調整によって良い効果を得ることができる.しかし,いかなる戦略も,長期にわたって安定した収益を上げるために,過適合を防止する必要があります.これは,継続的に反測と最適化,より多くの次元から戦略の改善を必要とします.
/*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 )