Esta estrategia se llama MACD Robot Trading Strategy. Determina el momento de compra y venta en el mercado mediante el cálculo de la relación entre la línea rápida y la línea lenta del indicador MACD, y adopta el stop loss para controlar los riesgos.
Esta estrategia se desarrolla principalmente sobre la base del indicador MACD. El indicador MACD consiste en una línea rápida y una línea lenta. La línea rápida es un promedio móvil a corto plazo y la línea lenta es un promedio móvil a largo plazo. La relación entre los dos refleja el estado de compra y venta en el mercado. Cuando la línea rápida cruza por encima de la línea lenta, es una señal de compra, y cuando cruza por debajo, es una señal de venta.
En esta estrategia, la línea rápida y la línea lenta se calculan utilizando el algoritmo EMA respectivamente, y los períodos se pueden personalizar.
Al determinar el momento de comprar, compruebe no solo la cruz de oro de líneas rápidas y lentas, sino también si el valor absoluto del MACD es mayor que la línea de compra personalizada.
Cuando se determina el momento de la venta, se requiere que se cumpla al mismo tiempo la cruz de muerte de líneas rápidas y lentas y que la línea de señal sea positiva, luego se emite una señal de venta para cerrar la posición.
La estrategia tiene las siguientes ventajas:
La estrategia también tiene algunos riesgos:
Estos riesgos pueden reducirse ajustando adecuadamente los parámetros, combinando otros indicadores, etc.
La estrategia se puede optimizar en las siguientes direcciones:
En general, esta es una estrategia de seguimiento de tendencias con alta confiabilidad. Al juzgar la tendencia a través del indicador MACD y controlar los riesgos con stop loss, se pueden obtener retornos estables de la inversión.
/*backtest start: 2022-12-11 00:00:00 end: 2023-12-17 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy(shorttitle = "GBPUSD MACD", title = "GBPUSD MACD") fastMA = input(title="Fast moving average", defval = 12, minval = 7) slowMA = input(title="Slow moving average", defval = 26, minval = 7) lastColor = yellow [currMacd,_,_] = macd(close[0], fastMA, slowMA, 9) [prevMacd,_,_] = macd(close[1], fastMA, slowMA, 9) plotColor = currMacd > 0 ? currMacd > prevMacd ? lime : green : currMacd < prevMacd ? maroon : red plot(currMacd, style = histogram, color = plotColor, linewidth = 3) plot(0, title = "Zero line", linewidth = 1, color = gray) //MACD // Getting inputs fast_length = input(title="Fast Length", defval=12) slow_length = input(title="Slow Length", defval=26) src = input(title="Source", defval=close) signal_length = input(title="Signal Smoothing", minval = 1, maxval = 50, defval =9) sma_source = input(title="Simple MA(Oscillator)", type=bool, defval=false) sma_signal = input(title="Simple MA(Signal Line)", type=bool, defval=false) // Plot colors col_grow_above = #26A69A col_grow_below = #FFCDD2 col_fall_above = #B2DFDB col_fall_below = #EF5350 col_macd = #0094ff col_signal = #ff6a00 // Calculating fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length) slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length) macd = fast_ma - slow_ma signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length) hist = macd - signal //plot(hist, title="Histogram", style=columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 ) plot(macd, title="MACD", color=col_macd, transp=0) plot(signal, title="Signal", color=col_signal, transp=0) ///END OF MACD //Long and Close Long Lines linebuy = input(title="Enter Long", type=float, defval=-0.00045) linesell = input(title="Close Long", type=float, defval=0.0001) //Plot Long and Close Long Lines plot(linebuy,color=green),plot(linesell,color=red) //Stop Loss Input sl_inp = input(0.05, title='Stop Loss %', type=float)/100 //Order Conditions longCond = crossover(currMacd, linebuy) exitLong = crossover(currMacd, signal) and signal > 0 stop_level = strategy.position_avg_price * (1 - sl_inp) //Order Entries strategy.entry("long", strategy.long, when=longCond==true) strategy.close("long", when=exitLong==true) strategy.exit("Stop Loss", stop=stop_level)