
El objetivo de esta estrategia es la estrategia de bajo riesgo de seguimiento de acciones en tendencia (o otros mercados en tendencia) para lograr una tasa de retiro mínima (por ejemplo, al momento de escribir este artículo, AAPL solo tiene una tasa de retiro de aproximadamente 1.36%, FB tiene una tasa de retiro de aproximadamente 1.93% y SPY tiene una tasa de retiro de 0.80%, todas las cuales se mantienen rentables).
La estrategia utiliza las medias móviles de 200 días, las bandas de Brin personalizadas y las medias móviles ponderadas de 52 ciclos del TSI y la intensidad del ADX.
Las señales de compra son: el precio de cierre es superior al promedio móvil de 200 días + el precio de cierre de la línea 5K es superior al de la banda de Brin personalizada superior + el TSI es positivo + el ADX es superior a 20 ◦
Debido a la retrospectiva, la estrategia solo se aplica a las acciones en tendencia, y se han eliminado algunas condiciones de venta / descubierto y solo se usan para realizar múltiples órdenes.
La ventaja de esta estrategia es la baja tasa de retiro, el mínimo riesgo y la operación de bajo riesgo para la mayoría de las acciones de tendencia. Según los datos de prueba, los beneficios son altos y solo AAPL tiene un retiro máximo del 1.36% y FB tiene un retiro máximo del 1.93% durante el período de retraso.
Utilizando una combinación de varios indicadores técnicos, como la banda de Brin, la línea media MA y el índice TSI, y configurando el ADX para determinar la tendencia fuerte o débil, compra al determinar la tendencia alcista e intenta aprovechar las oportunidades de ganancia en la línea media y larga de las acciones de tendencia. En comparación con el juicio de un solo indicador, la estrategia utiliza varios indicadores técnicos en conjunto, el juicio es más preciso y confiable, y el riesgo es menor.
La estrategia también incluye la estrategia de stop loss, la parada de pérdidas en el momento en que el índice TSI cambia de dirección, el bloqueo máximo de ganancias y el control efectivo del riesgo.
La estrategia tiene dos riesgos principales:
Riesgo de eventos inesperados. Algunos eventos de cigüeñas negras pueden causar una caída brusca en las acciones que no se puede detener.
Riesgo de fin de la tendencia. Cuando las acciones entran en la liquidación de la tendencia, puede producirse un retorno mayor.
Para el riesgo uno, se puede establecer un mecanismo de parada de pérdidas más estricto, o una parada de pérdidas por intervención humana. Para el riesgo dos, se puede combinar más factores de decisión para detectar el final de la tendencia, como el aumento de los indicadores de volumen de negocios, etc.
La estrategia también puede ser optimizada en los siguientes aspectos:
Aumentar las estrategias de stop loss, establecer puntos de stop loss más precisos y controlar mejor el riesgo.
Optimización de los parámetros de la línea media para probar la estabilidad de diferentes combinaciones de parámetros.
Aumentar los indicadores cuantitativos de los sistemas de evaluación para determinar con mayor precisión el comienzo y el final de las tendencias.
Prueba los parámetros de ciclo de tiempo más largos para operar con líneas más largas.
La estrategia utiliza el ADX para determinar la fuerza de la tendencia, el TSI para determinar la dirección de la tendencia, el breakout de la banda de Brin, el promedio móvil para determinar la tendencia a largo plazo, varios indicadores se verifican entre sí para determinar el momento de comprar. La estrategia de stop loss puede controlar el riesgo de manera efectiva.
/*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)