
この記事では,ランダムな力・モントム指数 (Stochastics Momentum Index, 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)