La estrategia de base de supertrend es una estrategia de trading algorítmica confiable y rentable basada en tres indicadores fuertes: el indicador de supertrend (ATR), el índice de resistencia relativamente fuerte (RSI) y el índice de media móvil (EMA). La estrategia tiene como objetivo identificar la dirección y la fuerza de las tendencias del mercado, entrar en el mercado en el punto de entrada óptimo y salir del mercado cuando se alcanza el punto de parada o de pérdida.
La estrategia utiliza un indicador de tendencia súper para determinar si el precio está en una tendencia ascendente o descendente. El indicador de tendencia súper se basa en la amplitud real promedio y un factor que indica una tendencia ascendente cuando el precio es superior a la tendencia súper y una tendencia descendente cuando el precio es inferior a la tendencia súper.
El índice de fuerza relativa se utiliza para detectar si hay sobrecalentamiento y sobrecompra o sobreventa. Cuando el RSI está por encima de 50, es un mercado fuerte y, por el contrario, un mercado débil. El RSI puede filtrar brechas falsas.
Los promedios móviles indicativos se utilizan para determinar la dirección de la tendencia a largo plazo. Cuando el precio está por encima de la EMA, es una tendencia al alza, y cuando está por debajo, es una tendencia a la baja. Se puede utilizar para confirmar la dirección de la operación.
Las señales de negociación para esta estrategia son las siguientes:
Entrada múltiple: el precio es superior a la tendencia súper y el RSI es superior a 50 y el precio es superior a la EMA La salida de varios jefes: el cierre de los precios por debajo de la tendencia súper o el cierre o la parada
Entrada en blanco: se abre cuando el precio está por debajo de la tendencia súper y el RSI está por debajo de 50 y el precio está por debajo de la EMA
Salida en blanco: el precio se cierra por encima de la tendencia super o se detiene o se detiene
El Stop Loss y el Stop Stop se pueden establecer como porcentajes del precio de entrada.
La estrategia tiene las siguientes ventajas:
Utiliza una combinación de tres indicadores para determinar de manera fiable la dirección de la tendencia
El indicador de tendencia súper permite determinar con claridad las tendencias al alza y a la baja
El RSI puede filtrar brechas falsas para evitar sobrecompras y sobreventas
La EMA se puede utilizar para determinar la dirección de las grandes tendencias
Las señales de estrategia son simples, claras y fáciles de manejar.
Se pueden personalizar los ciclos ATR, los parámetros RSI y los ciclos EMA para optimización
Se puede configurar el Stop Loss Stop para controlar el riesgo
Solo puede hacer más o solo hacer menos para adaptarse a diferentes entornos de mercado
Se puede usar en cualquier ciclo de tiempo
Los principales riesgos de esta estrategia son los siguientes:
Los indicadores de supertrend se quedan rezagados y pueden causar pérdidas cuando la tendencia general se invierte
El parador de pérdidas ajustado es demasiado pequeño para capturar el mercado en general.
La EMA no puede determinar el punto de inflexión
No se puede juzgar la desviación.
Hay un cierto grado de riesgo de fluctuación y el riesgo de tiempo de negociación
Resolución de las mismas:
Combinado con otros indicadores, el cambio de tendencia
Optimización de los parámetros de la parada de pérdida
Combinado con otros indicadores, el cambio de tendencia
Combinado con el indicador de desviación
Ajuste adecuado de la gestión de posiciones
La estrategia se puede optimizar en los siguientes aspectos:
Optimización de los parámetros del ciclo ATR para equilibrar la sensibilidad y la estabilidad
Optimización de los parámetros del RSI para mejorar la precisión
Optimizar el ciclo de EMA para adaptarlo a los diferentes mercados
Adición de otros indicadores para juzgar la inversión, como MACD, KD, etc.
Aumento de la reversión de los juicios desviados de los indicadores
La inversión de juicio combinado con la teoría de la onda
Parámetros de optimización dinámica con algoritmos como el aprendizaje automático
La adición de algoritmos avanzados de parada de pérdidas, como el seguimiento de la parada, la parada móvil, etc.
Optimización de la gestión de posiciones para adaptarse a los mercados con diferentes tipos de volatilidad
Prueba de una combinación más compleja de condiciones de entrada y salida
La estrategia básica de supertrends integra las tres grandes indicadores de supertrends, RSI y EMA, formando una estrategia de seguimiento de tendencias sencilla y práctica. Identifica claramente la dirección de la tendencia, filtra los falsos señales y confirma la tendencia principal.
/*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')
//