Esta estrategia utiliza las señales de cruce de la línea rápida y lenta del MACD, combinadas con juicios basados en múltiples otros indicadores, para capturar las señales de avance de la línea del índice promedio móvil de manera oportuna y tomar decisiones de compra o venta. Pertenece a una estrategia de negociación a corto plazo.
Utilice el cruce de la línea rápida y la línea lenta del MACD como la señal de negociación principal. Cuando la línea rápida cruce por encima de la línea lenta, tome una posición larga. Cuando la línea rápida cruce por debajo de la línea lenta, tome una posición corta.
Incorpore el indicador RSI para determinar las condiciones de sobrecompra y sobreventa.
Compara el precio de cierre actual con la línea SMA de un determinado período.
Calcular el nivel de 0.5 Fibonacci del valor más alto de un período determinado como la resistencia para largo.
Tome largo cuando la línea rápida cruza por encima y el precio está por debajo del soporte. Tome corto cuando la línea rápida cruza por debajo y el precio está por encima de la resistencia.
Adopte un mecanismo de stop loss de seguimiento. El stop loss se fija en un cierto porcentaje del precio de entrada inicialmente. Cuando la pérdida alcance un cierto nivel, cambie a un stop loss de seguimiento gradual.
La estrategia hace pleno uso de las señales de cruce MACD, que es una señal clásica y efectiva de comercio de indicadores técnicos.
Incorporar confirmaciones de múltiples indicadores como RSI y SMA puede filtrar señales falsas y mejorar la confiabilidad.
El cálculo de los niveles dinámicos de soporte y resistencia para el comercio de ruptura puede capturar tendencias más grandes.
El stop loss de seguimiento puede bloquear la mayoría de las ganancias mientras controla el riesgo.
La lógica de la estrategia es clara y simple, fácil de entender y dominar para los principiantes.
El indicador MACD tiene problemas rezagados y puede perder los puntos de entrada y salida óptimos.
La combinación de múltiples indicadores aumenta la complejidad y los riesgos de señales contradictorias.
Hay riesgos de rupturas incorrectas al calcular dinámicamente soporte y resistencia.
Las pérdidas de parada de seguimiento pueden salir prematuramente en tendencias fuertes, sin poder montar tendencias.
Los parámetros requieren pruebas y optimización repetitivas, los parámetros inadecuados afectan negativamente el rendimiento.
Prueba diferentes combinaciones de parámetros para optimizar los períodos MACD.
Introduzca más indicadores como las bandas de Bollinger, KDJ para el análisis multidimensional.
Incorporar más factores para juzgar la razonabilidad del apoyo y la resistencia.
Investigue mecanismos de stop loss más avanzados como paradas basadas en el tiempo o en la volatilidad.
Añadir un módulo de optimización automática para la optimización automática de parámetros.
Esta estrategia combina MACD, RSI, SMA y otros indicadores para capturar señales de avance promedio móvil de manera oportunista. Pertenece a las estrategias comerciales típicas de ruptura a corto plazo. Hay un cierto retraso en su generación de señales, pero la precisión se puede mejorar a través de la optimización de parámetros. En general, esta es una estrategia con lógica simple y clara, fácil de comprender para la mayoría, y vale la pena probar y optimizar más.
/*backtest start: 2023-11-05 00:00:00 end: 2023-11-09 23:00:00 period: 1m basePeriod: 1m 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/ // © onurenginogutcu //@version=4 strategy("R19 STRATEGY", overlay=true, calc_on_every_tick=true , margin_long=100, margin_short=100 , process_orders_on_close=true ) sym = input(title="Symbol", type=input.symbol, defval="BINANCE:BTCUSDT" , group = "SYMBOL") timeFrame = input(title="Strategy Decision Time Frame", type = input.resolution , defval="60") adxlen = input(14, title="ADX Smoothing" , group = "ADX") dilen = input(14, title="ADX DI Length", group = "ADX") adxemalenght = input(30, title="ADX EMA", group = "ADX") adxconstant = input(19, title="ADX CONSTANT", group = "ADX") fibvar = input (title = "Fibo Look Back Canles" , defval = 50 , minval = 0 , group = "FIBO MACD SMA") smaLookback = input (title = "SMA Look Back Candles" , defval = 30 , minval = 0 , group = "FIBO MACD SMA") MACDFast = input (title = "MACD Fast Lenght" , defval = 15 , minval = 0 , group = "FIBO MACD SMA") MACDSlow = input (title = "MACD Slow Lenght" , defval = 30 , minval = 0 , group = "FIBO MACD SMA") MACDSmooth = input (title = "MACD Signal Smoothing" , defval = 9 , minval = 0 , group = "FIBO MACD SMA") MACDLookback = input (title = "MACD Look Back Candles" , defval = 100 , minval = 0 , group = "FIBO MACD SMA") trailingStopLong = input (title = "Trailing Long Stop %" , defval = 2.0 , step = 0.1, group = "TP & SL") * 0.01 trailingStopShort = input (title = "Trailing Short Stop %" , defval = 2.0 , step = 0.1 , group = "TP & SL") * 0.01 LongTrailingProfitStart = input (title = "Long Profit Start %" , defval = 2.0 , step = 0.1 , group = "TP & SL") * 0.01 ShortTrailingProfitStart = input (title = "Short Profit Start %" , defval = 2.0 , step = 0.1, group = "TP & SL") * 0.01 lsl = input(title="Max Long Stop Loss (%)", minval=0.0, step=0.1, defval=3.0, group = "TP & SL") * 0.01 ssl = input(title="Max Short Stop Loss (%)", minval=0.0, step=0.1, defval=2.5, group = "TP & SL") * 0.01 longtp = input(title="Long Take Profit (%)", minval=0.0, step=0.1, defval=100, group = "TP & SL") * 0.01 shorttp = input(title="Short Take Profit (%)", minval=0.0, step=0.1, defval=100, group = "TP & SL") * 0.01 capperc = input(title="Capital Percentage to Invest (%)", minval=0.0, maxval=100, step=0.1, defval=95, group = "CAPITAL TO INVEST") * 0.01 symClose = security(sym, timeFrame, close) symHigh = security(sym, timeFrame, high) symLow = security(sym, timeFrame, low) atr = atr (14) /////////adx code dirmov(len) => up = change(symHigh) down = -change(symLow) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) truerange = rma(tr, len) plus = fixnan(100 * rma(plusDM, len) / truerange) minus = fixnan(100 * rma(minusDM, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) sig = adx(dilen, adxlen) emasig = ema (sig , adxemalenght ) ////////adx code over i = ema (symClose , MACDFast) - ema (symClose , MACDSlow) r = ema (i , MACDSmooth) sapust = highest (i , MACDLookback) * 0.729 sapalt = lowest (i , MACDLookback) * 0.729 simRSI = rsi (symClose , 50 ) fibtop = lowest (symLow , fibvar) + ((highest (symHigh , fibvar) - lowest (symLow , fibvar)) * 0.50) fibbottom = lowest (symLow , fibvar) + ((highest (symHigh , fibvar) - lowest (symLow , fibvar)) * 0.50) cond1 = 0 cond2 = 0 cond3 = 0 cond4 = 0 longCondition = crossover(i, r) and i < sapalt and sig > adxconstant and symClose < sma (symClose , smaLookback) and simRSI < sma (simRSI , 50) and symClose < fibbottom shortCondition = crossunder(i, r) and i > sapust and sig > adxconstant and symClose > sma (symClose , smaLookback) and simRSI > sma (simRSI , 50) and symClose > fibtop //////////////////////probability long/short if (crossover(i, r) and i < sapalt) cond1 := 35 else if (crossunder(i, r) and i > sapust) cond1 := -35 else cond1 := 0 if (symClose < sma (symClose , smaLookback)) cond2 := 30 else if (symClose > sma (symClose , smaLookback)) cond2 := -30 else cond2 := 0 if (simRSI < sma (simRSI , 50)) cond3 := 25 else if (simRSI > sma (simRSI , 50)) cond3 := -25 else cond3 := 0 if (symClose < fibbottom) cond4 := 10 else if (symClose > fibbottom) cond4 := -10 else cond4 := 0 probab = cond1 + cond2 + cond3 + cond4 //////////////////////////////////////////////////////////////// ///////////////////////////////////////////STRATEGY ENTRIES AND STOP LOSSES ///// var startTrail = 0 var trailingLongPrice = 0.0 var trailingShortPrice = 0.0 if (longCondition and strategy.position_size == 0) strategy.entry("Long", strategy.long , qty = capperc * strategy.equity / close ) if (shortCondition and strategy.position_size == 0) strategy.entry("Short" , strategy.short , qty = capperc * strategy.equity / close ) if (strategy.position_size == 0) trailingShortPrice := 0.0 trailingLongPrice := 0.0 startTrail := 0 /////////////////////////////////strategy exit if (strategy.position_size > 0 and close >= strategy.position_avg_price * (1 + LongTrailingProfitStart)) startTrail := 1 if (strategy.position_size < 0 and close <= strategy.position_avg_price * (1 - ShortTrailingProfitStart)) startTrail := -1 trailingLongPrice := if strategy.position_size > 0 and startTrail == 1 stopMeasure = close * (1 - trailingStopLong) max (stopMeasure , trailingLongPrice [1]) else if strategy.position_size > 0 and startTrail == 0 strategy.position_avg_price * (1 - lsl) trailingShortPrice := if strategy.position_size < 0 and startTrail == -1 stopMeasure = close * (1 + trailingStopShort) min (stopMeasure , trailingShortPrice [1]) else if strategy.position_size < 0 and startTrail == 0 strategy.position_avg_price * (1 + ssl) if (strategy.position_size > 0) strategy.exit("Exit Long", "Long", stop = trailingLongPrice , limit=strategy.position_avg_price*(1 + longtp)) if (strategy.position_size < 0) strategy.exit("Exit Short", "Short", stop = trailingShortPrice , limit=strategy.position_avg_price*(1 - shorttp)) ////////////////////////vertical colouring signals bgcolor(color=longCondition ? color.new (color.green , 70) : na) bgcolor(color=shortCondition ? color.new (color.red , 70) : na) plot (trailingLongPrice , color = color.green) ///long price trailing stop plot (trailingShortPrice , color = color.red) /// short price trailing stop plot (startTrail , color = color.yellow) plot (probab , color = color.white) ////probability