Hein Ashu et la stratégie des super tendances


Date de création: 2023-11-02 16:15:18 Dernière modification: 2023-11-02 16:15:18
Copier: 1 Nombre de clics: 1217
1
Suivre
1621
Abonnés

Hein Ashu et la stratégie des super tendances

Aperçu

Une stratégie de suivi de tendance combinant un graphique de Haines et un indicateur de tendance est une stratégie de suivi de tendance qui combine un graphique de Haines et un indicateur de tendance. Cette stratégie vise à identifier la direction de la tendance, à négocier dans une zone de tendance et à se retirer rapidement en cas de revers de tendance, afin de minimiser les pertes causées par les transactions non tendance.

Principe de stratégie

Le diagramme de la tendance de Heinrich Heine est un diagramme de ligne K spécial qui utilise la moyenne des prix d’ouverture, de fermeture, des prix les plus élevés et des prix les plus bas pour tracer l’entité de la tendance, ce qui permet de filtrer le bruit du marché et de rendre le graphique plus clair. L’indicateur de tendance super est composé de deux courbes, qui déterminent la direction de la tendance à travers des lignes de soutien et de résistance dynamiques.

Cette stratégie commence par calculer le diagramme de l’hypoténuse d’Hain, puis calcule l’indicateur de super-tendance sur la base de la ligne K de l’hypoténuse d’Hain. Elle génère un signal de transaction lorsque le prix franchit l’indicateur de la super-tendance. Plus précisément, la stratégie utilise la ligne K de l’hypoténuse d’Hain pour calculer l’amplitude d’onde réelle, puis la combinaison de l’amplitude d’onde et du prix moyen permet d’obtenir la trajectoire ascendante et descendante de la super-tendance.

La stratégie a également optimisé les paramètres de l’indicateur de super-tendance, en utilisant la meilleure combinaison de paramètres, ce qui améliore la sensibilité de l’indicateur. En outre, la stratégie intègre un mécanisme de stop-loss qui permet de contrôler les risques tout en garantissant les bénéfices.

Analyse des avantages

  • Les cartes de Haine-et-Thierry permettent de filtrer le bruit et d’améliorer la clarté du signal.
  • L’indicateur de super-tendance peut rapidement capturer les changements de tendance et envoyer des signaux de négociation en temps opportun.
  • L’optimisation des paramètres améliore la fiabilité des indicateurs.
  • Le système d’arrêt de dommages intégré permet de contrôler efficacement les risques.
  • Le système de suivi des tendances et le système de négociation mécanique sont associés à un degré élevé d’automatisation.

Analyse des risques

  • Le système de négociation est hautement automatisé et doit être surveillé de près pour éviter toute anomalie.
  • Bien qu’il soit capable de filtrer le bruit, le schéma de Haine-et-Thiourne peut également passer à côté d’un très petit signal de retour.
  • L’indicateur de super-tendance peut générer des signaux erronés, entraînant une entrée ou un arrêt prématurés.
  • Une mauvaise configuration du point d’arrêt peut également entraîner des pertes inutiles.
  • Les données de rétrospective insuffisantes peuvent entraîner une surcompatibilité. Les résultats de la rétrospective peuvent être très éloignés de ceux du disque dur.

Direction d’optimisation

  • Test d’autres combinaisons de paramètres afin d’optimiser encore plus l’indicateur de super-tendance
  • Essayez d’autres indicateurs pour confirmer le signal de l’indicateur de super-tendance et réduire le taux de signal erroné.
  • Optimiser les stratégies de stop loss pour réduire les pertes inutiles tout en garantissant des bénéfices.
  • Augmentation de la capacité des algorithmes d’apprentissage automatique à détecter les tendances réelles à l’aide de la formation au Big Data.
  • Les données historiques sur les marchés les plus variés et les périodes de temps les plus longues sont utilisées pour la retrospective, ce qui améliore la fiabilité.

Résumer

La stratégie d’hypertrend est une stratégie de suivi de la tendance. Elle permet d’identifier la direction de la tendance, de négocier sous la grande tendance et de s’arrêter rapidement lors d’un renversement. La stratégie intègre le filtrage du bruit du diagramme d’hypertrend et la capacité de l’indicateur de super-tendance à capturer rapidement les changements de tendance.

