Stratégie avancée Super Trend


Date de création: 2024-01-08 10:03:31 Dernière modification: 2024-01-08 10:03:31
Copier: 0 Nombre de clics: 721
1
Suivre
1617
Abonnés

Stratégie avancée Super Trend

Aperçu

La stratégie de progression de la tendance est une stratégie d’optimisation et de mise à niveau basée sur les indicateurs classiques de la tendance. Elle combine les mouvements de prix, les taux d’oscillation et divers indicateurs techniques pour améliorer la qualité du signal, réduire le bruit et capturer plus précisément les changements de tendance du marché.

Principe de stratégie

La ligne de tendance supérieure est au cœur de la stratégie de progression de la tendance supérieure. Elle est calculée en fonction de la portée réelle des fluctuations et de la dynamique des prix, et est utilisée pour déterminer les tendances et les points de basculement potentiels des prix.

Contrairement aux indicateurs traditionnels de tendance supérieure qui ne prennent en compte que le prix de clôture et la gamme de fluctuations réelles, la stratégie de progression intègre également plusieurs dimensions telles que le volume de transactions, les oscillateurs de dynamique et les données fondamentales pour vérifier la fiabilité du signal. Cette approche multivariée permet d’assurer que le signal de négociation généré est plus précis et plus fiable et moins susceptible d’être influencé par le bruit du marché.

Analyse des avantages

Les principaux avantages de la stratégie de progression de la tendance sont:

  1. Cette stratégie consiste à attendre que plusieurs indicateurs soient alignés pour générer un signal de transaction, ce qui permet d’améliorer considérablement la précision.

  2. Réduire les interférences avec le bruit du marché. Grâce à l’utilisation combinée de filtres, une grande quantité de données non importantes sur le marché peut être masquée pour rendre les jugements plus clairs.

  3. Optimisation de la gestion des risques. Des signaux de trading clairs peuvent aider les traders à mieux planifier les points de rupture et d’arrêt, ce qui leur permet d’avoir une meilleure capacité de contrôle des risques.

  4. La stratégie, en plus d’identifier les tendances, peut être utilisée en combinaison avec d’autres outils techniques pour construire un système de trading complet et efficace.

Analyse des risques

Les principaux risques liés à la stratégie de progression de la tendance sont les suivants:

  1. Risque de paramétrage. Une combinaison incorrecte de paramètres de l’indicateur peut entraîner l’échec de la stratégie ou générer trop de signaux erronés.

  2. Risque d’erreur de jugement de tendance. Aucune stratégie ne peut éviter complètement le risque d’erreur de jugement, qui peut entraîner des pertes lorsque la tendance change de façon inattendue.

  3. Risque d’optimisation excessive. Lorsque les paramètres sont ajustés avec une extrême précision, il est trop dépendant des données historiques pour s’adapter aux changements du marché.

  4. Risques liés aux coûts de transaction. Les coûts de transaction, tels que les frais de transaction et les points de glissement, augmentent considérablement avec le nombre de transactions.

La réponse:

  1. Optimiser les paramètres et vérifier régulièrement la robustesse des paramètres de test.

  2. Il est possible de régler le stop-loss et de contrôler les pertes individuelles.

  3. Éviter l’optimisation excessive et maintenir la généralisation des paramètres.

  4. Calculer le rapport risque/bénéfice des signaux et contrôler le coût des transactions.

Direction d’optimisation

Les stratégies de progression hypertrend peuvent être optimisées dans les domaines suivants:

  1. Adaptez les paramètres en fonction des caractéristiques du marché. Par exemple, un marché volatile peut raccourcir le cycle de calcul.

  2. Ajout d’un mécanisme de filtrage adaptatif. Ajuste automatiquement les paramètres de l’indicateur ou désactive certains filtres lorsque le marché entre dans un certain état.

  3. Découvrez les méthodes d’apprentissage automatique et les paramètres d’optimisation dynamique des modèles de formation tels que les réseaux neuronaux.

  4. L’utilisation de données non structurées, combinée à des indicateurs d’humeur et à des informations de presse, est plus efficace.

  5. Augmentation de la taille de la position cible. Lorsque le taux de victoire est élevé, il est possible d’obtenir des gains plus élevés en augmentant la position.

