Double tendance à la moyenne mobile selon la stratégie

Auteur:ChaoZhang est là., Date: 2023-09-24 13:14:08 Je vous en prie.
Les étiquettes:

Résumé

Cette stratégie utilise des croisements RMA à long terme et EMA à court terme pour déterminer la direction de la tendance.

La logique de la stratégie

  1. Utilisez un RMA à longue période et un EMA à courte période pour déterminer la tendance.

  2. Lorsque le prix dépasse le plus haut niveau récent sur certaines périodes, suivez le plus haut niveau comme stop loss.

  3. Définissez une zone de non-échange autour de la RMA. N'ouvrez pas de positions lorsque le prix est dans la zone pour éviter les coups de fouet. La plage de zone est basée sur un certain pourcentage de la valeur de la RMA.

  4. Le prix de prise de profit est fixé pour les positions de sortie à un pourcentage de profit après l'entrée.

Les avantages

  1. Le croisement de la moyenne mobile double détermine de manière fiable la direction de la tendance.

  2. Les mouvements d'arrêt de perte suivent la tendance.

  3. La zone d'exclusion filtre les faux signaux de rupture.

  4. Prendre profit permet à la stratégie de fermer activement des transactions rentables.

Les risques

  1. Le retard dans les croisements des moyennes mobiles peut accroître les pertes.

  2. L'arrêt de la perte trop proche du prix peut être arrêté par le bruit.

  3. Une zone d'exclusion commerciale trop large risque de manquer des opportunités.

  4. Ne pas s'arrêter à temps peut entraîner d'autres pertes.

Des solutions possibles:

  1. Optimiser les paramètres de la moyenne mobile pour réduire les retards.

  2. Élargir légèrement le stop-loss pour éviter une sursensibilité.

  3. Testez le réglage de la plage de zone d'exclusion pour éviter les échanges manquants.

  4. Ajouter d'autres mécanismes de stop loss pour limiter la perte maximale.

Directions d'optimisation

  1. Testez d'autres combinaisons de moyennes mobiles pour une meilleure adéquation.

  2. Ajoutez des spreads, MACD, etc. pour améliorer la stabilité.

  3. Utilisez l'apprentissage automatique pour optimiser intelligemment les paramètres.

  4. Incorporer la force de la tendance pour éviter les transactions contraires à la tendance.

  5. Optimiser la gestion de l'argent pour un taux de gain plus élevé.

Résumé

Cette stratégie utilise des doubles croisements de moyennes mobiles pour déterminer la direction de la tendance et combine les arrêts de trailing et les zones de non-échange pour verrouiller les bénéfices de la tendance.


/*backtest
start: 2023-08-24 00:00:00
end: 2023-09-12 00:00:00
period: 3h
basePeriod: 15m
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/
// © PatrickGwynBuckley

//@version=5
//var initialCapital = strategy.equity

strategy("PB Trend Scalper", "PB Trend Scalper", overlay = true)
shortma = input.int(55, title="quick ma's")
longma = input.int(100, title="long ma's")
ema55h = ta.ema(high, shortma)
ema55l = ta.ema(low, shortma)
ema200h = ta.rma(high, longma)
ema200l = ta.rma(low, longma)
stock = ta.stoch(close, high, low, 14)

lev = input.int(3, title="leverage")
hhVal = input.int(170, title="Highest high period")
llVal = input.int(170, title="Lowest low period")

hh = ta.highest(high, hhVal)
ll = ta.lowest(low, llVal)
//plot(stock)

plot(hh, color=color.new(color.green, 50))
plot(ll, color=color.new(color.red, 50))
var float downtrade = 0
p = input.float(3.0, title="no trade zone")
l = 3
emadistlong = ema200h + ((ema200h/100)*p)
emadistshort = ema200l - ((ema200h/100)*p)

plot(ema55h)
plot(ema55l)
ntl = plot(emadistlong, color=color.new(color.red, 10))
nts = plot(emadistshort, color=color.new(color.red, 10))
fill(ntl, nts, color=color.new(color.red, 90))

//position size

EntryPrice = close
//positionValue = initialCapital
positionSize = (strategy.equity*lev) / EntryPrice

//plot(strategy.equity)


//standard short

if ema55h < ema200l and close[2] < ema55l and close[1] > ema55l and high[1] < ema55h and close < ema55h and ema55h < emadistshort and strategy.opentrades == 0// and stock > 85 
    strategy.entry("short", strategy.short, qty=positionSize, comment="short")
    downtrade := 1

//reset count    
if (ta.crossunder(ema55h, ema200l)) and downtrade == 1
    downtrade := 0

//standard long    
if ema55l > ema200h and close[2] > ema55h and close[1] < ema55h and low[1] > ema55l and close > ema55l and ema55l > emadistlong and strategy.opentrades <= 1// and stock < 15 
    strategy.entry("long", strategy.long, qty=positionSize, comment="long")
    downtrade := 0

//RESET COUNT ON MA CROSS
if (ta.crossover(ema55l, ema200h)) and downtrade == 0
    downtrade := 1
    
longclose2 = low < ll[1] or low < emadistshort //close < open and open<open[1] and open[2] < open[3] and open[3] < emadistshort//close < ta.lowest(low, 20)//
shortclose2 = high > hh[1] or high>emadistlong//close > open and open>open[1] and open[2]>open[3] and open[3] > emadistlong//high > emadistlong//close > ta.highest(high, 20)//

sl = 3.5
tp = input.float(6.9, title="take profit %")
tp2 = 10


strategy.exit("long exit", "long", profit = (strategy.position_avg_price*(tp)))//, loss = (strategy.position_avg_price*(sl)))
strategy.close("long", when = longclose2, comment = "long exit")
//strategy.close("long", when = (downtrade == 1), comment = "long exit")
//strategy.exit("long exit", "long2", profit = (strategy.position_avg_price*(tp2)))//, loss = (strategy.position_avg_price*(sl)))
//strategy.close ("long2", when = longclose2, comment = "long exit")
//strategy.close("long", when = (downtrade == 1), comment = "long exit")

strategy.exit("short exit", "short", profit = (strategy.position_avg_price*(tp)))//, loss = (strategy.position_avg_price*(sl)))//, loss = 300)
strategy.close("short", when = shortclose2, comment = "short exit")
//strategy.close("short", when = (downtrade == 0), comment = "short exit")
//strategy.exit("short exit", "short2", profit = (strategy.position_avg_price*(tp2)))//, loss = (strategy.position_avg_price*(sl)))
//strategy.close ("short2", when = shortclose2, comment = "short exit")
//strategy.close("short2", when = (downtrade == 0), comment = "short exit")

//if (strategy.exit("long exit", "long"))
    //downtrade := 1
//else 
   // downtrade := 0

Plus de