Les échanges de titres et de titres ont été reportés.

Auteur:ChaoZhang est là., Date: 2023-11-22 16:51:27 Je suis désolé
Les étiquettes:

img

Résumé

L'idée de cette stratégie est d'être une stratégie à faible risque sur les actions en tendance (ou tout autre marché en tendance), visant à atteindre un tirage minimal (par exemple, au moment de la rédaction de cet article, AAPL n'avait que ~1,36% de tirage, FB ~1,93% de tirage et le SPY était de 0,80% de tirage et tous sont restés rentables).

Principe

La stratégie utilise la moyenne mobile de 200 jours, une bande de Bollinger personnalisée, un TSI avec une moyenne mobile pondérée sur 52 périodes et une force ADX.

Le signal d'achat est donné lorsque la négociation est supérieure à la moyenne mobile de 200 + 5 bougies ont fermé au-dessus de la moyenne Bollinger personnalisée supérieure + la TSI est positive + l'ADX est supérieur à 20.

Les avantages

Les avantages de cette stratégie sont un faible tirage et un risque minimal. Elle convient à la plupart des actions tendance avec une opération à faible risque. Selon les données du test, le rendement est élevé et AAPL n'a eu un tirage maximal de 1,36% et FB un tirage maximal de 1,93% au cours de la période de test.

En combinant plusieurs indicateurs techniques tels que les bandes de Bollinger, les lignes MA, les indicateurs TSI et en utilisant l'ADX pour déterminer la force de la tendance, il achète lorsque la tendance monte, en essayant de capturer le potentiel à la hausse à moyen et à long terme des actions tendance.

Il contient également une stratégie de stop-loss permettant de bloquer les bénéfices en arrêtant les pertes en temps opportun lorsque l'indicateur de la STI change de direction, ce qui permet de contrôler efficacement les risques.

Analyse des risques

Les principaux risques auxquels cette stratégie est confrontée sont les suivants:

  1. Risque d'événement cygne noir: certains événements cygne noir peuvent entraîner une chute brutale des actions et ne peuvent pas arrêter les pertes.

  2. Lorsque les actions passent d'une tendance à une consolidation, il peut y avoir de plus grandes baisses.

Pour le risque 1, des mécanismes de stop loss plus stricts peuvent être définis ou des arrêts d'intervention manuels peuvent être utilisés.

Directions d'optimisation

La stratégie peut également être optimisée dans les aspects suivants:

  1. Ajouter une stratégie de stop loss pour définir des points de stop loss plus précis afin de mieux contrôler les risques.

  2. Optimiser les paramètres de la moyenne mobile pour tester la stabilité des différentes combinaisons de paramètres.

  3. Augmenter les indicateurs de dynamique pour déterminer plus précisément le début et la fin des tendances.

  4. Tester les paramètres de cycle de temps plus longs pour les adapter aux opérations à plus long terme.

Conclusion

Cette stratégie détermine les opportunités d'achat en utilisant l'ADX pour déterminer la force de la tendance, les indicateurs TSI pour déterminer la direction de la tendance, les bandes de Bollinger pour déterminer les ruptures et les moyennes mobiles pour déterminer les tendances à long terme. La vérification de plusieurs indicateurs peut contrôler efficacement les risques. Cette stratégie convient au suivi à long terme des stocks tendance avec de faibles retraits et des rendements élevés.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-11-21 00:00:00
period: 1d
basePeriod: 1h
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/
// © gary_trades
//This script has been designed to be used on trending stocks as a low risk trade with minimal drawdown, utilising 200 Moving Average, Custom Bollinger Band, TSI with weighted moving average and ADX strength. 
//Backtest dates are set to 2010 - 2020 and all other filters (moving average, ADX, TSI , Bollinger Band) are not locked so they can be user amended if desired. 
//Buy signal is given when trading above the 200 moving average + 5 candles have closed above the upper custom Bollinger + the TSI is positive + ADX is above 20.
//As back testing proved that this traded better only in tends then some Sell/Short conditions have been removed and this focueses on  Long orders.
//Only requires 2 additional lines of code to add shorting orders.
//Close for either long or short trades is signaled once the TSI crosses in the opposite direction indicating change in trend strength or if stop loss is trggered.
//Further optimization could be achieved by adding a stop loss.
//NOTE: This only shows the lower indicators however for visualization you can use my script "CUSTOM BOLLINGER WITH SMA", which is the upper indicators in this stratergy.
//------------
//@version=4
strategy(shorttitle="Trend Chaser", title="ADX_TSI_Bol Band Trend Chaser", overlay=false, pyramiding=0,
 currency=currency.USD, default_qty_type=strategy.percent_of_equity, default_qty_value=10,
 initial_capital=10000, commission_value=0.1)
//------------
//Custom Bollinger Band
length = input(20, minval=1)
src = input(close, title="Source")
mult = input(0.382, minval=0.001, maxval=50, title="StdDev")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)
plot(basis, "Basis", color=color.gray, offset = offset, display=display.none)
p1 = plot(upper, "Upper", color=color.gray, offset = offset, display=display.none)
p2 = plot(lower, "Lower", color=color.gray, offset = offset, display=display.none)
fill(p1, p2, title = "Background", color=#787B86, transp=85)
//------------
//Moving Average
MAlen = input(200, minval=1, title="Length")
MAout = sma(src, MAlen)
plot(MAout, color=color.black, title="MA", offset=offset, linewidth=2, display=display.none)
//------------
//True Strength WMA
TSlong = input(title="Long Length", type=input.integer, defval=25)
TSshort = input(title="Short Length", type=input.integer, defval=13)
TSsignal = input(title="Signal Length", type=input.integer, defval=52)
double_smooth(src, TSlong, TSshort) =>
    fist_smooth = wma(src, TSlong)
    wma(fist_smooth, TSshort)
price = close     
pc = change(price)
double_smoothed_pc = double_smooth(pc, TSlong, TSshort)
double_smoothed_abs_pc = double_smooth(abs(pc), TSlong, TSshort)
tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)
tsi2 = wma(tsi_value, TSsignal)
plot(tsi_value, color=color.blue)
plot(wma(tsi_value, TSsignal), color=color.red)
hline(0, title="Zero")
//------------
//ADX
adxlen = input(13, title="ADX Smoothing")
dilen = input(13, title="DI Length")
keyLevel = input(20, title="Keylevel for ADX")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]

adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)

sig = adx(dilen, adxlen)

plot(sig, color=color.black, title="ADX", style=plot.style_histogram, transp=40)
plot(20, color=color.green, title="ADX Keyline", linewidth=1)
//------------
//Identify Triggers

//Back Test Range
start = timestamp("America/New_York", 2010, 1, 1, 9,30)
end = timestamp("America/New_York", 2030, 7, 1, 0, 0)

//Custom Bollinger Band
Long1 = close > upper[5] and close[5] > upper [6]
Short1 = close < lower[5] and close[5] < lower [6]

//Moving Average
Long2 = close >= MAout[1]
Short2 = close <= MAout[1]

//True Strength WMA
Long3 = tsi_value > tsi2  
Short3 = tsi_value < tsi2

//ADX
ADXkey = adx(dilen, adxlen) > 20 and adx(dilen, adxlen) < 100

//Buy
Buy = Long1 and Long2 and Long3 and ADXkey
CloseLong = crossunder(tsi_value,tsi2)

//Short
Sell = Short1 and Short2 and Short3 and ADXkey
CloseShort = crossover(tsi_value,tsi2)
//------------
//Entry and Exit
if time >= start and time <= end
    strategy.entry("Long", true, when = Buy)

strategy.close("Long", when = CloseLong)


Plus de