Esta estratégia julga a tendência do preço através do cálculo da média móvel rápida, média móvel lenta e indicador MACD, e constrói os sinais de negociação de cruz de ouro e cruz morta.
Esta estratégia baseia-se principalmente em três indicadores.
Em primeiro lugar, ele calcula a média móvel rápida e duas médias móveis lentas. Quando o MA rápido ultrapassa os dois MA lentos, um sinal de compra é gerado. Quando o MA rápido ultrapassa os dois MA lentos, um sinal de venda é gerado. Isso julga a relação entre as tendências de curto e longo prazo para realizar a negociação de cruz de ouro e cruz morta.
Em segundo lugar, ele calcula o indicador MACD, incluindo a linha MACD, linha de sinal e histograma. Quando o histograma MACD > 0, é um indicador de alta; quando o histograma MACD < 0, é um indicador de baixa. Isso ajuda a julgar a confiabilidade dos sinais de cruz de ouro e cruz morta.
Por fim, incorpora os mecanismos de take profit, stop loss e trailing stop loss.
As vantagens desta estratégia incluem:
Há também alguns riscos:
As soluções são:
A estratégia pode também ser otimizada a partir dos seguintes aspectos:
Em resumo, esta é uma estratégia simples, mas eficaz, que usa a cruz de ouro, cruz morta e MACD para julgar a tendência e realizar o stop loss. As vantagens são o rastreamento da tendência e o bloqueio de lucros com alta personalização. É uma estratégia de otimização de parâmetros universal adequada para diferentes instrumentos de negociação. Ainda há alguns riscos e espaço de otimização, mas em geral é uma estratégia de negociação confiável e prática.
/*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)