VWAPベースのトレンドフォロー戦略


作成日: 2024-02-29 15:26:56 最終変更日: 2024-02-29 15:26:56
コピー: 0 クリック数: 944
1
フォロー
1617
フォロワー

VWAPベースのトレンドフォロー戦略

概要

この戦略は,VWAPとEMAをトレンドの方向を判断する指標として使用し,VWAPは典型的な価格を代表し,EMA200は中間の長線トレンドを代表する.価格がVWAPとEMA200より高いときに多額の取引を行い,VWAPとEMA200より低いときに空白を行うことは,典型的なトレンドフォロー戦略に属します.

戦略原則

この戦略の核心的な論理は,VWAPとEMAを使って価格の動向を判断することです.

  • VWAPは価格を表す典型的な価格であり,市場参加者の平均コストを反映する.価格がVWAPより高いときは,買い手の力が増加することを表す.価格がVWAPより低い場合は,売り手の力が増加することを表す.空白を空白にしなければならない.
  • EMA200は,価格の中長線を代表するトレンドの方向へ.価格がEMA200の上の場合は,中長線を看板に表示し,多めにすべきです.価格がEMA200の下の場合は,中長線を看板に表示し,空白すべきです.

したがって,この戦略は,価格がVWAPとEMA200の両方より高いかどうかを判断し,そうであれば,さらに判断する.価格がVWAPとEMA200の両方より低い場合は,空白する.この戦略は,購入決定の判断にVWAPとEMAを主に依拠していることがわかります.

さらに,ストップ・ストップ・ストップの設定も行われている. オーバーした後にストップをエントリー価格の3.5%,ストップは1.4%に設定し,空白した後にストップをエントリー価格の2.5%,ストップは0.9%に設定する. これは過大な損失を回避する.

戦略的優位性

この戦略の最大の利点は,VWAPとEMAを使ってトレンドを判断することが非常に確実であることです.

  • VWAPは市場参加者の平均コストを正確に反映し,トレンドを判断する非常に良い指標です.
  • EMA200は中長期トレンドを明確に反映し,大トレンドの方向を正確に判断することができます.

したがって,VWAPとEMAを組み合わせてトレンド判断の信頼性は非常に高い.両者がトレンド判断を一致させると,操作の成功率は高い.

また,ストップ・ストップ・ポイントを設定することで,単一の損失が過大になるのを防ぐことができます.

戦略リスク

この戦略の主なリスクは,VWAPとEMAが誤った信号を発する可能性があることです.

  • VWAPは,市場が激しく波動すると,短期的にVWAPから脱却し,誤ったシグナルを発する可能性があります.
  • 新しいトレンドが始まったばかりの時に,EMAは価格の変化に遅れをとり,戦略が最適な入場時間を逃す可能性があります.

また,ストップ・ストップ・ロスの設定は不適切であり,単一の損失が過大になるリスクは依然として存在します.

上記の問題を解決するために,VWAPとEMAのパラメータ設定を最適化して,新しいトレンドの始まりをよりよく判別できるようにすることができます. また,自主的なストップ・ロスを設定して,ストップ・ロスは価格の変動に合わせて調整することができます.

戦略最適化の方向性

この戦略は,以下のような点で最適化できます.

  • VWAPパラメータを最適化して,より安定した判断トレンドのVWAPパラメータの組み合わせを見つけます.
  • EMAサイクルを最適化して,トレンドを判断するより正確なEMAパラメータを見つけます.
  • 判断の正確性を高めるために,ブリン帯,KDJ,VWAP,EMAなどの他の判断傾向指標を追加します.
  • 自動停止の調整を設定する. 特定のルールに従って,ストップ・ストップのレベルが価格の変動に合わせて調整され,ストップ・ストップの損失が過度に固定されないようにする.
  • ポジション管理と組み合わせて.撤回,連敗回数などの指標に基づいてポジションサイズを調整し,戦略全体のリスクを制御する.

要約する

