Estrategia básica de SuperTrend

El autor:¿ Qué pasa?, Fecha: 2023-10-11 15:14:54
Las etiquetas:

Resumen general

La estrategia básica de SuperTrend es una estrategia de trading algorítmica confiable y rentable basada en tres poderosos indicadores: SuperTrend (ATR), RSI y EMA. Su objetivo es identificar la dirección y la fuerza de las tendencias del mercado, entrar en el mercado en los puntos óptimos y salir cuando se alcanza el stop loss o take profit.

Estrategia lógica

La estrategia utiliza el indicador SuperTrend para determinar si el precio está en una tendencia alcista o bajista.

El RSI se utiliza para detectar condiciones de sobrecompra / sobreventa. Por encima de 50 es alcista y por debajo de 50 bajista. El RSI filtra señales falsas.

La EMA juzga la dirección de la tendencia a largo plazo. Por encima de la EMA es tendencia alcista, por debajo es tendencia bajista.

Las señales comerciales son:

Entrada larga: Precio por encima de SuperTrend y RSI por encima de 50 y Precio por encima de EMA Salida larga: el precio cierra por debajo de SuperTrend o Stop loss o Take profit

Entrada corta: Precio por debajo de SuperTrend y RSI por debajo de 50 y Precio por debajo de EMA Salida corta: el precio cierra por encima de SuperTrend o Stop loss o Take profit

El stop loss y el take profit se pueden establecer como porcentaje del precio de entrada.

Análisis de ventajas

Las ventajas de esta estrategia:

  1. Combinación de 3 indicadores, detección fiable de tendencias

  2. SuperTrend identifica claramente la tendencia alcista y la tendencia bajista

  3. El RSI filtra las falsas rupturas, evita las sobrecompras/sobreventas

  4. El EMA confirma la dirección general de la tendencia

  5. Señales comerciales simples y claras, fáciles de seguir

  6. Período ATR personalizable, parámetros RSI y período EMA para la optimización

  7. Detener pérdidas y obtener ganancias para controlar el riesgo

  8. Solo modo largo o sólo modo corto para diferentes mercados

  9. Aplicable a cualquier período de tiempo

Análisis de riesgos

Los principales riesgos:

  1. El retraso de SuperTrend en la inversión de tendencia, puede causar pérdidas

  2. Las pequeñas pérdidas de detención/beneficio no alcanzan los grandes movimientos

  3. La EMA no puede detectar puntos de reversión de tendencia

  4. No se detecta ninguna divergencia

  5. Todavía tiene riesgo de volatilidad y riesgo de tiempo

Soluciones:

  1. Añadir otros indicadores para detectar la inversión

  2. Optimizar el stop loss/take profit

  3. Añadir otros indicadores a la inversión al contado

  4. Incorporar indicadores de divergencia

  5. Ajustar el tamaño de la posición

Direcciones de optimización

Formas de optimizar la estrategia:

  1. Optimizar el período de ATR para la sensibilidad y la estabilidad

  2. Optimizar los parámetros de RSI para una mayor precisión

  3. Optimizar el período de EMA para diferentes mercados

  4. Añadir indicadores como MACD, KD para la detección de reversión

  5. Añadir indicadores de divergencia

  6. Utilice las ondas de Elliott para detectar inversiones

  7. Utilice el aprendizaje automático para optimizar dinámicamente los parámetros

  8. Algoritmos avanzados de stop loss como el stop loss de seguimiento

  9. Optimizar el tamaño de las posiciones para diferentes volatilidades

  10. Prueba de condiciones de entrada y salida más complejas

Conclusión

La estrategia básica de SuperTrend integra SuperTrend, RSI y EMA en un sistema de seguimiento de tendencias simple y práctico. Identifica claramente la dirección de la tendencia, filtra señales falsas y confirma la tendencia general. Reglas de entrada, salida y configuración de stop loss / take profit. Fácil de usar, rentabilidad confiable. Aplicable a cualquier marco de tiempo. Se puede optimizar aún más ajustando los parámetros, agregando herramientas de reversión, mejorando las paradas para convertirse en un sistema de negociación más poderoso.