Résumer

La stratégie de progression de l’hypertrend est optimisée et améliorée par l’introduction de plusieurs filtres et indicateurs de confirmation, permettant de juger plus précisément les tendances du marché et d’améliorer la qualité des signaux. Par rapport à un seul indicateur, la stratégie offre un programme de négociation plus robuste, complet et efficace.

Code source de la stratégie
/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-07 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © JS_TechTrading

//@version=5
strategy("Supertrend advance", overlay=true,default_qty_type =strategy.percent_of_equity,default_qty_value = 1,process_orders_on_close = false)

// group string////
var string group_text000="Choose Strategy"
var string group_text0="Supertrend Settings"
var string group_text0000="Ema Settings"
var string group_text00="Rsi Settings"
var string group_text1="Backtest Period"
var string group_text2="Trade Direction"
var string group_text3="Quantity Settings"
var string group_text4="Sl/Tp Settings"
var string group_text5="Enable/Disable Condition Filter"
var string group_macd="Macd Set"
var group_cci="Cci Set"
var string group_text6="Choose Sl/Tp"
var string group_text7="Percentage Sl/Tp"
var string group_text9="Atr SL/Tp"
var string group_text8='Swing Hl & Supertrend Sl/Tp'


// filter enable and disbale
on_ma  =input.bool(true,"Ema Condition On/Off",group=group_text5,inline = "CL")
en_rsi = input.bool(true,"Rsi Condition On/Off",group = group_text5,inline = "CL")
en_macd=input.bool(true,title ="Enable Macd Condition",group =group_text5,inline = "CS")
en_cci=input.bool(true,title ="Enable/Disable CCi Filter",group =group_text5,inline = "CS")

////////////////////
option_ch=input.string('Pullback',title = "Type Of Stratgey",options =['Pullback','Simple'],group = "Choose Strategy Type")

// option for stop loss and take profit 
option_ts=input.string("Percentage","Chosse Type Of Sl/tp",["Percentage","Supertrend","Swinghl","Atr"],group=group_text6)
//atr period input supertrend 
atrPeriod = input(10, "ATR Length",group = group_text0)
factor = input.float(3.0, "Factor", step = 0.01,group=group_text0)

[supertrend, direction] = ta.supertrend(factor, atrPeriod)

bodyMiddle = plot((open + close) / 2, display=display.none)
upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr)
downTrend = plot(direction < 0? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr)

fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false)
fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false)

long=direction < 0 ? supertrend : na
short=direction < 0? na : supertrend

longpos=false
shortpos=false

longpos :=long?true :short?false:longpos[1]
shortpos:=short?true:long?false:shortpos[1]

fin_pullbuy= (ta.crossunder(low[1],long) and long and high>high[1])
fin_pullsell=(ta.crossover(high[1],short) and short and low<low[1]) 

//Ema 1

ma_len= input.int(200, minval=1, title="Ema Length",group = group_text0000)
ma_src = input.source(close, title="Ema Source",group = group_text0000)
ma_out = ta.ema(ma_src, ma_len)

ma_buy=on_ma?close>ma_out?true:false:true
ma_sell=on_ma?close<ma_out?true:false:true

// rsi indicator and condition
// Get user input
rsiSource = input(title='RSI Source', defval=close,group = group_text00)
rsiLength = input(title='RSI Length', defval=14,group = group_text00)
rsiOverbought = input(title='RSI BUY Level', defval=50,group = group_text00)
rsiOversold   = input(title='RSI SELL Level', defval=50,group = group_text00)

// Get RSI value
rsiValue = ta.rsi(rsiSource, rsiLength)

rsi_buy=en_rsi?rsiValue>=rsiOverbought ?true:false:true
rsi_sell=en_rsi?rsiValue<=rsiOversold?true:false:true


