Stratégie quantitative de stop loss suiveur basée sur la distance


Date de création: 2023-11-15 11:24:16 Dernière modification: 2023-11-15 11:24:16
Copier: 0 Nombre de clics: 682
1
Suivre
1617
Abonnés

Stratégie quantitative de stop loss suiveur basée sur la distance

Aperçu

La stratégie est basée sur l’idée d’un arrêt mobile, utilisant l’indicateur Distance Close Bars (DCB) pour déterminer le mouvement des prix, en combinaison avec l’indicateur RSI rapide pour filtrer, réaliser un arrêt mobile et un arrêt de suivi. La stratégie utilise également le principe d’augmentation de la position de Martingale, adapté à la négociation de tendances à mi-longue ligne.

Le principe

  1. Calculer lastg et lastr représentant respectivement le prix de clôture de la dernière ligne K haussière et celui de la dernière ligne K baissière.

  2. Dist est la différence entre lastg et lastr.

  3. Calculer une moyenne mobile simple de 30 cycles de adist pour dist.

  4. Générer un signal de transaction lorsque dist est deux fois plus grand que adist.

  5. Le filtrage des signaux est effectué en combinaison avec un RSI rapide, afin d’éviter les fausses ruptures.

  6. Si vous avez un signal et que vous n’avez pas de position, vous pouvez entrer dans la position à un pourcentage fixe.

  7. Le principe de la Martingale, le gain de position après la perte.

  8. Le prix déclenche une pause ou une liquidation.

Les avantages

  1. L’utilisation de l’indicateur DCB pour déterminer la direction de la tendance permet de capturer efficacement les tendances de la ligne moyenne et longue.

  2. Le filtrage rapide des indices RSI évite les fausses ruptures et les pertes.

  3. Le mécanisme mobile d’arrêt des pertes permet de verrouiller les bénéfices et de contrôler efficacement les risques.

  4. Le principe de Martingale permet d’augmenter la position après une perte pour obtenir un meilleur rendement.

  5. Les paramètres de la stratégie sont réglés de manière raisonnable et adaptés à différents environnements de marché.

Les risques

  1. L’indicateur DCB peut émettre un mauvais signal et doit être filtré en combinaison avec d’autres indicateurs.

  2. Les investissements de Martingale augmentent les pertes et nécessitent une gestion rigoureuse des fonds.

  3. Une mise en place déraisonnable du point d’arrêt peut entraîner des pertes plus importantes que prévues.

  4. Le nombre de positions doit être strictement contrôlé afin d’éviter de dépasser la capacité financière.

  5. La mauvaise configuration des contrats de négociation peut entraîner des pertes énormes dans des cas extrêmes.

Optimiser les idées

  1. Optimiser les paramètres DCB pour trouver la meilleure combinaison de paramètres

  2. Essayez d’utiliser d’autres indicateurs pour remplacer le RSI rapide.

  3. Optimiser les paramètres de stop-loss et d’arrêt-stop pour augmenter le taux de réussite de la stratégie.

  4. Optimiser les paramètres de Martingale pour réduire le risque de prise de position.

  5. Tester les différentes variétés commerciales et choisir le meilleur arbitrage.

  6. Paramètres stratégiques d’optimisation dynamique de la technologie combinés à l’apprentissage automatique.

Résumer

La stratégie Overall est une stratégie de suivi de tendance plus mature. L’utilisation de DCB pour déterminer la direction de la tendance, les signaux de filtrage RSI rapides permettent d’éviter les erreurs d’ouverture de position.

Code source de la stratégie
/*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()