
この戦略は,Price Channel VWAP Trading Strategyと呼ばれるもので,価格チャネルをベースにVWAP取引を行う戦略である.この戦略の主な考えは,価格チャネル内で,VWAP指標の平均線とその上下偏移チャネルラインを使用して,買入点の判断を行うこと,チャネルラインを破るときは,固定ポジションの総資産の割合に従ってポジションを開くこと,VWAP平均線に戻るときは,平仓することである.
この戦略は,VWAP指数を使用して現在の価格の平均取引価格を計算する.VWAP指数は,取引額と取引量の比率である価格の平均価格を表す.VWAP指数は,現在の価格と歴史的取引平均価格の偏差を反映する.
策略はVWAP指標の平均線とその偏移通道線を使用する.偏移通道線の比率は,パラメータlonglevel1とshortlevel1によって設定されている.価格が偏移通道線を突破すると,パラメータlotsizelongのポジションパーセントに従って多項開く.価格が偏移通道線を突破すると,パラメータlotsizeshortのポジションパーセントに従って空き券を開く.
この戦略のパラメータ設定は,チャネル取引の考え方を十分に反映しています. ユーザーは,チャネル幅とポジション比率のサイズを自分の好みに合わせて調整して,異なるレベルの取引頻度を実現することができます.
この取引戦略には以下の利点があります.
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")