// Getting inputs macd

fast_length = input(title="Fast Length", defval=12,group =group_macd)
slow_length = input(title="Slow Length", defval=26,group =group_macd)
macd_src = input(title="Source", defval=close,group =group_macd)
signal_length = input.int(title="Signal Smoothing",  minval = 1, maxval = 50, defval = 9,group =group_macd)

[macdLine, signalLine, histLine] = ta.macd(macd_src, fast_length ,slow_length,signal_length)

buy_macd=en_macd?macdLine>0?true:false:true
sell_macd=en_macd?macdLine<0?true:false:true


// CCI indicator 
length_cci = input.int(20, minval=1,group = group_cci)
src_cci = input(hlc3, title="Source",group = group_cci)
cci_gr=input.int(200,title = "CCi > Input",group = group_cci,tooltip ="CCi iS Greater thn 100 buy")
cci_ls=input.int(-200,title = "CCi < -Input",group = group_cci,tooltip  ="CCi iS Less thn -100 Sell")

ma = ta.sma(src_cci, length_cci)
cci = (src_cci - ma) / (0.015 * ta.dev(src_cci, length_cci))

//cci buy and sell
buy_cci=en_cci?cci>cci_gr?true:false:true
sell_cci=en_cci?cci<cci_ls?true:false:true

// final condition
buy_cond=option_ch=='Simple'?long and not(longpos[1]) and rsi_buy and ma_buy and buy_macd and buy_cci:option_ch=='Pullback'?fin_pullbuy and rsi_buy and ma_buy and buy_macd and buy_cci:na
sell_cond=option_ch=='Simple'?short and not(shortpos[1]) and rsi_sell and ma_sell and sell_macd and sell_cci:option_ch=='Pullback'?fin_pullsell and rsi_sell and ma_sell and sell_macd and sell_cci:na

//backtest engine
start = input(timestamp('2005-01-01'), title='Start calculations from',group=group_text1)
end=input(timestamp('2045-03-01'), title='End calculations',group=group_text1)

time_cond = true

// Make input option to configure trade direction

tradeDirection = input.string(title='Trade Direction', options=['Long', 'Short', 'Both'], defval='Both',group = group_text2)

// Translate input into trading conditions
longOK  = (tradeDirection == "Long") or (tradeDirection == "Both")
shortOK = (tradeDirection == "Short") or (tradeDirection == "Both")

// quantity 
qty_new=input.float(1.0,step =0.10,title ="Quantity",group =group_text3)

// supertrend and swing high and low 

tpnewf = input.float(title="take profit swinghl||supertrend ", step=0.1, defval=1.5, group=group_text8)
hiLen = input.int(title='Highest High Lookback', defval=6, minval=2, group=group_text8)
loLen = input.int(title='Lowest Low Lookback', defval=6, minval=2, group=group_text8)


globl = option_ts=="Swinghl"? nz(ta.lowest(low, loLen),low[1]):option_ts=="Supertrend"?nz(supertrend,low[1]):na
globl2=option_ts=="Swinghl"? nz(ta.highest(high, hiLen),high[1]) :option_ts=="Supertrend"?nz(supertrend,high[1]):na

var store = float(na)
var store2=float(na)

// strategy start
if buy_cond and longOK and time_cond and strategy.position_size==0
    strategy.entry("enter long",direction = strategy.long,qty =qty_new)
    store:=globl

if sell_cond and shortOK and time_cond and strategy.position_size==0
    strategy.entry("enter short",direction =strategy.short,qty =qty_new)
    store2:=globl2


//stop loss and take profit 

enable_trail=input.bool(false,"Enable Trail",group =group_text7)
stopPer = input.float(1.0,step=0.10,title='Stop Loss %',group=group_text7)* 0.01
takePer = input.float(2.0,step=0.10, title='Take Profit %',group=group_text7)* 0.01

//TRAILING STOP CODE
trailStop = input.float(title='Trailing Stop (%)', minval=0.0, step=0.1, defval=1,group=group_text7) * 0.01


