Stratégies de trading à court terme suivant les tendances


Date de création: 2024-01-04 17:52:21 Dernière modification: 2024-01-04 17:52:21
Copier: 0 Nombre de clics: 588
1
Suivre
1621
Abonnés

Stratégies de trading à court terme suivant les tendances

Aperçu

Cette stratégie est basée sur l’indicateur de tendance ADX, l’indice de tendance moyen et la combinaison de la ligne moyenne, permettant de juger et de suivre la tendance. Lorsqu’il est jugé que la tendance est inversée, une opération de rupture est utilisée pour effectuer des transactions en ligne courte.

Principe de stratégie

  1. L’indice de tendance moyenne de l’ADX est utilisé pour déterminer la tendance. Lorsque l’ADX est supérieur à 20, il indique qu’il est actuellement en tendance.
  2. L’EMA sert d’indicateur de tendance, l’EMA de la fourchette dorée indique une tendance à la hausse et la fourchette morte indique une tendance à la baisse.
  3. Le VWAP est un prix de référence important, le prix est au-dessus du VWAP pour le marché à plusieurs têtes et au-dessous pour le marché à tête nue.
  4. Il est possible d’évaluer les tendances et les retournements du marché en fonction de plusieurs indicateurs ci-dessus, d’effectuer des opérations de rupture et de suivre les tendances pour effectuer des transactions de courte durée.

Analyse des avantages

  1. Les tendances sont définies par une combinaison de plusieurs indicateurs.
  2. Le VWAP est un prix de référence important pour éviter de négocier dans des zones non valides.
  3. L’ADX décide d’opérer une fois la tendance en place pour réduire les transactions inefficaces.
  4. Le taux de réussite des opérations de percée est élevé, ce qui correspond à la tendance.

Analyse des risques

  1. Il existe une probabilité que l’échec de la percée entraîne un arrêt. Le risque peut être réduit en optimisant la position d’arrêt.
  2. Le nombre de transactions est plus élevé et les transactions individuelles peuvent entraîner des pertes. Le nombre de positions peut être ajusté de manière appropriée pour réduire le taux de pertes individuelles.
  3. Le choix des heures de négociation et des variétés de négociation influe également sur la performance de la stratégie. Différents temps de négociation et différentes variétés de négociation peuvent être testés.

Direction d’optimisation

  1. Optimiser les paramètres ADX pour mieux distinguer les tendances et les valeurs ADX compilées.
  2. Optimiser les combinaisons de paramètres de la moyenne pour trouver les combinaisons de la moyenne qui représentent le mieux la tendance.
  3. Optimiser la position de l’arrêt. Élargir la portée de l’arrêt de manière appropriée pour éviter des coûts d’arrêt excessifs.
  4. Optimiser la taille de la position. Réduire le risque de transaction unique.

Résumer

Cette stratégie utilise des indicateurs de ligne moyenne, des indicateurs de jugement de tendance et des prix de référence importants pour juger avec précision les grandes tendances. Lorsqu’une tendance est inversée, les opérations de rupture sont utilisées pour suivre la tendance et réaliser des transactions en ligne courte.

