Stratégie de trading de tendance à pente dynamique


Date de création: 2024-02-06 11:51:14 Dernière modification: 2024-02-06 11:51:14
Copier: 10 Nombre de clics: 754
1
Suivre
1617
Abonnés

Stratégie de trading de tendance à pente dynamique

Aperçu

L’idée centrale de cette stratégie est d’utiliser la pente dynamique pour déterminer la direction de la tendance des prix et de générer des signaux de négociation en combinaison avec la détermination de la rupture. Plus précisément, il suit en temps réel les nouveaux hauts et les nouveaux bas des prix, calcule la pente dynamique en fonction de la variation des prix au cours de différentes périodes de temps, puis décide de la rupture des prix par rapport à la ligne de tendance.

Principe de stratégie

La stratégie est principalement composée des étapes suivantes:

  1. Déterminer les plus hauts et les plus bas prix: suivre les plus hauts et les plus bas prix d’une période donnée (par exemple 20 lignes K) pour déterminer s’il s’agit d’un nouveau haut ou d’un nouveau bas

  2. Calculer la pente dynamique: numérotation des lignes K pour enregistrer les hauts ou les bas de l’innovation, calculer la pente dynamique des hauts et des bas après un certain cycle (par exemple, 9 lignes K)

  3. Dessiner des lignes de tendance: dessiner des lignes de tendance à la hausse et à la baisse en fonction de la pente dynamique

  4. Ligne de tendance prolongée et mise à jour: Ligne de tendance prolongée et mise à jour lorsque le prix franchit la ligne de tendance

  5. Signal de transaction: combiné à une rupture de la ligne de tendance des prix, un signal de survente et de dépréciation

Avantages stratégiques

Cette stratégie présente les avantages suivants:

  1. Dynamique pour évaluer les tendances et réagir avec souplesse aux changements du marché

  2. La capacité de maîtriser raisonnablement les stop-loss et les retraits

  3. Les signaux de rupture sont clairs et faciles à mettre en œuvre

  4. Paramètres personnalisables et adaptatifs

  5. La structure du code est claire, facile à comprendre et à réutiliser.

Risques et solutions

Cette stratégie présente aussi des risques:

  1. Il est recommandé d’ajouter des conditions de filtrage lorsque la tendance se déplace.

  2. Les faux signaux de rupture sont plus probables, les paramètres peuvent être ajustés ou des conditions de filtrage peuvent être ajoutées

  3. Le risque de stop loss peut être augmenté en cas de changement radical de situation.

  4. L’espace d’optimisation est limité, la rentabilité est limitée, il convient aux transactions à court terme.

Direction d’optimisation

Parmi les domaines où la stratégie peut être améliorée, citons:

  1. Ajouter plus d’indicateurs techniques pour détecter les signaux filtrants

  2. Optimiser les combinaisons de paramètres pour trouver le meilleur

  3. Il s’agit d’une stratégie de réduction des pertes et de réduction des risques.

  4. Ajout d’une fonction d’ajustement automatique de l’amplitude d’entrée

  5. Essayez de combiner cela avec d’autres stratégies pour trouver plus d’opportunités.

Résumer

Cette stratégie est globalement une stratégie de courts-circuits efficace basée sur la tendance de la courbe dynamique et la rupture de la transaction. Elle est précise, à risque contrôlable et adaptée pour capturer les opportunités de courts-circuits sur le marché. En optimisant davantage les paramètres et en ajoutant des conditions de filtrage, le taux de victoire et le niveau de profit de la stratégie peuvent être améliorés.

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