La estrategia utiliza un conjunto de indicadores técnicos para identificar la dirección de la tendencia y las zonas de sobreventa y sobrecompra para generar señales de negociación.
Los principales indicadores incluyen:
Indice de dirección promedio (ADX): determina la fuerza de la tendencia
Indicador relativamente débil (RSI): cómo juzgar el exceso de compra y venta
El promedio de pinceladas (SMA): para evaluar tendencias a corto plazo
Indicador SAR de extrema velocidad: cómo evaluar las tendencias a corto y largo plazo
Una brecha en el canal: una entrada a través de la tendencia
La lógica específica de la transacción:
El ADX considera que la tendencia existe y es lo suficientemente fuerte
El SAR considera que las tendencias a corto y largo plazo son coherentes
El RSI identifica las zonas de sobrecompra y sobreventa
Entrar cuando el precio rompe la línea media SMA
Entrar cuando el precio rompe el canal
La verificación mutua de varios indicadores mejora la precisión de los juicios, y las combinaciones de diferentes estrategias forman un sistema de comercio sistemático.
Combinación de múltiples indicadores para mejorar la calidad de la señal
La entrada en la universidad es sistemática, con diferentes combinaciones de estrategias.
El ADX identifica tendencias, el RSI juzga sobrecompras y sobreventas
SAR captura tendencias, SMA y canal hacen incursión
La configuración de múltiples parámetros requiere optimización de pruebas repetidas
Baja frecuencia de las condiciones combinadas
Los indicadores son difíciles de manejar cuando generan señales de conflicto.
La estrategia aprovecha al máximo las ventajas de los diferentes indicadores para construir un sistema de negociación sólido. Sin embargo, se deben establecer parámetros de optimización para garantizar una frecuencia de negociación razonable. En general, la estrategia combina la identificación de tendencias fuertes con una entrada eficiente.
/*backtest
start: 2023-09-12 00:00:00
end: 2023-09-13 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
// strategy("Combined Strategy", overlay=true, default_qty_value=100, initial_capital=1000, margin_long=0.1)
adxlen = input(7, title="ADX Smoothing")
dilen = input(7, title="DI Length")
dirmov(len) =>
up = ta.change(high)
down = -ta.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 = ta.rma(ta.tr, len)
plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
[plus, minus]
adx(dilen, adxlen) =>
[plus, minus] = dirmov(dilen)
sum = plus + minus
adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
// The same on Pine Script™
pine_supertrend(factor, atrPeriod) =>
src = hl2
atr = ta.atr(atrPeriod)
upperBand = src + factor * atr
lowerBand = src - factor * atr
prevLowerBand = nz(lowerBand[1])
prevUpperBand = nz(upperBand[1])
lowerBand := lowerBand > prevLowerBand or close[1] < prevLowerBand ? lowerBand : prevLowerBand
upperBand := upperBand < prevUpperBand or close[1] > prevUpperBand ? upperBand : prevUpperBand
int direction = na
float superTrend = na
prevSuperTrend = superTrend[1]
if na(atr[1]) and ta.rsi(close, 21) < 66 and ta.rsi(close,3) > 80 and ta.rsi(close, 28) > 49 and sig > 20
direction := 1
else if prevSuperTrend == prevUpperBand
direction := close > upperBand ? -1 : 1
else
direction := close < lowerBand ? 1 : -1
superTrend := direction == -1 ? lowerBand : upperBand
[superTrend, direction]
[pineSupertrend, pineDirection] = pine_supertrend(3, 10)
upTrend = pineDirection < 0
downTrend = pineDirection > 0
// Define the 20-period SMA
sma20 = ta.sma(close, 20)
a = ta.rsi(close,14)
OB = input(70)
OS = input(30)
os = a > OB
ob = a < OS
if upTrend and close > pineSupertrend and close > sma20 and os
strategy.entry("Buy", strategy.long)
if ta.crossunder(close, sma20) or ob
strategy.close_all()
//define when to breakout of channel
//("ChannelBreakOutStrategy", overlay=true)
length = input.int(title="Length", minval=1, maxval=1000, defval=5)
upBound = ta.highest(high, length)
downBound = ta.lowest(low, length)
if (not na(close[length]))
strategy.entry("ChBrkLE", strategy.long, stop=upBound + syminfo.mintick, comment="ChBrkLE")
strategy.entry("ChBrkSE", strategy.short, stop=downBound - syminfo.mintick, comment="ChBrkSE")