
この戦略は,まず,量価指標VFIと移動平均を組み合わせてトレンド判断を構築し,次にブリン帯指標を組み合わせて逆転事件を判断し,トレンド取引とショック取引の有機的な組み合わせを実現した.
この戦略は以下の部分から構成されています.
VFI指標判断傾向.典型的な価格の対数変化率と取引量の変化を組み合わせて価格の傾向を判断し,量と価格の合理的なマッチングを実現する.
EMA差値指標の判断傾向.20日線と50日線の差値の割合を計算し,中長線の傾向方向を判断する.
ブリン帯の指標判断は逆転する。ブリン帯の中軌は20日単調移動平均で,帯幅は中軌の1.5倍標準差である。価格が上下軌を突破すると取引信号を発する。
VFI指標幅度判断反転。VFI値が上下限 ((0・20) に近いとき,トレンドの反転の可能性が大きいと考えられた。
取引時間帯条件を満たす場合,価格がブリン帯を突破して軌道上になり,VFI,EMA差値指標が同方向の看板になったとき,多めに行います.価格がブリン帯を突破して軌道下になり,またはVFIが特定の値に達したとき,平仓します.
VFI指標の導入により,量と価格の関係がより合理的にマッチングされ,盲目的に価格に従うことが避けられる.
EMAの差値判断とVFIの組み合わせにより,トレンド判断はより安定して信頼できます.
ブリン帯とVFI指標の反転判断が組み合わせられ,市場における双方向の波動に適した策略が作られる.
価格指数は偽突破のリスクを完全に回避することはできません.
EMAの差値が遅れているため,短期的な転換に適時に対応できない.
ブリン帯のパラメータ設定が不適切である場合,取引頻度やキャプチャドマーケットのリスクが発生する可能性があります.
リスクに対する対処法:
単一の指数に依存しないように,より多くの指標と判断の傾向を組み合わせる.
EMAパラメータは,大きすぎたり小さすぎたりして,適切なパラメータを調整すべきではありません.
異なる市場状況におけるブリン帯のパラメータの変化による戦略の影響をテストする.
VFIのパラメータを最適化して,より敏感にします.
価格チャネルやEnvelopesの指標に基づく突破判断を追加する.
OBV,PVTなど,より多くの量価指標の導入をテストする.
機械学習とAI技術を導入し,パラメータの動的最適化を実現する.
この戦略は,トレンド判断と逆転判断を総合的に考慮し,VFI,EMA差値とブリン帯の指標を使用し,市場双方向の変動を捕捉することを実現した.次のステップは,パラメータ設定を最適化し,判断基盤を豊かにし,適用範囲を拡大し,戦略の安定した収益性を向上させる.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-24 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © beststockalert
//@version=4
strategy(title="Super Bollinger Band Breakout", shorttitle = "Super BB-BO", overlay=true)
source = close
length = input(130, title="VFI length")
coef = input(0.2)
vcoef = input(2.5, title="Max. vol. cutoff")
signalLength=input(5)
// session
pre = input( type=input.session, defval="0400-0935")
trade_session = input( type=input.session, defval="0945-1700")
use_trade_session = true
isinsession = use_trade_session ? not na(time('1', trade_session)) : true
is_newbar(sess) =>
t = time("D", sess)
not na(t) and (na(t[1]) or t > t[1])
is_session(sess) =>
not na(time(timeframe.period, sess))
preNew = is_newbar(pre)
preSession = is_session(pre)
float preLow = na
preLow := preSession ? preNew ? low : min(preLow[1], low) : preLow[1]
float preHigh = na
preHigh := preSession ? preNew ? high : max(preHigh[1], high) : preHigh[1]
// vfi 9lazybear
ma(x,y) => 0 ? sma(x,y) : x
typical=hlc3
inter = log( typical ) - log( typical[1] )
vinter = stdev(inter, 30 )
cutoff = coef * vinter * close
vave = sma( volume, length )[1]
vmax = vave * vcoef
vc = iff(volume < vmax, volume, vmax) //min( volume, vmax )
mf = typical - typical[1]
vcp = iff( mf > cutoff, vc, iff ( mf < -cutoff, -vc, 0 ) )
vfi = ma(sum( vcp , length )/vave, 3)
vfima=ema( vfi, signalLength )
//ema diff
ema20 = ema(close,20)
ema50 = ema(close,50)
diff = (ema20-ema50)*100/ema20
ediff = ema(diff,20)
//
basis = sma(source, 20)
dev = 1.5 * stdev(source, 20)
upper = basis + dev
lower = basis - dev
ema9 = ema(source, 9)
if ( ((crossover(source, upper) and diff>ediff and diff>0) or (close>upper and (vfi >0 or vfima>0 or ediff>0.05) and (vfi<14 or vfima<14)) ))
strategy.entry("Long", strategy.long)
if (crossunder(source, lower) or vfi>19 or vfima>19 or diff<(ediff+0.01) )
strategy.close("Long")