
この戦略は,双方向反転量指数指標を用いて取引する戦略である.この戦略は,一定期間中の最高価格,最低価格,閉店価格を計算して反転量指数を構築し,その移動平均を計算して取引シグナルを形成する.指数が超買区から反転下落または超売区から反転上昇するときに取引が生じる.この戦略は,同時に,破損停止機構を設定する.
この戦略の核心指標は逆転量指数であるストキャスティック・モメンタム・インデックス (SMI) である.SMIの計算式は以下のとおりである.
\[SMI = \frac{Close-(HH+LL)/2}{AVGDIFF/2}*100\]
その中で,HHは過去N日の最高値であり,LLは過去N日の最低値であり,Nはパラメータaによって決定される.AVGDIFFはHH-LLのM日の移動平均であり,Mはパラメータbによって決定される.
SMI指数は,価格逆転の特徴を反映している. 株価が最近N日の最高点に近づくと,SMIは100に近づいて,株価が過買であることを示す. 最近N日の最低点に近づくと,SMIは100に近づいて,株価が過売りであることを示す.
この戦略は,SMIのM日間移動平均SMAを取引信号ラインとして使用する.SMIが超買区から下向きに逆転してSMAを突破すると,買入信号が生じ,SMIが超売区から上向きに逆転してSMAを突破すると,売り信号が生じます.
また,戦略はK線実体突破を判断して止損を設定する.
この戦略は以下の利点があります.
価格逆転の原理を利用して,トレンドの逆転点で取引シグナルを生成し,逆転の機会を捉える.
SMI指数は最高価格,最低価格,閉盘価格を組み合わせて,総合的に超買超売状況を判断し,信号はより信頼性が高い.
K線実体突破と組み合わせて止損を設定し,タイミングで止損をExiting the position,リスクを効果的にコントロールする.
戦略のパラメータが少なく,実行し,最適化することが簡単です.
この戦略にはいくつかのリスクがあります.
逆転取引は,逆転が成功するタイミングを判断するのが困難で,複数の損失を発生させた後にトレンドの逆転を捕捉する可能性がある.
ターニングポイントの判断ミスにより,損失が拡大する可能性があります.
突破停止は過度に敏感で,封鎖される可能性が高い.
対応方法:
SMIパラメータを最適化し,反転取引頻度を調整する.
逆転のタイミングを判断する他の指標と組み合わせて
エニティサイズ・ストップダメージパラメータを調整し,過度に敏感にならないようにする.
この戦略は以下の方向から最適化できます.
SMIのパラメータaとbを最適化して,反転捕捉の感度を調整する.
平均線,波動率指数などの主要トレンドの方向を逃さないように,他の指標の判断を追加します.
止損の方法を増やして,止損が過度に敏感または遅すぎないようにする. 追跡止損,曲線止損なども考慮できる.
機械学習モデルの組み合わせにより,逆転の成功確率を判断し,逆転の失敗を回避します.
この戦略は,全体として,反転指数SMIを利用して双方向取引を行う戦略である.利点は,価格の反転特性を利用し,反転点で取引シグナルを生じ,より多くのショートライン取引機会を捕捉できるという点である.しかし,いくつかの典型的な反転取引リスクも存在し,パラメータとストップを最適化して損失を拡大しないようにする必要がある.全体として,この戦略は,反転取引感に関心のある投資家に適している.しかし,他の指標の判断と厳格なストップコントロールを複合してリスクを取らなければならない.
/*backtest
start: 2023-11-01 00:00:00
end: 2023-11-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=2
strategy(title = "Noro's Stochastic Strategy v1.0", shorttitle = "Stochastic str 1.0", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
a = input(5, "Percent K Length")
b = input(3, "Percent D Length")
limit = input(50, defval = 50, minval = 1, maxval = 100, title = "SMI Limit")
fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
//Stochastic Momentum Index
ll = lowest (low, a)
hh = highest (high, a)
diff = hh - ll
rdiff = close - (hh+ll)/2
avgrel = ema(ema(rdiff,b),b)
avgdiff = ema(ema(diff,b),b)
SMI = avgdiff != 0 ? (avgrel/(avgdiff/2)*100) : 0
SMIsignal = ema(SMI,b)
//Lines
plot(SMI, color = blue, linewidth = 3, title = "Stochastic Momentum Index")
plot(SMIsignal, color = red, linewidth = 3, title = "SMI Signal Line")
plot(limit, color = black, title = "Over Bought")
plot(-1 * limit, color = black, title = "Over Sold")
plot(0, color = blue, title = "Zero Line")
//Body
body = abs(close - open)
abody = sma(body, 10)
//Signals
up = SMIsignal < -1 * limit and close < open
dn = SMIsignal > limit and close > open
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2
//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if up
if strategy.position_size < 0
strategy.close_all()
strategy.entry("Bottom", strategy.long, needlong == false ? 0 : lot)
if dn
if strategy.position_size > 0
strategy.close_all()
strategy.entry("Top", strategy.short, needshort == false ? 0 : lot)
if exit
strategy.close_all()