longStopPrice = 0.0
shortStopPrice = 0.0
longStopPrice := if strategy.position_size > 0
    stopValue = close * (1 - trailStop)
    math.max(stopValue, longStopPrice[1])
else
    0
shortStopPrice := if strategy.position_size < 0
    stopValue = close * (1 + trailStop)
    math.min(stopValue, shortStopPrice[1])
else
    999999

// Determine where you've entered and in what direction
longStop = 0.0
shortStop =0.0
shortTake =0.0
longTake = 0.0

if (option_ts=="Percentage" )
    // Determine where you've entered and in what direction
    longStop  := strategy.position_avg_price * (1 - stopPer)
    shortStop := strategy.position_avg_price * (1 + stopPer)
    shortTake := strategy.position_avg_price * (1 - takePer)
    longTake  := strategy.position_avg_price * (1 + takePer)
if enable_trail and (option_ts=="Percentage" )
    longStop  := longStopPrice
    shortStop := shortStopPrice
//single take profit exit position 

if strategy.position_size > 0 and option_ts=="Percentage"
    strategy.exit(id='Close Long',from_entry = "enter long", stop=longStop, limit=longTake)

if strategy.position_size < 0 and option_ts=="Percentage" 
    strategy.exit(id='Close Short',from_entry = "enter short", stop=shortStop, limit=shortTake)

