Stratégie de négociation en ligne de tendance à pente dynamique

Auteur:ChaoZhang est là., Date: 2024-02-06 11:51:14 Je suis désolé
Les étiquettes:

img

Résumé

L'idée de base de cette stratégie est d'utiliser la pente dynamique pour déterminer la direction de la tendance des prix et générer des signaux de trading en combinaison avec le jugement de rupture.

Principe de stratégie

Les principales étapes de cette stratégie sont les suivantes:

  1. Jugez le prix le plus élevé et le prix le plus bas: Suivez les prix les plus élevés et les plus bas sur un certain cycle (par exemple, 20 barres) pour déterminer si un nouveau niveau élevé ou bas a été atteint.

  2. Calcul de la pente dynamique: enregistrez le nombre de barres lorsque vous atteignez un nouveau sommet ou un nouveau sommet, et calculez la pente dynamique du nouveau sommet/basse point au sommet/basse point après un certain cycle (par exemple 9 barres).

  3. Graphique des lignes de tendance: Graphique des lignes de tendance ascendantes et descendantes basées sur des pentes dynamiques.

  4. Étendre et mettre à jour les lignes de tendance: lorsque le prix franchit les lignes de tendance, étendre et mettre à jour les lignes de tendance.

  5. Signals de trading: déterminer les signaux longs et courts en fonction des écarts de prix par rapport aux lignes de tendance.

Les avantages de la stratégie

Les avantages de cette stratégie sont les suivants:

  1. Déterminer dynamiquement la direction de la tendance pour la flexibilité en réponse aux changements du marché.

  2. Contrôler raisonnablement les arrêts et réduire au minimum les tirages.

  3. Des signaux commerciaux clairs et faciles à mettre en œuvre.

  4. Paramètres personnalisables pour une grande adaptabilité.

  5. Une structure de code propre, facile à comprendre et à développer.

Risques et solutions

Cette stratégie comporte également certains risques:

  1. Des longs et des courts fréquents lorsque la tendance est limitée à une plage.

  2. Il y a plus de faux signaux sur les évasions.

  3. Élargir la plage de stop-loss.

  4. L'espace d'optimisation et le potentiel de profit limités, adaptés au trading à court terme.

Directions d'optimisation

Les domaines d'optimisation de la stratégie sont les suivants:

  1. Ajouter plus d'indicateurs techniques comme signaux de filtrage.

  2. Optimiser les combinaisons de paramètres pour obtenir les meilleurs paramètres.

  3. Essayez d'améliorer les stratégies de stop loss pour réduire les risques.

  4. Ajouter une fonctionnalité pour ajuster automatiquement la fourchette de prix d'entrée.

  5. Essayez de combiner avec d'autres stratégies pour découvrir plus de possibilités.

Résumé

Dans l'ensemble, il s'agit d'une stratégie à court terme efficace basée sur l'utilisation de la pente dynamique pour déterminer les tendances et les événements de trading.


