Esta estrategia se basa en el indicador CCT Bollinger Band Oscillator (CCTBO) desarrollado por Steve Karnish.
La estrategia utiliza el precio alto como los datos de origen para calcular el valor de CCTBBO. El oscilador fluctúa entre -200 y 200, donde 0 representa el precio medio menos 2 desviaciones estándar y 100 es el precio medio más 2 desviaciones estándar. Las señales de negociación se generan cuando el oscilador cruza o cae por debajo de su línea EMA. Específicamente, cuando el oscilador cruza por encima de su línea EMA y la distancia entre ellos es mayor que el valor de margen establecido, se abre una posición larga. Cuando el oscilador cae por debajo de su línea EMA y la distancia es menor que el valor establecido negativo, se abre una posición corta. El tamaño del margen de posición se calcula de acuerdo con el porcentaje establecido. Además, la estrategia utiliza un stop loss basado en el cambio porcentual de precio o el número de movimientos de tick para salir de posiciones.
Gestión de riesgos:
La estrategia se puede optimizar en los siguientes aspectos:
En resumen, esta es una estrategia de negociación cuantitativa para identificar las reversiones de precios utilizando el indicador CCT Bollinger Band. Tiene ciertas ventajas pero también margen de mejora. Al optimizar parámetros, agregar filtros, usar ingeniería de características, introducir aprendizaje automático, etc., la estabilidad y rentabilidad de esta estrategia se pueden mejorar aún más.
/*backtest start: 2023-11-15 00:00:00 end: 2023-11-17 11:00:00 period: 45m basePeriod: 5m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 // This strategy is based on the CCT Bollinger Band Oscillator (CCTBO) // developed by Steve Karnish of Cedar Creek Trading and coded by LazyBear. // Indicator is available here https://www.tradingview.com/v/iA4XGCJW/ strategy("Strategy CCTBBO v2 | Fadior", shorttitle="Strategy CCTBBO v2", pyramiding=0, precision=2, calc_on_order_fills=false, initial_capital=1000, default_qty_type=strategy.percent_of_equity, currency="USD", default_qty_value=100, overlay=false) length_stddev=input(title="Stddev loopback period",defval=20) length_ema=input(title="EMA period", defval=2) margin=input(title="Margin", defval=0, type=float, step=0.1) price = input(title="Source", defval=high) digits= input(title="Number of digits",defval=2,step=1,minval=2,maxval=6) offset = input(title="Trailing offset (0.01 = 1%) :", defval=0.013, type=float, step=0.01) pips= input(title="Offset in ticks ?",defval=false,type=bool) src=request.security(syminfo.tickerid, "1440", price) cctbbo=100 * ( src + 2*stdev( src, length_stddev) - sma( src, length_stddev ) ) / ( 4 * stdev( src, length_stddev ) ) ul=hline(150, color=gray, editable=true) ll=hline(-50, color=gray) hline(50, color=gray) fill(ul,ll, color=green, transp=90) plot(style=line, series=cctbbo, color=blue, linewidth=2) plot(ema(cctbbo, length_ema), color=red) d = digits == 2 ? 100 : digits == 3 ? 1000 : digits == 4 ? 10000 : digits == 5 ? 100000 : digits == 6 ? 1000000 : na TS = 1 TO = pips ? offset : close*offset*d CQ = 100 TSP = TS TOP = (TO > 0) ? TO : na longCondition = crossover(cctbbo, ema(cctbbo, length_ema)) and cctbbo - ema(cctbbo, length_ema) > margin if (longCondition) strategy.entry("Long", strategy.long) strategy.exit("Close Long", "Long", qty_percent=CQ, trail_points=TSP, trail_offset=TOP) shortCondition = crossunder(cctbbo, ema(cctbbo, length_ema)) and cctbbo - ema(cctbbo, length_ema) < -margin if (shortCondition) strategy.entry("Short", strategy.short) strategy.exit("Close Short", "Short", qty_percent=CQ, trail_points=TSP, trail_offset=TOP)