この戦略は,市場における買取力と販売力を決定するために,ボリューム残高指標に基づいて設計されています.
ボリュームバランス (VB) 指標は,価格のボリューム変化の推進力を反映しています.その構造のアイデアは以下です.
平均価格の日中の変動率を価格動向として計算する.
購入力と販売力を 価格の勢いと 売り上げの量に比べ 判断します
この指標は0軸上下波動する. 買取力と販売力を測定する基準は,指標値の正と負である.
この戦略は,VBインジケーターを構成し,シグナルラインを設定する.VBインジケーターがシグナルラインの上を横切ると購入信号が生成される.VBインジケーターがシグナルライン下を横切ると販売信号が生成される.
このコードの主なステップは次のとおりです.
平均価格の日中の変動率を価格動向として計算する.
モメントの切断範囲係数を設定します.範囲を超えるモメントは係数として取られます.
切断後の定量モメント vcp を計算する.
定量化指標 vfi を得るために sum vcp.
シグナルラインの長さを設定し,vfimaを取得します.
VB インジケーター vfi と信号ライン vfima を比較して取引信号を生成します.
この戦略の利点は次のとおりです.
価格自体に影響を受けずに,買取力と販売力を判断するために,物量と価格関係を使用します.
定量化運動量の計算範囲は,異常変動の影響を避けるためにパラメータで制御できます.
VB インジケーターと信号線を比較することで,適切な入力のタイミングを設定できます.
インディケーターの計算方法はシンプルで明瞭で,ライブ取引でも操作が簡単です.
戦略のパフォーマンスを最適化するために 調整可能な指標パラメータと信号ラインパラメータ
この戦略にはいくつかのリスクもあります:
VB指標は異常な価格変動に敏感である.適切なカットパラメータを設定する必要があります.
価格が指標信号から逸脱する確率は高く,盲目に従うことは避けるべきである.
インディケーターパラメータと信号ラインパラメータは,誤った信号を防ぐために適切な最適化が必要です.
明らかに価格と容量の特徴を持つ製品に適しています.低流動性製品には適していません.
市場の逆転を意味する指標の偏差に注意してください.
リスクはパラメータ範囲を調整し,他のフィルターを使用し,適切な緩やかなストップ損失を許可することによって制御できます.
戦略は以下の側面で最適化できます.
適量運動量のための計算パラメータを最適化し,敏感性と安定性をバランスさせる.
遅延とノイズをバランスするために信号ラインのパラメータを最適化します
検証のためにボリューム・スプレッド分析などの他の指標を追加します.
トレンドとサポート/レジスタンスの指標を追加して不利な取引を避ける.
市場変動に基づいて ダイナミックストップロスを設定します
マシン学習を使って 最適なパラメータの組み合わせを見つけます
耐久性を評価するための様々な製品と時間枠のバックテスト
利潤曲線へのインパクトを比較し,最適値を見つけます.
この戦略は,ボリュームバランス指標に基づいて購入/販売力を判断する. シンプルな指標設計と調整可能なパラメータなどの利点,また誤った信号などのリスクもあります. 複数の側面からのさらなる最適化と検証はライブパフォーマンスを向上させることができます.
/*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)