この戦略は全体的に非常に信頼性の高いトレンドフォロー戦略である. それはVWAPとEMAを使ってトレンドの方向性を判断し,考え方が明確で簡単で,両者が一致するシグナルを発信すると,入場の成功確率は高い. 合理的なストップロスを設定することで,リスクを制御することができる. 我々はまだ,複数の方法で (パラメータ最適化,指標の追加,ストップロスの適応,ポジション管理など) この戦略をさらに完善し,そのパフォーマンスをより優れたものにすることができる.

ストラテジーソースコード
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//26m Binance BTCUSDTPERP
//@version=4
strategy("VWAP Trend Follower", initial_capital=100, overlay=true, commission_type=strategy.commission.percent, commission_value=0.04, default_qty_type = strategy.percent_of_equity, default_qty_value = 90, currency = currency.USD )

/// INITIALISE STRATEGY ///
price=close[1]
vprice=vwap(price)
trend=ema(price, 200)

/// RISK MANAGEMENT ///
long_tp_inp = input(3.5, title='Long Take Profit %',step=0.1)/100
long_sl_inp = input(1.4, title='Long Stop Loss %',step=0.1)/100
short_tp_inp = input(2.5, title='Short Take Profit %',step=0.1)/100
short_sl_inp = input(0.9, title='Short Stop Loss %',step=0.1)/100
long_take_level = strategy.position_avg_price * (1 + long_tp_inp)
long_stop_level = strategy.position_avg_price * (1 - long_sl_inp)
short_take_level = strategy.position_avg_price * (1 - short_tp_inp)
short_stop_level = strategy.position_avg_price * (1 + short_sl_inp)
//long_trailing = input(5, title='Trailing Stop Long',step=0.1) / 100
//short_trailing = input(5, title='Trailing Stop short',step=0.1) / 100

/// STRATEGY CONDITIONS ///
aLong= price > trend and price > vprice
entry_long = aLong and aLong[2] and aLong[1]
aShort= price < trend and price < vprice 
entry_short = aShort and aShort[2] and aShort[1]
//exit_long = 
//exit_short =
//entry_price_long=valuewhen(entry_long,close,0)
//entry_price_short=valuewhen(entry_short,close,0)

/// PLOTTING ///
plot(vprice,                color=#5875E1, linewidth=2)
plot(trend,                 color=#D965E1, linewidth=1)
plotshape(series=aLong,     color=#71E181,style=shape.labelup)
plotshape(series=aShort,    color=#E18BA5,style=shape.labeldown)
//plot(long_take_level,     color=#00E676, linewidth=2)
//plot(long_stop_level,     color=#FF5252, linewidth=1)
//plot(short_take_level,    color=#4CAF50, linewidth=2)
//plot(short_stop_level,    color=#FF5252, linewidth=1)

/// PERIOD ///
testStartYear   = input(2019, "Backtest Start Year")
testStartMonth  = input(1, "Backtest Start Month")
testStartDay    = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear    = input(2020, "Backtest Stop Year")
testStopMonth   = input(12, "Backtest Stop Month")
testStopDay     = input(31, "Backtest Stop Day")
testPeriodStop  = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
testPeriod() => true

//// STRATEGY EXECUTION ////

if testPeriod()
    if strategy.position_size == 0 or strategy.position_size > 0
        strategy.entry(id="Long", long=true, when=entry_long, comment="Long")
        strategy.exit("Take Profit/ Stop Loss","Long", limit=long_take_level, stop=long_stop_level,comment="Exit Long")//,trail_points=entry_price_long * long_trailing / syminfo.mintick, trail_offset=entry_price_long * long_trailing / syminfo.mintick)
//        strategy.close(id="Long", when=exit_long, comment = "Exit Long")

    if strategy.position_size == 0 or strategy.position_size < 0
        strategy.entry(id="Short", long=false, when=entry_short, comment = "Short")
        strategy.exit("Take Profit/ Stop Loss","Short", limit=short_take_level , stop=short_stop_level,comment = "Exit Short")//, trail_points=entry_price_short * short_trailing / syminfo.mintick, trail_offset=entry_price_short * short_trailing / syminfo.mintick)
//        strategy.close(id="Short", when=exit_short, comment = "Exit Short")