//PLOT FIXED SLTP LINE
plot(strategy.position_size > 0 and option_ts=="Percentage" ? longStop : na, style=plot.style_linebr, color=enable_trail?na:color.new(#c0ff52, 0), linewidth=1, title='Long Fixed SL')
plot(strategy.position_size < 0 and option_ts=="Percentage"? shortStop : na, style=plot.style_linebr, color=enable_trail?na:color.new(#5269ff, 0), linewidth=1, title='Short Fixed SL')
plot(strategy.position_size  > 0 and option_ts=="Percentage"? longTake : na, style=plot.style_linebr, color=color.new(#5e6192, 0), linewidth=1, title='Long Take Profit')
plot(strategy.position_size < 0 and option_ts=="Percentage"? shortTake : na, style=plot.style_linebr, color=color.new(#dcb53d, 0), linewidth=1, title='Short Take Profit')


//PLOT TSL LINES
plot(series=strategy.position_size > 0 and option_ts=="Percentage" and enable_trail ? longStopPrice : na, color=color.new(color.red, 0), style=plot.style_linebr, linewidth=1, title='Long Trail Stop', offset=1)
plot(series=strategy.position_size < 0 and option_ts=="Percentage" and enable_trail ? shortStopPrice : na, color=color.new(color.red, 0), style=plot.style_linebr, linewidth=1, title='Short Trail Stop', offset=1)



// swing high and low 

//take profit
takeProfit_buy = strategy.position_avg_price - ((store - strategy.position_avg_price) * tpnewf)
takeProfit_sell = strategy.position_avg_price - ((store2  - strategy.position_avg_price) * tpnewf)


// Submit stops based on highest high and lowest low
if strategy.position_size >= 0 and (option_ts=="Swinghl" or option_ts=="Supertrend") 
    strategy.exit(id='XL HH',from_entry = "enter long", stop=store,limit=takeProfit_buy,comment ="Long Exit")

if strategy.position_size <= 0 and (option_ts=="Swinghl" or option_ts=="Supertrend") 
    strategy.exit(id='XS LL',from_entry = "enter short", stop=store2,limit=takeProfit_sell,comment = "Short Exit")


// plot take profit
plot(series=strategy.position_size < 0 and (option_ts=="Swinghl" or option_ts=="Supertrend")? takeProfit_sell : na, style=plot.style_circles, color=color.orange, linewidth=1, title="take profit sell")
plot(series=strategy.position_size > 0 and (option_ts=="Swinghl" or option_ts=="Supertrend")? takeProfit_buy: na, style=plot.style_circles, color=color.blue, linewidth=1, title="take profit buy")

// Plot stop Loss for visual confirmation
plot(series=strategy.position_size > 0 and (option_ts=="Swinghl" or option_ts=="Supertrend")? store : na, style=plot.style_circles, color=color.new(color.green, 0), linewidth=1, title='Lowest Low Stop')
plot(series=strategy.position_size < 0 and (option_ts=="Swinghl" or option_ts=="Supertrend")? store2 : na, style=plot.style_circles, color=color.new(color.red, 0), linewidth=1, title='Highest High Stop')

// atr 
enable_atrtrail=input.bool(false,"Enable Atr Trail",group = group_text9)
atrLength = input(title='ATR Length', defval=14,group =group_text9)
slATRMult = input.float(title='Stop loss ATR multiplier',step=0.1, defval=2.0,group =group_text9)
tpATRMult = input.float(title='Take profit multiplier',step=0.1, defval=1.5,group =group_text9)
lookback = input.int(title='How Far To Look Back For High/Lows', defval=7, minval=1,group =group_text9)


atr = ta.atr(atrLength)
lowestLow = ta.lowest(low, lookback)
highestHigh = ta.highest(high, lookback)
longStopa = (enable_atrtrail ? lowestLow : close) - atr * slATRMult
shortStopa = (enable_atrtrail ? highestHigh : close) + atr * slATRMult

atr_l=0.0
atr_s=0.0

atr_l:=nz(strategy.position_avg_price-(atr[1] * slATRMult),strategy.position_avg_price-(1 * slATRMult))
atr_s:=nz(strategy.position_avg_price+ (atr[1] * slATRMult),strategy.position_avg_price-(1 * slATRMult))

stoploss_l = ta.valuewhen(strategy.position_size != 0 and strategy.position_size[1] == 0,atr_l, 0) 
stoploss_s = ta.valuewhen(strategy.position_size != 0 and strategy.position_size[1] == 0,atr_s, 0)

takeprofit_l = strategy.position_avg_price - ((stoploss_l - strategy.position_avg_price) * tpATRMult)
takeprofit_s = strategy.position_avg_price - ((stoploss_s  - strategy.position_avg_price) * tpATRMult)

// Submit stops based on highest high and lowest low
if strategy.position_size > 0 and (option_ts=="Atr") 
    strategy.exit(id='Xl', stop= enable_atrtrail?longStopa:stoploss_l,limit=takeprofit_l ,comment ="Long Exit")

if strategy.position_size < 0 and (option_ts=="Atr")
    strategy.exit(id='XH', stop=enable_atrtrail?shortStopa:stoploss_s,limit=takeprofit_s,comment = "Short Exit")


// // plot take profit
plot(series=strategy.position_size > 0 and  (option_ts=="Atr")? takeprofit_l : na, style=plot.style_circles, color=color.orange, linewidth=1, title="take profit sell")
plot(series=strategy.position_size < 0 and  (option_ts=="Atr")? takeprofit_s: na, style=plot.style_circles, color=color.blue, linewidth=1, title="take profit buy")

// Plot stop Loss for visual confirmation
plot(series=strategy.position_size  >0 and (option_ts=="Atr") and not enable_atrtrail? stoploss_l : na, style=plot.style_circles, color=color.new(color.green, 0), linewidth=1, title='Lowest Low Stop')
plot(series=strategy.position_size < 0 and (option_ts=="Atr") and not enable_atrtrail? stoploss_s : na, style=plot.style_circles, color=color.new(color.red, 0), linewidth=1, title='Highest High Stop')

//PLOT TSL LINES
plot(series=strategy.position_size  >0 and option_ts=="Atr" and enable_atrtrail ? longStopa : na, color=color.new(color.green, 0), style=plot.style_linebr, linewidth=1, title='Long Trail Stop', offset=1)
plot(series=strategy.position_size < 0 and (option_ts=="Atr") and enable_atrtrail?  shortStopa : na, style=plot.style_linebr, color=color.new(color.red, 0), linewidth=1, title='short Trail Stop', offset=1)