Esta estrategia juzga la tendencia del precio a través del cálculo del promedio móvil rápido, promedio móvil lento e indicador MACD, y construye las señales comerciales de cruz dorada y cruz muerta.
Esta estrategia se basa principalmente en tres indicadores.
Primero, calcula el promedio móvil rápido y dos promedios móviles lentos. Cuando el MA rápido supera los dos MA lentos, se genera una señal de compra. Cuando el MA rápido cae por debajo de los dos MA lentos, se genera una señal de venta. Esto juzga la relación entre las tendencias a corto y largo plazo para realizar el comercio de cruz dorada y cruz muerta.
En segundo lugar, calcula el indicador MACD, incluida la línea MACD, la línea de señal e histograma. Cuando el histograma MACD > 0, es un indicador alcista; cuando el histograma MACD < 0, es un indicador bajista. Esto ayuda a juzgar la confiabilidad de las señales de cruz dorada y cruz muerta.
Por último, incorpora los mecanismos de toma de ganancias, stop loss y trailing stop loss.
Las ventajas de esta estrategia incluyen:
También hay algunos riesgos:
Las soluciones son:
La estrategia también puede optimizarse en los siguientes aspectos:
En resumen, esta es una estrategia simple pero efectiva que utiliza la cruz dorada, la cruz muerta y el MACD para juzgar la tendencia y realizar el stop loss trasero. Las ventajas son el seguimiento de la tendencia y el bloqueo de ganancias con una alta personalización. Es una estrategia de optimización de parámetros universal adecuada para diferentes instrumentos comerciales. Todavía hay algunos riesgos y espacio de optimización, pero en general es una estrategia comercial confiable y práctica.
/*backtest start: 2023-12-14 00:00:00 end: 2023-12-21 00:00:00 period: 15m basePeriod: 5m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy('The Puria Method', shorttitle = 'Puria',overlay = true) //=== GENERAL INPUTS === // short ma maFastSource = input(defval = close, title = "Fast MA Source") maFastLength = input(defval = 5, title = "Fast MA Period", minval = 1) // long ma 1 maSlow1Source = input(defval = low, title = "Slow MA1 Source") maSlow1Length = input(defval = 85, title = "Slow MA Period", minval = 1) // long ma 2 maSlow2Source = input(defval = low, title = "Slow MA2 Source") maSlow2Length = input(defval = 75, title = "Slow MA Period", minval = 1) //macd macdFastLength = input(defval = 12, title = "Fast MACD Period", minval = 1) macdSlowLength = input(defval = 26, title = "Slow MACD Period", minval = 1) macdSmaLength = input(defval = 9, title = "SMA MACD Period", minval = 1) // the risk management inputs inpTakeProfit = input(defval = 30, title = "Take Profit", minval = 0) inpStopLoss = input(defval = 10, title = "Stop Loss", minval = 0) inpTrailStop = input(defval = 5, title = "Trailing Stop Loss", minval = 0) inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0) // if an input is less than 1, assuming not wanted so we assign 'na' value to disable it. useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na // === SERIES SETUP === maFast = ema(maFastSource, maFastLength) maSlow1 = wma(maSlow1Source, maSlow1Length) maSlow2 = wma(maSlow2Source, maSlow2Length) [_, signal, histLine] = macd(close, macdFastLength, macdSlowLength, macdSmaLength) // === PLOTTING === fast = plot(maFast, title = "Fast MA", color = green, linewidth = 2, style = line, transp = 50) slow1 = plot(maSlow1, title = "Slow MA1", color = red, linewidth = 2, style = line, transp = 50) slow2 = plot(maSlow2, title = "Slow MA2", color = red, linewidth = 2, style = line, transp = 50) // === LOGIC === signalUp = crossover(maFast, maSlow1) and crossover(maFast, maSlow2) and histLine > 0 signalDown = crossunder(maFast, maSlow1) and crossunder(maFast, maSlow2) and histLine < 0 // ===STRATEGY=== strategy.entry(id = "Long", long = true, when = signalUp) strategy.entry(id = "Short", long = false, when = signalDown) strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset) strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)