
La estrategia es un sistema de comercio de seguimiento de tendencias adaptativo basado en el índice de medias móviles (EMA) y el indicador de dirección deslizante (SDI). Combina varios indicadores técnicos y herramientas de gestión de riesgos para capturar tendencias de mercado y controlar el riesgo. La estrategia utiliza cruces de EMAs rápidas y lentas y la dirección del SDI para determinar tendencias de mercado y, en consecuencia, generar señales de compra y venta.
El núcleo de la estrategia reside en su adaptabilidad y en su enfoque integral de gestión de riesgos. Mediante el uso de parámetros ajustables, como el ciclo EMA, la suavidad del SDI y los umbrales de gestión de riesgos, los comerciantes pueden optimizar la estrategia en función de las diferentes condiciones del mercado y las preferencias de riesgo personales. La configuración flexible del tamaño de la posición y el apalancamiento aumenta aún más la adaptabilidad de la estrategia, lo que la permite adaptarse a diferentes estilos de negociación y escalas de capital.
El índice se calcula de la siguiente manera:
Se generan señales de transacción:
Administración de posiciones:
Gestión de riesgos:
Filtrado por tiempo:
Capacidad de captura de tendencias: Combinación de EMA y SDI para identificar y seguir de manera efectiva las tendencias del mercado.
Adaptabilidad: adaptación a las diferentes condiciones del mercado mediante parámetros ajustables.
Gestión integral del riesgo: detener, detener y rastrear el deterioro integrado, controlar el riesgo en todos los aspectos.
Control de posición flexible: El uso del apalancamiento y la proporción de capital se puede ajustar a las diferentes preferencias de riesgo.
La retroalimentación es amigable: permite la retroalimentación de datos históricos, lo que facilita la optimización de la estrategia.
Neutralidad emocional: reduce el impacto emocional subjetivo basado en indicadores objetivos.
Multifuncionalidad: Se puede usar en diferentes períodos de tiempo y variedades de transacción.
Exceso de transacciones: En un mercado convulso puede producirse un incremento de las transacciones y los costos.
Retraso: Los EMA y SDI son indicadores retrasados y pueden reaccionar más lentamente cuando la tendencia se invierte.
Riesgo de falsa ruptura: puede ser un error de tendencia en las fluctuaciones a corto plazo, lo que puede conducir a transacciones erróneas.
Sensibilidad de parámetros: el rendimiento depende en gran medida de la configuración de los parámetros, y requiere una optimización continua.
Dependencia del entorno del mercado: puede tener un rendimiento bajo ciertas condiciones del mercado.
Riesgo de apalancamiento: el uso de un alto nivel de apalancamiento puede aumentar las pérdidas y debe usarse con precaución.
Dependencia tecnológica: depende de un entorno tecnológico estable, donde los fallos del sistema pueden causar pérdidas.
Ajuste de parámetros dinámicos: permite el ajuste de los parámetros EMA y SDI para adaptarse a las diferentes etapas del mercado.
Análisis de múltiples marcos de tiempo: integración de señales de varios períodos de tiempo para mejorar la precisión de las tendencias.
Filtrado de volatilidad: incorpora indicadores de volatilidad como el ATR y ajusta las reglas de negociación en períodos de alta volatilidad.
Identificación del estado del mercado: introducción de la clasificación del estado del mercado (trend/vibración), optimización de la lógica de negociación dirigida.
Optimización de la gestión de fondos: Realización de ajustes dinámicos de posiciones, ajuste automático del riesgo según la situación de pérdidas y ganancias de la cuenta.
Combinación de indicadores: Considere la inclusión de otros indicadores complementarios, como el RSI o el MACD, para mejorar la fiabilidad de la señal.
Integración de aprendizaje automático: introducción de algoritmos de aprendizaje automático para optimizar la selección de parámetros y la generación de señales.
La estrategia de seguimiento de tendencias de adaptación automática combinada con EMA y SDI muestra una fuerte capacidad de adaptación al mercado y gestión de riesgos. A través de la configuración de parámetros flexibles y las medidas de control de riesgos integrales, ofrece a los comerciantes un marco de comercio cuantitativo fiable.
Sin embargo, los operadores deben estar atentos a los riesgos potenciales, como el retraso y la sensibilidad de los parámetros inherentes a la estrategia. A través de la optimización y la mejora continuas, especialmente en lo que respecta al ajuste de parámetros dinámicos, el análisis de múltiples marcos de tiempo y la identificación del estado del mercado, se espera que la estrategia mejore aún más su rendimiento y estabilidad.
En general, esta estrategia ofrece una base sólida para el comercio cuantitativo, adecuado para los inversores que buscan una metodología de comercio sistemática y disciplinada. Al comprender en profundidad los principios de la estrategia y combinar un estilo de negociación individual, los comerciantes pueden utilizar esta herramienta de manera efectiva para aumentar su ventaja competitiva en los mercados financieros.
/*backtest
start: 2024-06-01 00:00:00
end: 2024-06-30 23:59:59
period: 1h
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/
// © erdas0
//@version=5
strategy("Strategy SEMA SDI Webhook", overlay=true, slippage = 1, commission_value = 0.035, default_qty_type=strategy.percent_of_equity, default_qty_value=50, initial_capital = 1000, calc_on_order_fills = true, process_orders_on_close = true)
// Start and end dates
dts=input(false,"",inline="dts")
dte=input(false,"",inline="dte")
start_date = input(timestamp("2023-01-01 00:00:00"), "Start Date",inline="dts")
end_date = input(timestamp("2124-01-01"), "End Date",inline="dte")
times = true
// Initial capital
leverage= input.int(10, "Leverage", minval=1,inline="qty") //Leverage Test
usdprcnt= input.int(50, "%", minval=1,inline="qty")
qty= input(false,"Inital USDT ◨",inline="qty")
initial_capital = qty ? (strategy.initial_capital+strategy.netprofit)/close*leverage*usdprcnt/100 : na
//Level Inputs
tpon=input(false,"TP ◨",group ="Take Profit/Stop Loss", inline="1")
sloc=input(true,"SL ◨",group ="Take Profit/Stop Loss", inline="1")
tron=input(true,"Trailing ◨",group ="Take Profit/Stop Loss", inline="1")
tp = tpon ? input.float(25, "Take Profit %", minval=0.1,step=0.1,group ="Take Profit/Stop Loss", inline="2") : na
sl = sloc ? input.float(4.8, "Stop Loss %", minval=0.1,step=0.1,group ="Take Profit/Stop Loss", inline="2") : na
tr = tron ? input.float(1.9, "Trailing Stop ", minval=0.1,step=0.1,group ="Take Profit/Stop Loss", inline="4") : na
// Take profit and stop loss levels
dir=strategy.position_size/math.abs(strategy.position_size) //Directions
newtrade=strategy.closedtrades>strategy.closedtrades[1]
pftpcnt=dir<0 ? (strategy.position_avg_price-low)/strategy.position_avg_price*100 : dir>0 ? (high-strategy.position_avg_price)/strategy.position_avg_price*100 : na //max profit
pftpr= (1 + pftpcnt*dir/100) * strategy.position_avg_price //Trailing Price
take_profit = (1 + tp*dir/100) * strategy.position_avg_price
stop_loss = (1 - sl*dir/100) * strategy.position_avg_price
var float maxpft=na //max profit percent
maxpft := newtrade ? 0 : strategy.openprofit > 0 ? math.max(pftpcnt,maxpft) : maxpft
var float Tr=na //Trailing
Tr := newtrade ? na : pftpcnt >= tr and maxpft-pftpcnt >= tr ? close : Tr
//Inputs
ocema=input(true, title='EMA ◨',group="Inputs",inline="2")
ocsd=input(true, title='SDI ◨',group="Inputs",inline="2")
ocsm=input(true, title='Smooth ◨',group="Inputs",inline="2")
lenf = input.int(58, "Fast Ema", minval=1,group ="Inputs", inline="3")
lens = input.int(70, "Slow Ema", minval=1,group ="Inputs", inline="3")
slen = input.int(3, "Smooth", minval=1,group ="Inputs", inline="4")
dilen = input.int(1, title="DI Length", minval=1,group ="SDI", inline="5")
sdi = input.int(6, title="DI Smooth", minval=1,group ="SDI", inline="5")
//EMA
emaf=ta.ema(close,lenf)
emas=ta.ema(close,lens)
semaf=ta.ema(emaf,slen)
semas=ta.ema(emas,slen)
//SDI
dirmov(len,smt) =>
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 = ta.ema(fixnan(100 * ta.rma(plusDM, len) / truerange),smt)
minus = ta.ema(fixnan(100 * ta.rma(minusDM, len) / truerange),smt)
[plus, minus]
[plus,minus]=dirmov(dilen,sdi)
pm=ta.ema(plus-minus,10)
sdcl= plus>minus ? color.new(color.green,80) :plus<minus ? color.new(color.red,80) : na
cpm= pm>pm[1] ? color.lime : pm<pm[1] ? color.red : color.yellow
barcolor(cpm,title="PM Color")
//Plot
plot(ocsm ? semaf:emaf,"Fast Ema",color=color.green)
plot(ocsm ? semas:semas,"Slow Ema",color=color.red)
// Conditions
Long = (ocsd ? plus>minus:true) and (ocema ? (ocsm ? semaf:emaf)>(ocsm ? semas:emas):true)
Short = (ocsd ? plus<minus:true) and (ocema ? (ocsm ? semaf:emaf)<(ocsm ? semas:emas):true)
// Strategy conditions
if Long and times
strategy.close("Short","Close S")
strategy.entry("Long", strategy.long, comment="L",qty = initial_capital)
if strategy.position_size>0
strategy.exit("Long LTP", "Long", limit=take_profit, stop=stop_loss, comment="LSL",comment_profit = "LTP")
if Tr and strategy.position_size>0
strategy.exit("Long LTP", "Long", limit=take_profit, stop=pftpr, comment="Tr",comment_profit = "LTP")
if Short and times
strategy.close("Long","Close L")
strategy.entry("Short", strategy.short, comment="S",qty = initial_capital)
if strategy.position_size<0
strategy.exit("Short STP", "Short", limit=take_profit, stop=stop_loss, comment="SSL",comment_profit ="STP" )
if Tr and strategy.position_size<0
strategy.exit("Short STP", "Short", limit=take_profit, stop=pftpr, comment="Tr",comment_profit = "STP")
if not times
strategy.close_all()