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.
Calculer lastg et lastr représentant la dernière barre verte de fermeture et la dernière barre rouge de fermeture.
Calculer dist comme la différence entre lastg et lastr.
Calculer l'adist comme SMA de 30 périodes de dist.
Générer un signal commercial lorsque la distance est supérieure à 2 fois celle de l'adist.
Utilisez l'indicateur RSI rapide pour filtrer le signal, évitant une fausse rupture.
Entrer en négociation à un pourcentage fixe du capital si le signal ne présente aucune position.
Martingale à l'échelle après la perte.
La position de clôture est déclenchée lorsque le stop loss ou le take profit est déclenché.
L'indicateur DCB capte efficacement les tendances à moyen et long terme.
Le filtre RSI rapide évite les pertes de fausses fuites.
L'arrêt de traîneur bloque les bénéfices et contrôle les risques.
Martingale augmente la position après la perte pour un profit plus élevé.
Des paramètres raisonnables conviennent à différents environnements de marché.
Le DCB peut générer de mauvais signaux, il a besoin d'autres filtres.
La Martingale peut amplifier les pertes, nécessite une gestion stricte des risques.
Un mauvais réglage du stop loss peut entraîner une perte excessive.
La taille des positions devrait être limitée afin d'éviter un effet de levier excessif.
Des réglages contractuels incorrects peuvent entraîner d'énormes pertes sur le marché extrême.
Optimisez les paramètres du DCB pour une meilleure combinaison.
Essayez d'autres indicateurs pour remplacer le filtre RSI rapide.
Optimisez le stop loss et profitez pour un taux de gain plus élevé.
Optimiser les paramètres de Martingale pour réduire les risques.
Test sur différents produits pour une meilleure répartition des actifs.
Utilisez l'apprentissage automatique pour optimiser dynamiquement les paramètres.
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()