
この戦略は,市場での買買力の判断を可能にする取引シグナルを設計する量と長さの指標に基づいています.
VBは,取引量の変化が価格に与える推力を反映する.その構成思想は以下の通りである.
典型的な価格の1日間の変動率を計算すると,価格の変化の力を表します.
取引量と価格変動の力を掛け合わせることで,閉盤時の買賣力を判断する.
指数値は0軸上下波動し,多空力の測定基準は指数値の正負である.
この戦略は,VB指標を構成し,信号ラインを設定する. VB指標の上を通るときに買い信号が生じ,VB指標下を通るときに売る信号が生じます.
コードを入力する手順は以下の通りです.
典型的な価格の1日間の変動率を計算する.
波動力の切断範囲coefを設定し,その範囲を超えた波動力はcoefに帰属する.
切断後の量力のvcpを計算する.
求和 vcp 取得量化指数 vfi。
信号線長を設定して,信号線 vfima を取得する.
VB指数vfiと信号線vfimaを比較して取引信号を生成する.
この戦略の利点は以下の通りです.
市場における価格と量との関係から判断する. 価格自体に影響されない.
パラメータを設定して,量力の計算範囲を設定し,異常波動の影響を避ける.
VB指標自体と信号線の比較を組み合わせて,合理的な入場時刻を設定することができる.
指数計算方法はシンプルで明快で,实体操作が容易である.
カスタマイズ可能な指標パラメータと信号ラインパラメータ,戦略効果を最適化します.
この戦略にはいくつかのリスクがあります.
VB指数は価格の異常な変動に敏感であり,適切な切り離すパラメータを設定する必要があります.
株価が指標信号から逸脱する可能性が高いので,盲目追従は避けるべきである.
偽信号を防ぐために,指標パラメータと信号ラインパラメータを適切に最適化する必要があります.
明らかに量的な特性を有する品種に適用し,流動性が低い品種には適用しない.
市場が逆転する可能性があるため,指数の散乱に注意してください.
パラメータの範囲を調整し,他の指標と組み合わせてフィルタリングし,適切な緩解の止損を制御することができます.
この戦略は以下の点で最適化できます.
計算パラメータを最適化して,精度と安定性をバランスする.
信号線のパラメータを最適化し,遅延とノイズをバランスする.
Volume Spread Analysisなどの指標を追加して効果を検証する.
トレンドを増加させ,レジスタンス指標を支えて,不利な方向での取引を避ける.
市場変動に応じてストップポイントを調整するダイナミックなストップ・メカニズムを設定する.
機械学習による最適なパラメータ群のトレーニング
複数の品種と異なる周期で再テストを行い,戦略の安定性を評価する.
各指標のパラメータが収益曲線に与える影響を比較し,最適のパラメータを探します.
この戦略は,量価・長さ計指標に基づいて,買賣力の判断を行う.指標設計の簡素性,パラメータの調整性などの利点があるが,ある程度の偽信号リスクもある.パラメータの最適化,不利な市場を回避するなどの措置によって,戦略の安定性を高めることができる.その後,多面的にこの戦略を最適化し検証し,実盤効果を高める.
/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-29 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("VB Strategy", overlay=true)
length = input(130, title="거래량 길이")
coef = input(0.2, title="계수")
vcoef = input(2.5, title="최대 계수")
signalLength=input(5)
smoothVFI=input(false, type=bool, title="부드럽게")
//볼밴
length2 = input(20, minval=1, title="볼밴 길이")
ma(x,y) => smoothVFI ? 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)
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 )
d=vfi-vfima
upper = vfima + stdev(vfi, length2)
lower = vfima - stdev(vfi, length2)
buysignal = cross(vfi, lower) and crossunder(vfi, lower) == 1 ? vfima : na
sellsignal = cross(vfi, upper) and crossover(vfi, upper) == 1 ? vfima : na
//times = timestamp("GMT+6", 2017, 12, 6, 00, 00)
//if (buysignal and times <= time)
if (buysignal)
if(strategy.position_size < 0)
strategy.close("SHORT")
if(strategy.position_size > 0)
strategy.order("LONG", true, 1, when = (low+high)/2)
if(strategy.position_size == 0)
strategy.entry("LONG", strategy.long, when = (low+high)/2)
//if (sellsignal and times <= time)
if (sellsignal)
if(strategy.position_size > 0)
strategy.close("LONG")
if(strategy.position_size < 0)
strategy.order("SHORT", false, 1, when = (low+high)/2)
if(strategy.position_size == 0)
strategy.entry("SHORT", strategy.short, when = (low+high)/2)