Tendance suivant la stratégie basée sur la distance avec arrêt de perte de suivi

Auteur:ChaoZhang est là., Date: 2023-11-15 11h24 et 16h
Les étiquettes:

img

Résumé

Cette stratégie utilise l'indicateur Distance Close Bars (DCB) pour déterminer la tendance des prix et l'indicateur RSI rapide comme filtre, implémente un stop loss pour la tendance après le trading.

Principaux

  1. Calculer lastg et lastr représentant la dernière barre verte de fermeture et la dernière barre rouge de fermeture.

  2. Calculer dist comme la différence entre lastg et lastr.

  3. Calculer l'adist comme SMA de 30 périodes de dist.

  4. Générer un signal commercial lorsque la distance est supérieure à 2 fois celle de l'adist.

  5. Utilisez l'indicateur RSI rapide pour filtrer le signal, évitant une fausse rupture.

  6. Entrer en négociation à un pourcentage fixe du capital si le signal ne présente aucune position.

  7. Martingale à l'échelle après la perte.

  8. La position de clôture est déclenchée lorsque le stop loss ou le take profit est déclenché.

Les avantages

  1. L'indicateur DCB capte efficacement les tendances à moyen et long terme.

  2. Le filtre RSI rapide évite les pertes de fausses fuites.

  3. L'arrêt de traîneur bloque les bénéfices et contrôle les risques.

  4. Martingale augmente la position après la perte pour un profit plus élevé.

  5. Des paramètres raisonnables conviennent à différents environnements de marché.

Les risques

  1. Le DCB peut générer de mauvais signaux, il a besoin d'autres filtres.

  2. La Martingale peut amplifier les pertes, nécessite une gestion stricte des risques.

  3. Un mauvais réglage du stop loss peut entraîner une perte excessive.

  4. La taille des positions devrait être limitée afin d'éviter un effet de levier excessif.

  5. Des réglages contractuels incorrects peuvent entraîner d'énormes pertes sur le marché extrême.

Optimisation

  1. Optimisez les paramètres du DCB pour une meilleure combinaison.

  2. Essayez d'autres indicateurs pour remplacer le filtre RSI rapide.

  3. Optimisez le stop loss et profitez pour un taux de gain plus élevé.

  4. Optimiser les paramètres de Martingale pour réduire les risques.

  5. Test sur différents produits pour une meilleure répartition des actifs.

  6. Utilisez l'apprentissage automatique pour optimiser dynamiquement les paramètres.

Résumé

Il s'agit d'une stratégie globale de suivi de tendance mature. Le DCB détermine la direction de la tendance et filtre rapidement les signaux RSI pour éviter les mauvaises entrées. Stop loss et take profit contrôle efficacement la perte d'une seule transaction. Mais il existe toujours des risques, les paramètres doivent être optimisés pour réduire les risques et améliorer la stabilité. La logique est claire et facile à comprendre, adaptée aux traders de tendance à moyen et long terme.


/*backtest
start: 2023-11-07 00:00:00
end: 2023-11-14 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Distance Strategy v1.0", shorttitle = "Distance str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10)

//Settings 
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(true, defval = true, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
usersi = input(true, defval = true, title = "Use RSI-Filter")
periodrsi = input(7, defval = 7, minval = 2, maxval = 50, title = "RSI Period")
limitrsi = input(30, defval = 30, minval = 1, maxval = 50, title = "RSI Limit")
fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Fast RSI
fastup = rma(max(change(close), 0), periodrsi)
fastdown = rma(-min(change(close), 0), periodrsi)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Distance
bar = close > open ? 1 : close < open ? -1 : 0
lastg = bar == 1 ? close : lastg[1]
lastr = bar == -1 ? close : lastr[1]
dist = lastg - lastr
adist = sma(dist, 30)
plot(lastg, linewidth = 3, color = lime)
plot(lastr, linewidth = 3, color = red)
up = bar == -1 and dist > adist * 2
dn = bar == 1 and dist > adist * 2

//RSI Filter
rsidn = fastrsi < limitrsi or usersi == false
rsiup = fastrsi > 100 - limitrsi or usersi == false

//Signals
up1 = up and rsidn
dn1 = dn and rsiup
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open))

//Arrows
plotarrow(up1 ? 1 : na, colorup = blue, colordown = blue)
plotarrow(dn1 ? -1 : na, colorup = blue, colordown = blue)

//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

signalup = up1
if signalup
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

signaldn = dn1
if signaldn
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Plus de