モメンタムオシレーターに基づく戦略の最適化


作成日: 2024-02-20 13:54:49 最終変更日: 2024-02-20 13:54:49
コピー: 0 クリック数: 612
1
フォロー
1617
フォロワー

モメンタムオシレーターに基づく戦略の最適化

概要

この戦略は,動量指標の変化率 ((ROC) による最適化改善策である. 原始ROC戦略と比較して,この戦略は以下の最適化が行われた.

  1. 最大の歴史ROC値を引入し,現在のROCの動態は最大歴史ROCと比較し,動力の相対値を得る.
  2. 動力の相対値を平滑処理し,信号を生成する.
  3. 購入・売却の信号の値下げに加入する

これらの最適化手段によって,多くの無効信号をフィルタリングして,戦略をより安定して信頼性のあるものにすることができます.

戦略原則

この戦略の核心指標は,変動率 (ROC) である.ROCは,特定の周期における株価の変動率を測定する.この戦略は,まず,9周期のROC値を計算する.その後,このROC指標の過去200周期における最大値を記録し,現在のROCが最大の歴史的ROCのパーセントを計算して,動力の相対強さを得する.例えば,過去200日のROCが100を超えた場合,その日のROCが80であった場合,相対強度は80%である.

この相対強度は,長さ10のSMAを通過して平滑処理を行い,短期の波動をフィルターし,平滑曲線を得ます.平滑曲線が3日連続で上昇し,値が-80%以下になると,株価の低下が減速し始め,底盤の兆候を生じると考えられ,それにより多額の取引が行われます.平滑曲線が3日連続で低下し,値が80%以上になると,株価の上昇が減速し始め,頂点の兆候を生じると考えられ,それにより平仓されます.

優位分析

この戦略は,オリジナルのROC戦略と比較して,主に以下の利点があります.

  1. 歴史ROC最大値の比較を導入することで,動量指標の相対高さをよく測定し,絶対値が高くない無効信号をフィルターすることができます.
  2. 音のフィルタリングをスムーズに処理し,信号をより安定して信頼できるようにする.
  3. 取引を制限する為の取引の限界を設定します.

全体として,この戦略はROC指数に有効な二次処理を行っており,実際の取引に適しています.

リスク分析

この戦略には以下のリスクがあります.

  1. ROC指標は市場トレンドを特定できないため,ある程度の誤解がある.牛と熊の転換期に遭遇した場合,この戦略は失敗する可能性がある.
  2. 取引の限界は完璧ではないし,限界があまりにも高くても,あまりにも低くても,戦略のパフォーマンスに影響する.
  3. SMAパラメータの設定が不適切であることも,戦略の効果に影響を与えます.

上記のリスクを軽減するために,トレンド指標を組み合わせて大トレンドを判断し,値パラメータを調整し,最適なパラメータをテストし,SMA周期パラメータを最適化することを考慮することができます.

最適化の方向

この戦略は以下の方向から最適化できます.

  1. トレンド指数と組み合わせて,市場全体の動きを判断し,牛と熊の転換時に失効を避ける.
  2. 異なるROC長度パラメータと値下げパラメータをテストし,最適なパラメータの組み合わせを探します.
  3. SMA平滑パラメータを最適化して,最適なパラメータを見つけます.
  4. 損失防止の仕組みを増やすこと

要約する

この戦略は,ROC指標に基づいて二次開発を行う最適化戦略である.これは,歴史最大値の比較,SMA平滑,買入値などの手段を導入し,無効信号をフィルターして,戦略をより安定化することができる.主な優点は,信号の質が高く,実体には適している.その後,トレンド,パラメータ最適化などの組み合わせで改善することができ,その結果,戦略のパフォーマンスをさらに向上させる.

ストラテジーソースコード
/*backtest
start: 2024-02-12 00:00:00
end: 2024-02-19 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="Rate Of Change Mod Strategy", shorttitle="ROC", format=format.price, precision=2)
//length = input.int(9, minval=1)
//source = input(close, "Source")
//roc = 100 * (source - source[length])/source[length]
//plot(roc, color=#2962FF, title="ROC")
//hline(0, color=#787B86, title="Zero Line")

length = input.int(9, minval=1, title="Length")
maxHistory = input(200, title="Max Historical Period for ROC")
lenghtSmooth = input.int(10, minval=1, title="Length Smoothed ROC")
lenghtBUY = input.int(-80, title="Buy Threshold")
lenghtSELL = input.int(80, title="Buy Threshold")

source = close
roc = 100 * (source - source[length]) / source[length]

// Calculate the maximum ROC value in the historical period
maxRoc = ta.highest(roc, maxHistory)

// Calculate current ROC as a percentage of the maximum historical ROC
rocPercentage = (roc / maxRoc) * 100


rocPercentageS = ta.sma(rocPercentage, lenghtSmooth)
if ta.rising(rocPercentageS, 3) and rocPercentageS < lenghtBUY
    strategy.entry("Buy", strategy.long)

if ta.falling(rocPercentageS, 3) and rocPercentageS > lenghtSELL
    strategy.close("Buy")


plot(rocPercentage, color=color.new(color.blue, 0), title="Percentage ROC")
plot(rocPercentageS, color=color.new(#21f32c, 0), title="Percentage ROC")
hline(0, color=color.new(color.gray, 0), title="Zero Line")