この戦略は"Price Channel VWAP Trading Strategy"と呼ばれる.これは価格チャネルに基づいたVWAP取引を実装する戦略である.この戦略の主なアイデアは:価格チャネル内では,VWAP指標の移動平均線とその上下オフセットチャネルラインを使用して購入・販売ポイント判断する.チャネルラインが割れたとき,総資産の固定パーセントに応じてポジションを開き,価格がVWAP移動平均線に戻るとポジションを閉じる.
この戦略は,現在の平均取引価格をVWAP指標で計算する.VWAPは平均価格を表し,取引量に対する売上高の比率である.VWAP指標は,現在の価格と歴史的な平均取引価格の間の偏差を反映する.
この戦略は,VWAP指標の移動平均線とそのオフセットチャネルラインを使用する.オフセットチャネルラインの比率は,パラメータ
この戦略のパラメータ設定は,チャネル取引のアイデアを完全に反映しています.ユーザーは,自分の好みに応じて,チャネル幅とポジションのサイズを総資産の割合として調整し,それによって異なるレベルの取引頻度を実現できます.
この取引戦略には以下の利点があります
VWAP指標は平均価格レベルをよく反映できるため,チャネルラインに基づく取引は,価値の中間点を効果的にロックし,短期変動によって偏見を避けることができます.同時に,異なるパラメータを持つチャネルを組み合わせ,バッチでポジションを構築することで,リスクを効果的に制御し,強制清算につながる一方的なリスク集中を防ぐことができます.最後に,VWAP移動平均線の回帰に近いポジションをタイミングで利益を得て閉鎖することで,価格逆転による損失を削減することができます.
この戦略には注意すべきリスクもあります.
VWAP指標は,高周波取引の変動に敏感ではない.極端な価格格差や短期的異常の場合,それでも不必要な取引信号と損失を誘発する.また,チャネルパラメータがあまりにも緩やかに設定されている場合,無効な価格浸透信号を容易に形成する.最後に,レグレッションオペレーションで閉じるポジションの範囲があまりにも広く設定されている場合,利益を得るために最適なタイミングを逃し,捕らえた損失を引き起こす可能性があります.
対策は,パラメータ設定を合理的に評価し,チャネルパラメータを適切に調整すること,他の指標を組み合わせて価格異常を判断し,盲目信号を避けること,そして,最終的に,より良い利益を得る効果を達成するために,異なるレベルのチャネルと回帰範囲のパラメータ最適化を評価することです.
この戦略は以下の方向で最適化できます.
チャンネルのラインのレベルをさらに増やし,より安定した取引効果を達成するために最適化のためにパラメータを組み合わせることができます.また,取引損失を引き起こす無効な価格ギャップを避けるために取引量判断ルールを追加することができます.最後に,ストップ・ロスのルールは,ポジションの損失が一定パーセントに達すると,リスクを効果的に制御して,ポジションの終了にストップ・ロスを設定することができます.
この戦略は,比較的安定した取引戦略を達成するために,VWAP指標と価格チャネルを組み合わせます. 戦略パラメータ設定は,ユーザーが自分の好みに合わせて調整できるように柔軟です. この戦略は,価値ミッドポイントの方向性を効果的に決定することができます. パラメータ組み合わせとバッチ構築を通じて,安定した収益性を達成できます. 戦略にはまだ改善の余地があるものの,全体的には,高度な実用性を持つ定量的な取引戦略です.
/*backtest start: 2023-02-12 00:00:00 end: 2024-02-18 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title = "VWAP Bands Backtest", shorttitle = "VWAP Bands Backtest", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3) //Settings lotsizelong = input(100, defval = 100, minval = 0, maxval = 10000, title = "Lot long, %") lotsizeshort = input(100, defval = 100, minval = 0, maxval = 10000, title = "Lot short, %") short1 = input(true, title = "short 1") long1 = input(true, title = "long 1") shortlevel1 = input(1.0, title = "Short line 1") longlevel1 = input(-1.0, title = "Long line 1") needoffset = input(true, title = "Offset") fromyear = input(1900, defval = 1900, 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") //Variables size = strategy.position_size mult = 1 / syminfo.mintick truetime = true //VWAP ma = vwap(hlc3) //Levels longline1 = long1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close shortline1 = short1? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close //Lines colorlong1 = long1 ? color.lime : na colorshort1 = short1 ? color.red : na offset = needoffset ? 1 : 0 plot(shortline1, offset = offset, color = colorshort1, title = "Short line 1") plot(ma, offset = offset, color = color.blue, title = "MA line") plot(longline1, offset = offset, color = colorlong1, title = "Long line 1") //Trading lotlong = 0.0 lotshort = 0.0 lotlong := size == 0 ? (strategy.equity / close) * (lotsizelong / 100) : lotlong[1] lotshort := size == 0 ? (strategy.equity / close) * (lotsizeshort / 100) : lotshort[1] if ma > 0 if lotlong > 0 lotslong = 0.0 lotslong := strategy.position_size > 0 ? round(strategy.position_size / lotlong) : 0.0 strategy.entry("L1", strategy.long, lotlong, limit = longline1, when = (lotslong == 0 and long1 and truetime)) if lotshort > 0 lotsshort = 0.0 lotsshort := strategy.position_size < 0 ? round(strategy.position_size / lotshort) : 0.0 strategy.entry("S1", strategy.short, lotshort, limit = shortline1, when = (lotsshort == 0 and short1 and truetime)) if strategy.position_size > 0 strategy.exit("TPL", "L1", limit = ma) if strategy.position_size < 0 strategy.exit("TPS", "S1", limit = ma) if time > timestamp(toyear, tomonth, today, 23, 59) strategy.close_all() strategy.cancel("L1") strategy.cancel("S1") strategy.cancel("TPL") strategy.cancel("TPS")