
この戦略は,取引量の長期短期移動平均の交差に基づいて実現する.それは,異なる周期のEMAを使用して取引量の長期短期トレンドを計算し,その差値から震動指標を構築する.この震動指標は,ゼロ軸を通るときに多し,ゼロ軸を通るときに空にする.さらに,それは,特定の操作方向を判断するために,以前の高点と低点を組み合わせる.
この戦略の核心指標は,取引量振動指標である.これは,長期短期取引量指数の移動平均の差値によって取引量変化の傾向を反映している.具体的計算式は以下のとおりである.
Volume Oscillator = (ShortEMA - LongEMA) / LongEMA * 100
その中,ShortEMAとLongEMAは,それぞれ短期と長期の指数移動平均を表している.ShortEMAの上を通過すると,この指標は正であり,取引量が拡大していることを意味する.ShortEMA下を通過すると,この指標は負であり,取引量が縮小していることを意味する.
この振動指標を計算した後,この戦略は,そのゼロ軸との交差を利用して取引信号を生成する.指標が負の正転,つまりゼロ軸の上を通るときは,多行し,指標が正の負転,つまりゼロ軸下を通るときは空行する.これは取引量の動能変換を反映する.
さらに,戦略は,前回の高低点を組み合わせて,特定の操作方向を判断する.すなわち,指数にゼロ軸を走る時,前回の高点が前回の低点の絶対値より大きい場合は,多見する.逆に空見する.この特性を利用して,取引量拡大の強さを判断することができる.
この戦略の利点は以下の通りです.
取引量を基本指標として使用することで,市場参加者の意思を効果的に判断でき,強力な実用性があります.
長期短期EMAと組み合わせると,短期的な動力と中長期のトレンドを同時に捉えることができます.
指数とゼロ軸の交差によって形成される取引信号は,単純明快で判断しやすい.
前回の高低点を加え,具体的な操作方向を決定し,取引量の有効活用の勢いを最大限に活用することができる.
戦略的思考が明確で,パラメータ調整が柔軟で,適応性が強い.
この戦略にはいくつかのリスクがあります.
取引量指標は市場偽突破の影響を受けやすいため,誤ったシグナルが生じることがあります. リスクを制御するためにストップ・ロスを設定できます.
変動の状況では,取引量の交差が頻繁に起こり,指標の転換を合理的に確認する必要があります.
前回の高低は,最近の拡大を反映しているだけで,その強さの持続性を決定することはできません.
異なる品種と時間帯のパラメータは,個別に最適化する必要があり,一般的ではありません.
取引量指数は高周波プログラム取引に遅い反応を示し,最適な入場時間を逃す可能性があります.
この戦略は以下の点で最適化できます.
フィルタリング条件を追加して,偽信号を回避します. 例えば,価格指数への加入の確認です.
長期短期EMAの周期パラメータを最適化して,異なる品種の特性をより適合させる.
周期パラメータを設定し,前回の高低値に対して,一時期の最高値と最低値を使用します.
指数転換区間を区間として設定し,頻繁に取引を避ける.
単一損失をコントロールするストップ・ロース戦略を導入する.
VRP量価指標など他の量価技術指標と組み合わせる.
機械学習によるパラメータの自動最適化.
全体として,取引量振動指数に基づく長短線交差戦略は取引量転換の特性を充分利用し,判断力が強く,トレンドの初期に優れた探知性が備わっている.また,前回の高低点を組み合わせて特定の方向を決定し,取引決定をより正確にする.しかし,偽信号による損失を防ぐためにリスク管理にも注意する必要があります.この戦略には,最適化の余地があり,数値パラメータ調整とコンポーネート指数で拡張することができ,取引時間を短縮し,市場の変化への反応を早める.
/*backtest
start: 2022-12-05 00:00:00
end: 2023-03-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("SB_Volume_oscillator_Prev_high_low", overlay=true,default_qty_type = strategy.percent_of_equity, default_qty_value = 100)
shortlen = input(5, minval=1)
longlen = input(10, minval=1)
short = ema(volume, shortlen)
long = ema(volume, longlen)
osc = 100 * (short - long) / long
//hline(0, title="Zero")
//plot(osc)
zero=input(0.0)
low_val=input(0.0)
high_val=input(0.0)
prev_high_val=input(0.0)
prev_low_val=input(0.0)
where=input(0)
where:=nz(where[1])
low_val:=nz(low_val[1])
high_val:=nz(high_val[1])
prev_high_val:=nz(prev_high_val[1])
prev_low_val:=nz(prev_low_val[1])
if(crossover(osc,zero))
high_val:=osc
where:=1
prev_low_val:=low_val
low_val:=osc
if(crossunder(osc,zero))
low_val:=osc
where:=-1
prev_high_val:=high_val
high_val:=osc
if(where==1)
if(high_val<osc)
high_val:=osc
if(where==-1)
if(low_val>osc)
low_val:=osc
if (crossover(osc,zero))
if(prev_high_val<=abs(prev_low_val))
strategy.entry("My Long Entry Id", strategy.long)
if(prev_high_val>abs(prev_low_val))
strategy.entry("My Short Entry Id", strategy.short)
if (crossunder(osc,zero))
if(prev_high_val<=abs(prev_low_val))
strategy.entry("My Long Entry Id", strategy.long)
if(prev_high_val>abs(prev_low_val))
strategy.entry("My Short Entry Id", strategy.short)