VWAP の 戦略 を フォロー する 傾向

作者: リン・ハーンチャオチャン開催日:2024年2月29日 15:26:56
タグ:

img

概要

この戦略は,トレンド指向を決定するためにVWAPとEMAを指標として使用する.価格がVWAPとEMA200の両方の上にある場合,ロングになり,価格がVWAPとEMA200の両方の下にある場合,ショートになります.これは典型的なトレンドフォロー戦略です.

戦略の論理

この戦略の基本的な論理は,価格動向を判断するために VWAP と EMA を利用することにある.

  • VWAPは典型的な価格を表し,市場参加者の平均コストを反映する.価格がVWAPを超える場合,それは購買力が増加し,長くなることを意味します.価格がVWAPを下回ると,それは販売力が強化され,短くなることを意味します.

  • EMA200は,価格の中長期トレンドを表します.価格がEMA200を超えると,中長期見通しは上昇傾向にあり,長引く必要があります.価格がEMA200を下回ると,中長期見通しは下落傾向にあり,短引く必要があります.

この戦略では,まず価格がVWAPとEMA200の両方の上にあるかどうかを判断し,もしそうならロングに行く.価格がVWAPとEMA200の両方の下にある場合,ショートに行く.この戦略は主にVWAPとEMAを頼りに取引決定を下すことがわかります.

また,この戦略は,利益とストップロスのポイントも設定する.ロングした後,TPはエントリー価格の3.5%,SLはエントリー価格の1.4%に設定される.ショートした後,TPはエントリー価格の2.5%,SLはエントリー価格の0.9%である.これは巨大な損失を回避する.

利点

この戦略の最大の利点は,傾向を特定するためにVWAPとEMAを使用することは非常に信頼性があることです.

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

したがって,トレンドを判断するためにVWAPとEMAを組み合わせることは非常に信頼性があります.両方の指標が一貫したシグナルを与える場合,取引の成功率は非常に高いです.

さらに,TP/SLを設定することで,取引ごとに過度の損失を回避できます.

リスク

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

  • 激烈な市場変動がある場合,価格は短期的にVWAPから逸脱し,間違った信号を与える可能性があります.
  • 新しいトレンドが始まると EMAは価格変化に遅れをみせ 最適なエントリータイミングを逃す可能性があります

また,TP/SLの設定が正しくない場合,取引ごとに過度の損失のリスクが依然として存在します.

上記の問題を解決するために,我々は新しいトレンドの開始を検出するためにそれらをより良いするためにVWAPとEMAのパラメータを最適化することができます.また我々は価格変動に応じてそれらを調整するために適応性TP/SLを設定することができます.

強化

この戦略を強化する主な側面は:

  • VWAP パラメータを最適化して,傾向を決定する上でより安定した設定を見つけます.
  • EMA 期間を最適化して,傾向を判断する上でより正確な設定を見つけます.
  • Bollinger Bands,KDJなど他のトレンドインジケーターを追加して,VWAPとEMAと組み合わせて,正確性を向上します.
  • 価格変動に応じて動的に調整するために,特定のルールに基づいて適応的な利益とストップ損失を設定します.
  • 総リスクを制御するために,引き上げ,連続損失などに基づいてポジションのサイズを組み込む.

結論

結論として,これは非常に信頼性の高いトレンドフォロー戦略です.トレンド方向を決定するために,VWAPとEMAの単純な論理を使用します.両方の指標が一貫したシグナルを与えるとき,成功率は非常に高いです.適切なTP/SLを設定することで,リスクを制御することができます.この戦略をさらに改善し,パフォーマンスをさらに向上させるために,まだ多くの方法 (パラメータ最適化,指標を追加,適応型TP/SL,ポジションサイズ等) があります.


/*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")

もっと