Code source de la stratégie
/*backtest
start: 2023-12-27 00:00:00
end: 2023-12-29 23:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mariocastel

//@version=5
strategy("Wave Rider", overlay=true, initial_capital = 100000)

session = input(defval = "1400-1500", title = "Session Time")
t = not na(time(timeframe.period,session))
RR = input.float(1.5, "Risk to reward", step=0.5)
var bool movetoBE = input(false, "Move to Break Even")
BE = input.float(1, "Break Even at", step=0.5)

vwap_mult = 0.001 * input(3, "VWAP Multiplier")
aboveVWAP = ta.vwap(close) * (1 + vwap_mult)
belowVWAP = ta.vwap(close) * (1 - vwap_mult)
sym = input("BTC_USDT:swap", "VWAP Source")

QQQaboveVWAP = request.security(sym, "3", aboveVWAP)
QQQbelowVWAP = request.security(sym, "3", belowVWAP)
QQQclose = request.security(sym, "3", close)

ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema60 = ta.ema(close, 60)
ema9 = ta.ema(close, 9)

opentrades = strategy.opentrades > 0

aboveEMA = close > ema60
belowEMA = close < ema60

uptrend = aboveEMA and aboveEMA[1] and aboveEMA[2] and aboveEMA[3] and aboveEMA[4] and aboveEMA[5] and aboveEMA[6] and aboveEMA[7] and aboveEMA[8] and aboveEMA[9] and aboveEMA[10] and aboveEMA[11] and aboveEMA[12] and aboveEMA[13] and aboveEMA[14] and aboveEMA[15] and aboveEMA[16] and aboveEMA[17] and aboveEMA[18] and aboveEMA[19] and aboveEMA[20] and aboveEMA[21] and aboveEMA[22] and aboveEMA[23] and aboveEMA[24] and aboveEMA[25] and aboveEMA[26] and aboveEMA[27] and aboveEMA[28] and aboveEMA[29]
downtrend = belowEMA and belowEMA[1] and belowEMA[2] and belowEMA[3] and belowEMA[4] and belowEMA[5] and belowEMA[6] and belowEMA[7] and belowEMA[8] and belowEMA[9] and belowEMA[10] and belowEMA[11] and belowEMA[12] and belowEMA[13] and belowEMA[14] and belowEMA[15] and belowEMA[16] and belowEMA[17] and belowEMA[18] and belowEMA[19] and belowEMA[20] and belowEMA[21] and belowEMA[22] and belowEMA[23] and belowEMA[24] and belowEMA[25] and belowEMA[26] and belowEMA[27] and belowEMA[28] and belowEMA[29]

buy = (low < ema20 and low > ema50 and close > ema9) and QQQclose > QQQaboveVWAP  or (low[1] < ema20 and low[1] > ema50 and close > ema9) and QQQclose > QQQaboveVWAP and uptrend
sell = (high > ema20 and high < ema50 and close < ema9) and QQQclose < QQQbelowVWAP  or (high[1] > ema20 and high[1] < ema50 and close < ema9) and QQQclose < QQQbelowVWAP and downtrend

var float entry = na
var float sl = na
var float qty = na
var float tp = na
var float be = na

if ema20 > ema50 and ema9 > ema20 
    if buy and not opentrades and t and uptrend
        alert("Wave Rider Setup")
        entry := close
        sl := ema50
        qty := 1000/(close - sl) * 1
        if close - sl > syminfo.mintick*300
            tp := close + ((close - sl)*1)
        else 
            tp := close + ((close - sl)*RR)
        be := close + ((close - sl)*BE)
        strategy.entry("Buy", strategy.long, qty=qty)
        strategy.exit("Close Buy", "Buy",qty=qty, stop=sl, limit=tp)

if ema20 < ema50 and ema9 < ema20 
    if sell and not opentrades and t and downtrend
        alert("Wave Rider Setup")
        entry := close
        sl := ema50
        qty := 1000/(sl - close) * 1
        if sl - close > syminfo.mintick*300
            tp := close - ((sl - close)*1)
        else
            tp := close - ((sl - close)*RR)
        be := close - ((sl - close)*BE)
        strategy.entry("Sell", strategy.short, qty=qty)
        strategy.exit("Close Sell", "Sell", qty=qty, stop=sl, limit=tp)

// Adjust BEs
if movetoBE == true
    if strategy.position_size > 0
        if high >= be
            sl := entry
            strategy.cancel("Close Buy")
            strategy.exit("Close Buy", "Buy", qty=qty, stop=sl, limit=tp)   
    if strategy.position_size < 0
        if low <= be
            sl := entry
            strategy.cancel("Close Sell")  
            strategy.exit("Close Sell", "Sell", qty=qty, stop=sl, limit=tp)  


EoD_time = timestamp(year, month, dayofmonth, 15, 58, 00)
EoD = time == EoD_time
if EoD
    strategy.close_all()

barcolor(color=buy ? color.rgb(191, 255, 131): na)
barcolor(color=sell ? color.rgb(255, 149, 149): na)
ema20plot = plot(ema20, color=color.rgb(168, 131, 131, 55))
ema50plot = plot(ema50, color=color.black)
fill(ema20plot, ema50plot, color=color.rgb(168, 131, 131, 85))
plot(ema9, color=color.red)
plot(ema60, color=color.purple)
plot(QQQaboveVWAP)
plot(QQQbelowVWAP)
plotshape(uptrend, style=shape.triangleup, location=location.belowbar, color=color.black)
plotshape(downtrend, style=shape.triangledown, location=location.abovebar, color=color.black)