Groupe de suivi des tendances


Date de création: 2023-11-22 16:51:27 Dernière modification: 2023-11-22 16:51:27
Copier: 0 Nombre de clics: 678
1
Suivre
1621
Abonnés

Groupe de suivi des tendances

Aperçu

Le but de cette stratégie est de suivre des stratégies à faible risque pour les actions tendance (ou d’autres marchés tendance) afin d’obtenir un taux de rétractation minimal (par exemple, au moment de la rédaction de cet article, l’AAPL a un taux de rétractation d’environ 1,36% seulement, FB a un taux de rétractation d’environ 1,93% et SPY a un taux de rétractation de 0,80%, tout en restant rentable).

Principe de stratégie

La stratégie utilise les moyennes mobiles à 200 jours, les bandes de Bryn personnalisées et les moyennes mobiles pondérées à 52 cycles du TSI et de l’ADX.

Les signaux d’achat sont les suivants: la clôture est supérieure à la moyenne mobile à 200 jours + la clôture de la ligne 5K est supérieure à la bande de broyage personnalisée supérieure + la TSI est positive + l’ADX est supérieur à 20

Comme la rétroaction l’a prouvé, la stratégie ne s’applique qu’aux actions tendances, et certaines conditions de vente/découverture ont été supprimées, et seules les commandes multiples ont été utilisées.

Analyse des avantages

L’avantage de cette stratégie est un taux de rétractation faible, le risque est minime et convient aux opérations à faible risque pour la plupart des actions tendances. Selon les données de test, les rendements sont élevés et le retrait maximal est de 1,36% pour AAPL et 1,93% pour FB au cours de la période de retrait.

En combinant plusieurs indicateurs techniques tels que les bandes de Brin, la moyenne MA, l’indicateur TSI, et en définissant l’ADX pour juger de la force de la tendance et de la faiblesse de la tendance, en achetant lorsque la tendance est à la hausse, en essayant de saisir l’opportunité de gagner sur la ligne médiane et longue d’une action tendance. Comparé à un seul indicateur de jugement, cette stratégie utilise plusieurs indicateurs techniques, ce qui rend le jugement plus précis et plus fiable et moins risqué.

La stratégie comprend également une stratégie de stop loss, qui consiste à arrêter les pertes en temps opportun lorsque l’indicateur TSI change de direction, à maximiser le blocage des gains et à contrôler efficacement les risques.

Analyse des risques

La stratégie présente deux principaux risques:

  1. Le risque d’un événement soudain. Certains événements de Black Swan peuvent entraîner une chute spectaculaire de l’action et ne peuvent pas être arrêtés.

  2. Risque de fin de tendance. Les actions peuvent avoir un retrait plus important lorsqu’elles entrent en liquidation après la tendance.

Pour le risque I, il est possible de mettre en place un mécanisme d’arrêt des pertes plus strict, ou un arrêt des pertes d’intervention artificielle. Pour le risque II, il est possible de combiner plus de facteurs de jugement pour détecter la fin de la tendance, par exemple l’augmentation des indicateurs de volume de transactions.

Direction d’optimisation

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

  1. Augmenter les stratégies de stop loss, définir des points de stop loss plus précis et mieux contrôler les risques.

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

  3. Les systèmes de jugement tels que les indicateurs de quantité d’énergie augmentés permettent de déterminer plus précisément le début et la fin d’une tendance.

  4. Test des paramètres de plus longs cycles de temps, adaptés aux opérations sur des lignes plus longues.

Résumer

La stratégie utilise l’ADX pour déterminer la force de la tendance, l’indicateur TSI pour déterminer la direction de la tendance, la courbe de Brin pour déterminer la rupture, la moyenne mobile pour déterminer la tendance à long terme, plusieurs indicateurs se vérifient mutuellement pour déterminer le moment d’acheter. La stratégie de stop loss peut contrôler efficacement le risque.

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