
この記事では,ストキャスティクス・モメンタム・インデックス (SMI) の指標に基づく株価トレンドを追跡する戦略について説明する.この戦略は,モメンタム・サーファー戦略と呼ばれる.これは,SMI指標を使用して,株価の超買い超売り領域を特定し,トレンドの逆転点で買い売りを行い,利益を得る.
SMI指数は,株式の超買い超売り領域を識別するために使用される. SMI指数が赤色領域に入ると,株式が超売られ,緑色領域は株式が超買いであることを示す. この戦略の取引信号は,SMI指数とそのEMAの交差から得られる.
具体的には,SMI指数でそのEMAラインを穿越し,その時点でSMI値が -40以下の超売り区域にあるとき,買入シグナルを生成する. SMI指数でそのEMAラインを穿越し,その時点でSMI値が40以上の超買い区域にあるとき,その時に売りシグナルを生成する.
この戦略は,株価が逆転する時に,適切なタイミングでシグナルを捕捉し,安く買って高く売る目的を達成する.
この戦略の最大の利点は,株のトレンドを順次追跡できる点にある. SMI指標を利用して入場と出場のタイミングを特定するので,株価が逆転する時にシグナルを捕捉することができる.
さらに,SMI指標は,それ自体が平らな価格の特性を有している.単純移動平均などの指標と比較して,価格の変動に対してより平らな反応をしている.これは,短期的な市場の騒音に容易に影響されないよりより信頼性の高い取引信号を生成する.
全体として,この戦略はSMI指標の優位性をうまく利用し,株式のトレンドを効果的に追跡することができました.これは投資家が利益を得ることを助けることができ,自動取引にも適しています.
この戦略は主にSMI指標に依存しているので,SMIに関連するリスクがあります.
まず,SMI指標はパラメータ設定に敏感である.パラメータ設定が不適切であれば,生成された取引シグナルの効果は大きく割引される.これは,投資家が最適なパラメータ組み合わせを決定するために繰り返しテストする必要がある.
また,SMI自体は,誤った取引シグナルの出現を完全に回避することはできません.市場が激しく波動すると,偽の信号が生み出し,不必要な損失を招く可能性があります.これは,取引シグナルの確認のため,誤った取引の確率を減らすために,他の指標の組み合わせで使用する必要があります.
最後に,この戦略は,全体的な株式市場リスクを変化させることができません. 市場全体が熊市に入ると,この戦略は,大きな損失を避けることは困難です. これは,技術分析に基づくすべての戦略が完全に回避できない系統的リスクです.
この戦略は,以下の点でさらに最適化できます.
他の指標を組み合わせて,指標の組み合わせの優位性を利用して,誤った取引信号の確率を減らすため,利益の確率を高める.例えば,基本的要素,波動率指標などを追加することができる.
SMIパラメータを自動的に最適化するために,機械学習の方法を使用します. 膨大な歴史的データで訓練し,最適なパラメータの組み合わせを探します.
合理的なストップは,単一の損失の影響を大幅に軽減し,リスクを減らすことができます.
量的な株式選択戦略と組み合わせて,株式池の全体的な質を向上させる.良い株式池の質は,戦略の安定性を直接向上させる.
この記事では,SMI指標に基づくトレンド追跡を実現するMomentum Surfer戦略について詳しく説明する.この戦略の最大の利点は,順次価格の逆転を捕捉し,順次株価のトレンドの変化を追跡できるという点である.また,パラメータ設定の感度,信号信頼性などのリスクがある.さらに戦略の効果を高めるためのいくつかの最適化提案を提示する.全体的に,この戦略は,自動化取引にとって非常に魅力的で,実態調査に値する.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Stochastics Momentum Index Strategy", shorttitle="Stoch_MTM_Doan", overlay=true)
// 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) and (SMI < os)
if (longCondition)
strategy.entry("Buy", strategy.long)
shortCondition = ta.crossunder(SMIsignal, emasignal) and (SMI > ob)
if (shortCondition)
strategy.entry("Sell", strategy.short)