Code source de la stratégie
/*backtest
start: 2022-10-26 00:00:00
end: 2023-11-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5

strategy("Heiken Ashi & Super Trend_ARM", overlay=true,  pyramiding=1,initial_capital = 10000, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.02)

///////////////////////////////////////////////////
////////////////////Function///////////////////////
///////////////////////////////////////////////////


heikinashi_open = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, open)
heikinashi_high = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, high)
heikinashi_low  = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, low)
heikinashi_close= request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close)
heikinashi_color = heikinashi_open < heikinashi_close ? #53b987 : #eb4d5c
// plotbar(heikinashi_open, heikinashi_high, heikinashi_low, heikinashi_close, color=heikinashi_color)

x_sma(x, y) =>
    sumx = 0.0
    for i = 0 to y - 1
        sumx := sumx + x[i] / y
    sumx

x_rma(src, length) =>
	alpha = 1/length
	sum = 0.0
	sum := na(sum[1]) ? x_sma(src, length) : alpha * src + (1 - alpha) * nz(sum[1])

x_atr(length) =>
    trueRange = na(heikinashi_high[1])? heikinashi_high-heikinashi_low : math.max(math.max(heikinashi_high - heikinashi_low, math.abs(heikinashi_high - heikinashi_close[1])), math.abs(heikinashi_low - heikinashi_close[1]))
    //true range can be also calculated with ta.tr(true)
    x_rma(trueRange, length)

x_supertrend(factor, atrPeriod) =>
	src = (heikinashi_high+heikinashi_low)/2
	atr = x_atr(atrPeriod)
	upperBand = src + factor * atr
	lowerBand = src - factor * atr
	prevLowerBand = nz(lowerBand[1])
	prevUpperBand = nz(upperBand[1])

	lowerBand := lowerBand > prevLowerBand or heikinashi_close[1] < prevLowerBand ? lowerBand : prevLowerBand
	upperBand := upperBand < prevUpperBand or heikinashi_close[1] > prevUpperBand ? upperBand : prevUpperBand
	int direction = na
	float superTrend = na
	prevSuperTrend = superTrend[1]
	if na(atr[1])
		direction := 1
	else if prevSuperTrend == prevUpperBand
		direction := heikinashi_close > upperBand ? -1 : 1
	else
		direction := heikinashi_close < lowerBand ? 1 : -1
	superTrend := direction == -1 ? lowerBand : upperBand
	[superTrend, direction]
	

///////////////////////////////////////////////////
////////////////////Indicators/////////////////////
///////////////////////////////////////////////////

factor = input.float(3.0, "Factor", step = 0.01)
atrPeriod = input(10, "ATR Length")


[supertrend, direction] = x_supertrend(factor, atrPeriod)

bodyMiddle = plot((heikinashi_open + heikinashi_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)

///////////////////////////////////////////////////
////////////////////Strategy///////////////////////
///////////////////////////////////////////////////

var bool longCond                    = na, var bool shortCond                   = na, longCond := nz(longCond[1]), shortCond := nz(shortCond[1])
var int CondIni_long                 = 0, var int CondIni_short                 = 0, CondIni_long := nz(CondIni_long[1]), CondIni_short := nz(CondIni_short[1])
var float open_longCondition         = na, var float open_shortCondition   = na


long  = ta.change(direction) < 0
short = ta.change(direction) > 0


longCond        :=                                                              long
shortCond       :=                                                              short

CondIni_long    :=                                                              longCond[1] ? 1 : shortCond[1] ? -1 : nz(CondIni_long[1])
CondIni_short   :=                                                              longCond[1] ? 1 : shortCond[1] ? -1 : nz(CondIni_short[1])
longCondition   =                                                               (longCond[1] and nz(CondIni_long[1]) == -1)
shortCondition  =                                                               (shortCond[1] and nz(CondIni_short[1]) == 1)


open_longCondition             :=                                          long ? close[1] :                                                      nz(open_longCondition[1])
open_shortCondition            :=                                          short ? close[1] :                                                     nz(open_shortCondition[1])


//TP
tp                    = input.float(1.1  , "TP [%]",                      step = 0.1) 

//BACKTESTING inputs --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

testStartYear       =                   input.int(2000,                             title="start year",                                         minval = 1997, maxval = 3000,                                                   group= "BACKTEST") 
testStartMonth      =                   input.int(01,                               title="start month",                                        minval = 1, maxval = 12,                                                        group= "BACKTEST")
testStartDay        =                   input.int(01,                               title="start day",                                          minval = 1, maxval = 31,                                                        group= "BACKTEST")
testPeriodStart     =                   timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear        =                   input.int(3333,                             title="stop year",                                          minval=1980, maxval = 3333,                                                     group= "BACKTEST")
testStopMonth       =                   input.int(12,                               title="stop month",                                         minval=1, maxval=12,                                                            group= "BACKTEST")
testStopDay         =                   input.int(31,                               title="stop day",                                           minval=1, maxval=31,                                                            group= "BACKTEST")
testPeriodStop      =                   timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)
testPeriod          =                   time >= testPeriodStart and time <= testPeriodStop ? true : false

// Backtest  ==================================================================================================================================================================================================================================================================================================================================


if longCond
    strategy.entry("L", strategy.long, when=testPeriod)

if shortCond
    strategy.entry("S", strategy.short, when=testPeriod)
    

strategy.exit("TP_L", "L", profit =((open_longCondition   *       (1+(tp/100))) - open_longCondition)/syminfo.mintick)

strategy.exit("TP_S", "S", profit =((open_shortCondition  *       (1+(tp/100))) - open_shortCondition)/syminfo.mintick)