この記事ではストーカスティクスモメント指数 (SMI) をベースとした定量的な取引戦略を紹介する.この戦略は,SMI指標とその指数移動平均 (EMA) の間のクロスオーバー信号を利用して,潜在的な買取・販売機会を特定する.SMI信号線がEMAの上を横切ると,購入信号が発信され,SMI信号線がEMA以下を横切ると,販売信号が発信される.
この戦略の核心はストーカスティクスモメントインデックス (SMI) である.SMIは,特定の期間における高低範囲との関係で閉じる価格を測定するモメントオシレーターである.具体的には,戦略は最初に指定された期間における最高高と最低低を計算し,その後閉じる価格と高低範囲の真ん中点との違い,および最高高と最低低との違いを計算する.次に,戦略はSMI値を計算し,これは平均相対差の平均絶対差の100倍の比である.最後に,戦略はSMIの指数移動平均をシグナルラインとして計算する.
SMI信号線がEMAを超えると,上昇勢力の増加を示し,購入信号を誘発する.SMI信号線がEMAを下回ると,減少勢力の増加を示し,販売信号を誘発する.さらに,戦略はSMIの極端な状態を特定するために過買いと過売りレベルをマークする.
この戦略は,市場の動向や動向の変化を効果的に把握できる強力なインパルス指標SMIに基づいています.
戦略の論理は明確で 分かりやすく 実行できます
指数的な移動平均を信号線として利用することで 戦略は価格騒音を平滑させ 信号の信頼性を向上させることができます
過剰購入と過剰販売のレベルを表示することで,戦略に追加的なリスク管理ツールが提供されます.
この戦略は単一の指標であるSMIに依存し,指標の失敗のリスクに直面する可能性があります.このリスクを軽減するために,他の技術指標または基本的な要因を組み合わせて取引信号を確認することを検討することができます.
この戦略は,不安定な市場で頻繁な取引信号を生成し,高い取引コストにつながる可能性があります.この問題を解決するために,パラメータを最適化したりフィルタリングメカニズムを導入することによって取引頻度を減らすことができます.
この戦略には明示的なストップ・ロスのメカニズムがないため,単一取引リスクが過剰である問題に直面することがあります.これはリスク管理のために適切なストップ・ロスのレベルを設定することで対処できます.
パラメータ最適化:戦略のパフォーマンスは,SMI計算で使用されたパラメータ,例えば長さ%K,長さ%Dなどに大きく依存します.これらのパラメータを最適化することで,戦略のパフォーマンスを向上させることができます.
シグナルフィルタリング:取引頻度を削減し,シグナル品質を改善するために,トレンド確認やボリューム確認などの追加のフィルタリングメカニズムを検討することができます.
リスク管理: 戦略に明示的なストップ・ロースとポジション管理規則を組み込むことは,リスクをよりうまく制御し,戦略の信頼性を高めることができます.
多要素組み合わせ:SMI信号を他の技術指標または基本要素と組み合わせて,より包括的で信頼性の高い取引決定メカニズムを形成する.
本記事では,ストカスティクスモメント指数 (SMI) をベースとした定量的な取引戦略を紹介する.この戦略は,SMI指標とその指数移動平均の間のクロスオーバー信号を利用し,潜在的な買い売り機会を特定する.この戦略の利点は,強力なモメント指標,明確な論理,実装の容易さ,シグナル信頼性とリスク管理を改善するための移動平均値とオーバーバイト/オーバーセールレベルの使用にある.しかし,この戦略は,単一の指標の失敗,高周波取引,不十分なリスク管理などのリスクにも直面している.戦略のパフォーマンスをさらに向上させるために,パラメータ最適化,シグナルフィルタリング,リスク管理,およびマルチファクター組み合わせの観点から最適化が可能である.全体として,この戦略は,定量的な取引のためのシンプルで効果的なアプローチを提供しているが,具体的な実用的な状況に基づいて適切な調整と最適化が必要である.
/*backtest start: 2023-03-05 00:00:00 end: 2024-03-10 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Stochastics Momentum Index Strategy", shorttitle="SMI_BackTest", overlay=false) // Input parameters a = input.int(10, "Percent K Length") b = input.int(3, "Percent D Length") ob = input.int(40, "Overbought") os = input.int(-40, "Oversold") // Range Calculation ll = ta.lowest(low, a) hh = ta.highest(high, a) diff = hh - ll rdiff = close - (hh+ll)/2 avgrel = ta.ema(ta.ema(rdiff,b),b) avgdiff = ta.ema(ta.ema(diff,b),b) // SMI calculations SMI = avgdiff != 0 ? (avgrel/(avgdiff/2)*100) : 0 SMIsignal = ta.ema(SMI,b) emasignal = ta.ema(SMI, 10) // Color Definition for Stochastic Line col = SMI >= ob ? color.green : SMI <= os ? color.red : color.white plot(SMIsignal, title="Stochastic", color=color.white) plot(emasignal, title="EMA", color=color.yellow) level_40 = ob level_40smi = SMIsignal > level_40 ? SMIsignal : level_40 level_m40 = os level_m40smi = SMIsignal < level_m40 ? SMIsignal : level_m40 plot(level_40, "Level ob", color=color.red) plot(level_40smi, "Level ob SMI", color=color.red, style=plot.style_line) plot(level_m40, "Level os", color=color.green) plot(level_m40smi, "Level os SMI", color=color.green, style=plot.style_line) //fill(level_40, level_40smi, color=color.red, transp=ob, title="OverSold") //fill(level_m40, level_m40smi, color=color.green, transp=ob, title="OverBought") // Strategy Tester longCondition = ta.crossover(SMIsignal, emasignal) if (longCondition) strategy.entry("Buy", strategy.long) shortCondition = ta.crossunder(SMIsignal, emasignal) if (shortCondition) strategy.entry("Sell", strategy.short)