Cette stratégie utilise VWAP et EMA comme indicateurs pour déterminer la direction de la tendance. Elle va long lorsque le prix est au-dessus de VWAP et EMA200, et va court lorsque le prix est en dessous de VWAP et EMA200.
La logique de base de la stratégie consiste à utiliser le VWAP et l'EMA pour juger de l'évolution des prix.
Le VWAP représente le prix typique et reflète le coût moyen des participants au marché. Lorsque le prix est supérieur au VWAP, cela signifie que le pouvoir d'achat augmente et devrait aller long. Lorsque le prix est inférieur au VWAP, cela signifie que le pouvoir de vente se renforce et devrait aller court.
L'EMA200 représente la tendance à moyen et long terme du prix. Lorsque le prix est supérieur à l'EMA200, cela signifie que les perspectives à moyen et long terme sont haussières et devraient être longues. Lorsque le prix est inférieur à l'EMA200, cela signifie que les perspectives à moyen et long terme sont baissières et devraient être courtes.
Par conséquent, cette stratégie juge d'abord si le prix est supérieur à la fois à VWAP et à EMA200, si oui, alors allez long; si le prix est inférieur à la fois à VWAP et à EMA200, puis allez court.
En outre, la stratégie définit également des points de prise de profit et de stop-loss. Après le long, le TP est fixé à 3,5% du prix d'entrée et SL est fixé à 1,4% du prix d'entrée. Après le short, le TP est de 2,5% du prix d'entrée et SL est de 0,9% du prix d'entrée. Cela évite d'énormes pertes.
Le plus grand avantage de cette stratégie est que l'utilisation de VWAP et EMA pour déterminer les tendances est très fiable.
Par conséquent, la combinaison de VWAP et EMA pour juger des tendances est très fiable.
En outre, la fixation de TP/SL évite des pertes excessives par transaction.
Le principal risque de cette stratégie réside dans le fait que VWAP et l'EMA puissent donner des signaux erronés.
En outre, des réglages TP/SL incorrects présentent toujours le risque de pertes excessives par transaction.
Pour résoudre les problèmes ci-dessus, nous pouvons optimiser les paramètres de VWAP et EMA pour les rendre meilleurs pour détecter le début de nouvelles tendances.
Les principaux aspects pour renforcer cette stratégie:
En conclusion, il s'agit d'une stratégie de suivi de tendance très fiable. Il utilise une logique simple de VWAP et EMA pour déterminer les directions de tendance. Lorsque les deux indicateurs donnent des signaux cohérents, le taux de réussite est très élevé. En définissant le TP/SL approprié, le risque peut être contrôlé. Il existe encore de nombreuses façons (optimisation des paramètres, ajout d'indicateurs, TP/SL adaptatif, dimensionnement des positions, etc.) d'améliorer encore cette stratégie et d'améliorer encore sa performance.
/*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")