/*backtest
start: 2024-01-06 00:00:00
end: 2024-01-19 00:00:00
period: 2h
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/
// © pune3tghai

//Originally posted by matsu_bitmex

//tried adding alerts on plots and cleared the chart for a cleaner view.
//Publishing the script in hope of getting it improved by someone else.

//Added strategy code for easier calculations

//Needs work on TP and SL part.

//P.S - THE ORIGINAL CODE IS MUCH BETTER BUT I have tried to be more usable and understandable.

//@version=4
strategy("TrendLines with Alerts", overlay=true)     //study("TrendLines with Alerts", overlay=true)
//update

length1 = input(20)
check = input(9)
//length2 = input(200)


u=0.0
u := u[1]

l=0.0
l := l[1]

y=0.0
y := y[1]

yl=0.0
yl := yl[1]

angle = 0.0
angle := angle[1]

anglel = 0.0
anglel := anglel[1]

if (highest(length1) == high[check] and highest(length1) == highest(length1)[check] and barssince(barstate.isfirst) > check)
    u := high[check]

    
if (lowest(length1) == low[check] and lowest(length1) == lowest(length1)[check] and barssince(barstate.isfirst) > check)
    l := low[check]
    

    
p = round(barssince(u == high[check]))

pl = round(barssince(l == low[check]))

if p == 0 and barssince(barstate.isfirst) > check
    y := high[abs(p[1]+1+check)]
    
if pl == 0 and barssince(barstate.isfirst) > check
    yl := low[abs(pl[1]+1+check)]    
    

if p == 0
    angle := (u-y)/p[1]

if pl == 0
    anglel := (l-yl)/pl[1]

uppertrend = u+ (p * angle)

lowertrend = l+ (pl * anglel)

extendup = if barssince(barstate.isfirst) > check
    uppertrend[check] + angle[check] * check*2

extenddown = if barssince(barstate.isfirst) > check
    lowertrend[check] + anglel[check] * check*2




//plot(l[offset]-u,color=red)
//plot(u[offset]-l,color = green )
plot(lowertrend, color = color.green, transp=30,offset = -check)
plot(extenddown, color = color.green, transp=100)
plot(uppertrend, color = color.red, transp=30, offset = -check)
plot(extendup, color = color.red, transp=100)
//plot(l[offset], color = red)

l1 = lowertrend
l2 = extenddown
u1 = uppertrend
u2 = extendup



l2sell = crossunder(high, l2)
u2buy = crossover(low, u2)
buy1 = (low<=lowertrend) and open>lowertrend and high>lowertrend and close>lowertrend
buy2 = (low<=extenddown) and open>extenddown and high>extenddown and close>extenddown
buy = buy1 or buy2 or u2buy
plotshape(series=buy, title="Buy", style=shape.triangleup, size=size.tiny, color=color.lime, location=location.belowbar)
sell1 = (high>=uppertrend) and open<uppertrend and low<uppertrend and close<uppertrend
sell2 = (high>=extendup) and open<extendup and low<extendup and close<extendup
sell = sell1 or sell2 or l2sell
plotshape(series=sell, title="Sell", style=shape.triangledown, size=size.tiny, color=color.red, location=location.abovebar)

longCond = buy
shortCond = sell

tp = input(0.2, title="Take Profit")

tpbuyval = valuewhen(buy, close, 1) + (tp/100)*(valuewhen(buy, close, 1))
tpsellval = valuewhen(sell, close, 1) - (tp/100)*(valuewhen(sell, close, 1))


sl = input(0.2, title="Stop Loss")
slbuyval = valuewhen(buy, close, 0) - (sl/100)*(valuewhen(buy, close, 0))
slsellval = valuewhen(sell, close, 0) + (sl/100)*(valuewhen(sell, close, 0))
// === STRATEGY ===
tradeType = input("BOTH", title="What trades should be taken : ", options=["LONG", "SHORT", "BOTH", "NONE"])

// stop loss
slPoints = input(defval=0, title="Initial Stop Loss Points (zero to disable)", minval=0)
tpPoints = input(defval=0, title="Initial Target Profit Points (zero for disable)", minval=0)

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//

testStartYear = input(2019, "Backtest Start Year", minval=1980)
testStartMonth = input(1, "Backtest Start Month", minval=1, maxval=12)
testStartDay = input(1, "Backtest Start Day", minval=1, maxval=31)
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)

testStopYear = input(9999, "Backtest Stop Year", minval=1980)
testStopMonth = input(12, "Backtest Stop Month", minval=1, maxval=12)
testStopDay = input(31, "Backtest Stop Day", minval=1, maxval=31)
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<//

//
//set up exit parameters
TP = tpPoints > 0 ? tpPoints : na
SL = slPoints > 0 ? slPoints : na

// Make sure we are within the bar range, Set up entries and exit conditions
if testPeriod() and tradeType != "NONE"
    strategy.entry("long", strategy.long, when=longCond == true and tradeType != "SHORT")
    strategy.entry("short", strategy.short, when=shortCond == true and tradeType != "LONG")
    strategy.close("long", when=shortCond == true and tradeType == "LONG")
    strategy.close("short", when=longCond == true and tradeType == "SHORT")
    strategy.exit("XL", from_entry="long", profit=tpbuyval, loss=slbuyval)
    strategy.exit("XS", from_entry="short", profit=tpsellval, loss=slsellval)

// === /STRATEGY ===
//EOF


////ALERT SYNTEX
//alertcondition(longCond, title="Long", message="Killer Market")
//alertcondition(shortCond, title="Short", message="Poopy Market")

Plus de