Estrategia de ajuste fino para el retroceso de la tendencia


Fecha de creación: 2023-10-13 15:49:29 Última modificación: 2023-10-13 15:49:29
Copiar: 0 Número de Visitas: 816
1
Seguir
1617
Seguidores

Descripción general

La estrategia tiene como objetivo capturar pequeñas reveses en la tendencia y abrir más posiciones al final de la reversión para obtener ganancias. Utiliza indicadores técnicos como la línea media EMA, el indicador MACD y el indicador RSI para determinar la tendencia y el momento de la terminación de la reversión, mientras que utiliza el indicador ATR para establecer el precio de parada de pérdida.

El principio

La estrategia primero calcula el EMA promedio, el MACD y el RSI para determinar la dirección y la intensidad de la tendencia actual.

Utiliza 3 líneas medias EMA (corto 21 ciclos, medio 50 ciclos, largo 200 ciclos) y se considera una tendencia alcista cuando la línea media corta atraviesa dos líneas medias largas.

El indicador MACD determina la intensidad de la tendencia, y considera que la tendencia alcista se fortalece cuando la línea MACD o la columna Histo cruzan el eje 0.

El indicador RSI determina si está sobrecalentado y sobrevendido, y la corrección puede terminar cuando el RSI cruza los 50.

El indicador de SuperTrend se utiliza para determinar el punto de retorno de compra específico. Cuando la SuperTrend se invierte de abajo hacia arriba, se genera una señal de compra.

Por último, se establece el precio de la parada de retiro y la parada de ganancias de acuerdo con el indicador ATR.

Las ventajas

  • El uso de una combinación de múltiples indicadores para el juicio hace que las señales de negociación sean más fiables.
  • La estrategia de la plataforma es capturar las oportunidades de corto plazo en la tendencia, con un alto índice de ganancia.
  • Configuración de mecanismos de prevención de daños para controlar el riesgo de manera efectiva.

El riesgo

  • El retorno a la normalidad es demasiado largo y puede aumentar las pérdidas.
  • La combinación de múltiples indicadores, la configuración de parámetros es más compleja y requiere pruebas y optimización repetidas.
  • La configuración de stop loss es demasiado flexible y las pérdidas pueden ampliarse.

Medidas de gestión de riesgos:

  • Optimización de los parámetros para asegurar el buen uso de los indicadores.
  • Ajuste adecuadamente el punto de parada para evitar pérdidas excesivas.
  • Evite las acciones que tardan demasiado en ser devueltas.

Dirección de optimización

  • Prueba diferentes combinaciones de parámetros para encontrar el valor de estado óptimo del indicador.
  • Ajuste el límite de pérdidas y pérdidas de las acciones en función de la fluctuación de las acciones durante el día.
  • Añadir indicadores de precio y cantidad para evitar la falta de capacidad.

Resumir

La estrategia utiliza un conjunto de indicadores técnicos para determinar tendencias y reajustes, con una gran fiabilidad. Con un estricto mecanismo de detención de pérdidas para controlar el riesgo, la reversión se elimina a tiempo. Basado en el ajuste continuo de los parámetros y el pozo de acciones, se puede obtener un mejor rendimiento.

Código Fuente de la Estrategia
/*backtest
start: 2022-10-06 00:00:00
end: 2023-10-12 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="pullb", overlay = true, initial_capital = 10000, default_qty_value = 100, default_qty_type = strategy.percent_of_equity)

//variables

///emas var
ema_src = input.source(close, "EMA Source")
ema_1 = input.int(21, 'EMA 1 len')
ema_2 = input(50, 'EMA 2 len')
ema_3 = input(200, 'EMA 3 len')

///macd var
mac_src = input.source(close, "MACD Source")
mac_1 = input.int(12, 'MACD Fast')
mac_2 = input.int(26, 'MACD Signal')
mac_3 = input.int(9, 'MACD Histogram')

///rsi var
rsi_src = input.source(close, "RSI Source")
rsi_len = input.int(14, 'RSI Len')

///stoch var
smoothK = input.int(3, "K", minval=1)
smoothD = input.int(3, "D", minval=1)
lengthRSI = input.int(14, "RSI Length", minval=1)
lengthStoch = input.int(14, "Stochastic Length", minval=1)
stoch_src = input(close, title="RSI Source Stoch")

//usage variables
ema_b = input.bool(true, "Use EMA Filter")
rsi_b = input.bool(true, "Use RSI Filter")
macd_b = input.bool(true, "Use MACD Filter")
//stoch_b = input(title="Use STOCH Filter", type=bool, defval=true)

//emaas
ema1 = ta.ema(ema_src, ema_1)
ema2 = ta.ema(ema_src, ema_2)
ema3 = ta.ema(ema_src, ema_3)

//macd
[macdLine, signalLine, histLine] = ta.macd(mac_src, mac_1, mac_2, mac_3)

//rsi
rsi = ta.rsi(rsi_src, rsi_len)

//stoch
rsi1 = ta.rsi(stoch_src, lengthRSI)
k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = ta.sma(k, smoothD)

//supertrend
Periods = input.int(14, "ATR Period")
src_st = input.source(close, "Supertrend Source")
Multiplier = input.float(2.0 , "ATR Multiplier")
changeATR= input.bool(true, "Change ATR Calculation Method ?")
showsignals = input.bool(true, "Show Buy/Sell Signals ?")
highlighting = input.bool(true, "Highlighter On/Off ?")
atr2 = ta.sma(ta.tr, Periods)
atr3= changeATR ? ta.atr(Periods) : atr2
up=src_st-(Multiplier*atr3)
up1 = nz(up[1],up)
up := close[1] > up1 ? math.max(up,up1) : up
dn=src_st+(Multiplier*atr3)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
buySignal = trend == 1 and trend[1] == -1
sellSignal = trend == -1 and trend[1] == 1

//conditions
///buy
rsi_cond_b = if rsi_b
    rsi >= 50
else 
    true

macd_cond_b = if macd_b
    (histLine >= 0 or histLine < histLine[1])
else
    true
ema_cond_b = if ema_b
    (ema1 > ema2 and ema2 > ema3)
else 
    true

look_for = input.int(5, "Bars from cross to signal")

stoch_signal_sum = 0
for i = 0 to (look_for)
    if k[i] > d[i] and k[i + 1] < d[i + 1] and (k[i + 1] < 20 and d[i + 1] < 20)
        stoch_signal_sum := stoch_signal_sum + 1
        
stoch_cond_b = if stoch_signal_sum > 0
    if k > 80 and d > 80
        false
    else
        true
else
    false


sup_cond_b = buySignal

buy_sig = (rsi_cond_b and macd_cond_b and ema_cond_b and stoch_cond_b and sup_cond_b)

tp_b = close + (ta.atr(14) * 3)
sl_b = close - (ta.atr(14) * 1.5)

if (buy_sig)
    strategy.entry("long", strategy.long)
    strategy.exit("exit", "long", stop = sl_b, limit = tp_b)
plot(tp_b)
plot(sl_b)