la tendance à suivre une stratégie basée sur les canaux de Donchian

Auteur:ChaoZhang est là., Date: 2023-10-31 17:44:19
Les étiquettes:

img

Résumé

La stratégie de pulling est une stratégie de suivi de tendance basée sur les canaux de Donchian. Elle utilise des canaux de Donchian rapides et lents pour identifier la direction de la tendance et entrer dans les retraits. Les avantages de cette stratégie sont qu'elle peut suivre les tendances automatiquement et réduire les pertes à temps lorsque la tendance change. Mais elle comporte également les risques de retrait et de stop loss trop proches.

La logique de la stratégie

La stratégie définit d'abord la période de canal rapide comme 20 barres, et la période de canal lent comme 50 barres.

Tout d'abord, le plus haut et le plus bas des canaux rapides sont calculés, et le point médian est pris comme la ligne de stop loss.

Lorsque le prix franchit le haut du canal lent, allez long. Lorsque le prix franchit le bas du canal lent, allez court. Après avoir entré dans la position, définissez le stop loss au milieu du canal rapide.

Ainsi, le canal lent détermine la direction de la tendance majeure, tandis que le canal rapide suit les ruptures mineures dans une petite plage pour déterminer le point de stop loss.

Les avantages

  • La structure à double canal peut suivre automatiquement les tendances et réduire rapidement les pertes lorsque les tendances s'inversent.

  • En prenant des entrées seulement lorsque le prix franchit les limites du canal, vous pouvez filtrer certaines fausses ruptures sans tendance réelle.

  • Le risque contrôlable. La distance de stop loss proche peut contrôler une seule perte.

Les risques

  • Les stratégies qui suivent la tendance peuvent avoir des retombées relativement importantes, ce qui nécessite une préparation psychologique.

  • Le stop loss est trop proche. La période du canal rapide est courte, donc le stop loss est proche, susceptible d'être arrêté.

  • La structure à double canal peut générer des entrées excessives, ce qui nécessite un dimensionnement raisonnable des positions.

Directions d'optimisation

  • Nous pouvons ajouter de la volatilité, etc. dans les conditions d'entrée pour filtrer les écarts sans assez de force de tendance.

  • Optimiser les paramètres de la période du canal. Nous pouvons trouver les combinaisons optimales de paramètres du canal de manière systématique.

  • Combiner plusieurs délais: déterminer la tendance majeure sur les délais les plus longs et négocier sur les délais les plus courts.

  • Distances d'arrêt dynamiques, ajustées dynamiquement en fonction de la volatilité du marché.

Résumé

La stratégie de pulling est une stratégie de suivi de tendance standard. Elle utilise les canaux de prix pour déterminer la direction de la tendance et définit un stop loss pour contrôler les risques. La stratégie présente certains avantages mais aussi les problèmes de retrait et de stop loss trop proches. Nous pouvons l'optimiser en ajustant les paramètres du canal, en ajoutant des filtres, etc. Mais nous devons noter que les stratégies de suivi de tendance nécessitent une forte psychologie pour supporter les retraitements.


/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-30 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2020

//@version=4
strategy("Noro's RiskTurtle Strategy", shorttitle = "RiskTurtle str", overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 100, default_qty_value = 100, commission_value = 0.1)

//Settings
needlong  = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
risk      = input(2, minval = 0.1, maxval = 99, title = "Risk size, %")
fast      = input(20, minval = 1, title = "Fast channel (for stop-loss)")
slow      = input(50, minval = 1, title = "Slow channel (for entries)")
showof    = input(true, defval = true, title = "Show offset")
showll    = input(true, defval = true, title = "Show lines")
showdd    = input(true, defval = true, title = "Show label (drawdown)")
showbg    = input(true, defval = true, title = "Show background")
fromyear  = input(1900, defval = 1900, 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")

//Donchian price channel fast
hf = highest(high, fast)
lf = lowest(low, fast)
center = (hf + lf) / 2

//Donchian price chennal slow
hs = highest(high, slow)
ls = lowest(low, slow)

//Lines
colorpc = showll ? color.blue : na
colorsl = showll ? color.red : na
offset = showof ? 1 : 0
plot(hs, offset = offset, color = colorpc, title = "Slow channel high")
plot(ls, offset = offset, color = colorpc, title = "Slow channel low")
plot(center, offset = offset, color = colorsl, title = "Fast channel stop-loss")

//Background
size = strategy.position_size
colorbg = showbg == false ? na : size > 0 ? color.lime : size < 0 ? color.red : na
bgcolor(colorbg, transp = 70)

//Var
loss = 0.0
maxloss = 0.0
equity = 0.0
truetime = true

//Lot size
risksize = -1 * risk
risklong = ((center / hs) - 1) * 100
coeflong = abs(risksize / risklong)
lotlong = (strategy.equity / close) * coeflong
riskshort = ((center / ls) - 1) * 100
coefshort = abs(risksize / riskshort)
lotshort = (strategy.equity / close) * coefshort

//Orders
strategy.entry("Long", strategy.long, lotlong, stop = hs, when = needlong and strategy.position_size == 0 and hs > 0 and truetime)
strategy.entry("Short", strategy.short, lotshort, stop = ls, when = needshort and strategy.position_size == 0 and ls > 0 and truetime)
strategy.exit("LongExit", "Long", stop = center, when = needlong and strategy.position_size > 0)
strategy.exit("Short", stop = center, when = needshort and strategy.position_size < 0)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")
    
if showdd

    //Drawdown
    max = 0.0
    max := max(strategy.equity, nz(max[1]))
    dd = (strategy.equity / max - 1) * 100
    min = 100.0
    min := min(dd, nz(min[1]))
    
    //Max loss size
    equity := strategy.position_size == 0 ? strategy.equity : equity[1]
    loss := equity < equity[1] ? ((equity / equity[1]) - 1) * 100 : 0
    maxloss := min(nz(maxloss[1]), loss)
    
    //Label
    min := round(min * 100) / 100
    maxloss := round(maxloss * 100) / 100
    labeltext = "Drawdown: " + tostring(min) + "%" + "\nMax.loss " + tostring(maxloss) + "%"
    var label la = na
    label.delete(la)
    tc = min > -100 ? color.white : color.red
    osx = timenow + round(change(time)*10)
    osy = highest(100)
    // la := label.new(x = osx, y = osy, text = labeltext, xloc = xloc.bar_time, yloc = yloc.price, color = color.black, style = label.style_labelup, textcolor = tc)

Plus de