/*backtest
start: 2023-09-10 00:00:00
end: 2023-10-10 00:00:00
period: 2h
basePeriod: 15m
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/
// © JS_TechTrading

//@version=5
// strategy("Supertrend", overlay=true,default_qty_type =strategy.percent_of_equity,default_qty_value = 1,process_orders_on_close = false)

// group string////
var string group_text000="Choose Strategy"
var string group_text0="Supertrend Settings"
var string group_text0000="Ema Settings"
var string group_text00="Rsi Settings"
var string group_text1="Backtest Period"
var string group_text2="Trade Direction"
// var string group_text3="Quantity Settings"
var string group_text4="Sl/Tp Settings"
////////////////////
option_ch=input.string('Pullback',title = "Type Of Strategy",options =['Pullback','Simple'])

//atr period input supertrend 
atrPeriod = input(10, "ATR Length",group = group_text0)
factor = input.float(3.0, "Factor", step = 0.01,group=group_text0)

[supertrend, direction] = ta.supertrend(factor, atrPeriod)

bodyMiddle = plot((open + close) / 2, display=display.none)
upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr)
downTrend = plot(direction < 0? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr)

fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false)
fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false)

long=direction < 0 ? supertrend : na
short=direction < 0? na : supertrend

longpos=false
shortpos=false

longpos :=long?true :short?false:longpos[1]
shortpos:=short?true:long?false:shortpos[1]

fin_pullbuy= (ta.crossunder(low[1],long) and long and high>high[1])
fin_pullsell=(ta.crossover(high[1],short) and short and low<low[1]) 

//Ema 1
on_ma=input.bool(true,"Ema Condition On/Off",group=group_text0000)
ma_len= input.int(200, minval=1, title="Ema Length",group = group_text0000)
ma_src = input.source(close, title="Ema Source",group = group_text0000)
ma_out = ta.ema(ma_src, ma_len)

ma_buy=on_ma?close>ma_out?true:false:true
ma_sell=on_ma?close<ma_out?true:false:true

// rsi indicator and condition
// Get user input
en_rsi    = input.bool(true,"Rsi Condition On/Off",group = group_text00)
rsiSource = input(title='RSI Source', defval=close,group = group_text00)
rsiLength = input(title='RSI Length', defval=14,group = group_text00)
rsiOverbought = input(title='RSI BUY Level', defval=50,group = group_text00)
rsiOversold   = input(title='RSI SELL Level', defval=50,group = group_text00)

// Get RSI value
rsiValue = ta.rsi(rsiSource, rsiLength)

rsi_buy=en_rsi?rsiValue>=rsiOverbought ?true:false:true
rsi_sell=en_rsi?rsiValue<=rsiOversold?true:false:true

// final condition
buy_cond=option_ch=='Simple'?long and not(longpos[1]) and rsi_buy and ma_buy:option_ch=='Pullback'?fin_pullbuy and rsi_buy and ma_buy:na
sell_cond=option_ch=='Simple'?short and not(shortpos[1]) and rsi_sell and ma_sell:option_ch=='Pullback'?fin_pullsell and rsi_sell and ma_sell:na

//backtest engine
start = input(timestamp('2005-01-01'), title='Start calculations from',group=group_text1)
end=input(timestamp('2045-03-01'), title='End calculations',group=group_text1)
time_cond =true

// Make input option to configure trade direction

tradeDirection = input.string(title='Trade Direction', options=['Long', 'Short', 'Both'], defval='Both',group = group_text2)

// Translate input into trading conditions
longOK  = (tradeDirection == "Long") or (tradeDirection == "Both")
shortOK = (tradeDirection == "Short") or (tradeDirection == "Both")



// strategy start
if buy_cond and longOK and time_cond and strategy.position_size==0
    strategy.entry('long',direction = strategy.long)
if sell_cond and shortOK and time_cond and strategy.position_size==0
    strategy.entry('short',direction =strategy.short)

// fixed percentage based stop loss and take profit 

// User Options to Change Inputs (%)
stopPer = input.float(1.0,step=0.10, title='Stop Loss %',group =group_text4) / 100
takePer = input.float(1.0,step =0.10, title='Take Profit %',group =group_text4) / 100

// Determine where you've entered and in what direction
longStop  = strategy.position_avg_price * (1 - stopPer)
shortStop = strategy.position_avg_price * (1 + stopPer)
shortTake = strategy.position_avg_price * (1 - takePer)
longTake  = strategy.position_avg_price * (1 + takePer)


if strategy.position_size > 0
    strategy.exit(id='Close Long',stop=longStop, limit=longTake)
if strategy.position_size < 0
    strategy.exit(id='Close Short',stop=shortStop, limit=shortTake)

//PLOT FIXED SLTP LINE
plot(strategy.position_size > 0 ? longStop : na, style=plot.style_linebr, color=color.new(color.red, 0), linewidth=1, title='Long Fixed SL')
plot(strategy.position_size < 0 ? shortStop :na, style=plot.style_linebr, color=color.new(color.red, 0), linewidth=1, title='Short Fixed SL')
plot(strategy.position_size > 0 ? longTake : na, style=plot.style_linebr, color=color.new(color.green, 0), linewidth=1, title='Long Take Profit')
plot(strategy.position_size < 0 ? shortTake : na, style=plot.style_linebr, color=color.new(color.green, 0), linewidth=1, title='Short Take Profit')

//

Más.