Esta estratégia é denominada
MACD significa Divergência de Convergência da Média Móvel. Ele consiste na linha rápida, linha lenta e histograma. Quando a linha rápida cruza acima da linha lenta, ele sinaliza o fortalecimento do ímpeto de preço de curto prazo e gera um sinal de compra. Quando a linha rápida cruza abaixo da linha lenta, ele sinaliza o enfraquecimento do ímpeto e gera um sinal de venda.
RSI significa Relative Strength Index (Índice de Força Relativa). Reflete condições de sobrecompra e sobrevenda de preços. RSI abaixo de 20 é sobrevenda e acima de 80 é sobrecompra.
Os sinais comerciais desta estratégia têm dois aspectos:
Em primeiro lugar, cruzamento de linhas do MACD e mudanças de histograma. Quando o histograma muda de negativo para positivo, ele mostra aumento do ímpeto no preço no curto prazo, indicando oportunidades de compra. Quando o histograma muda de positivo para negativo, ele mostra diminuição do ímpeto e sugere venda.
Em segundo lugar, os níveis de sobrecompra / sobrevenda do RSI. Combinando o RSI ajuda a filtrar alguns sinais falsos do MACD. Comprar apenas quando o RSI é baixo e vender apenas quando o RSI é alto melhora a precisão.
A vantagem desta estratégia é a combinação dos pontos fortes dos dois indicadores para sinais comerciais mais precisos e captura sensível de flutuações de curto prazo.
Em resumo, esta estratégia é adequada para a negociação ágil a curto prazo, aproveitando oportunidades de lucro de reversões a curto prazo.
/*backtest start: 2022-09-06 00:00:00 end: 2023-09-12 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Uraynium V3", overlay=false, pyramiding = 0, calc_on_every_tick=true, precision=1, currency="USD", default_qty_value=10, default_qty_type=strategy.cash,initial_capital=100,commission_type=strategy.commission.percent,commission_value=0.1) // === INPUT BACKTEST RANGE === FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2019, title = "From Year", minval = 2017) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 2020, title = "To Year", minval = 2017) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window inTimeframe() => true overSold = input( 20 , minval = 1, title = "RSI Oversold") overBought = input( 80 , minval = 1, title = "RSI Overbought") rsiLength = input(14, minval = 1, title = "RSI Length") fastLength = input(12, minval = 1, title = "MACD fast") slowlength = input(26, minval = 1, title = "MACD slow") MACDLength = input( 9, minval = 1, title = "MACD length") stopLoss = input( 10, minval = 1, title = "Stop Loss (price %)") takeProfit = input( 50, minval = 1, title = "Take Profit (price %)") triggerPosLvl = input( 2, minval = 1 ,title ="Take Position Threshold", type=input.float) src = close // === CALC === stopLossValue = close*(stopLoss/100)/syminfo.mintick takeProfitValue = close*(takeProfit/100)/syminfo.mintick vrsi = rsi(src, rsiLength) //avgRSI = vrsi*0.5 + vrsi[1]*0.25 + vrsi[2]*0.125 + vrsi[3]*0.0625 avgRSI = (4*vrsi + 3*vrsi + 2*vrsi[2] + vrsi[3])/10 [macdLine, signalLine, histLine] = macd(src, fastLength, slowlength, MACDLength) MACDdelta = signalLine - macdLine isMACDRunLong = signalLine > macdLine isMACDRunShort = macdLine < signalLine isMACDSwitchLong = crossover(MACDdelta, 0) isMACDSwitchShort = crossunder(MACDdelta, 0) isMACDCross = crossover(MACDdelta, 0) or crossunder(MACDdelta, 0) buySignal = (histLine-histLine[1]) + (avgRSI - avgRSI[1]) // === ACTION === isPosLong = strategy.position_size > 0 isPosShort = strategy.position_size < 0 isNoMarginPos= strategy.position_size == 0 entryLong = (isNoMarginPos or isPosShort) and ( buySignal > triggerPosLvl ) entryShort = (isNoMarginPos or isPosLong ) and ( buySignal < -triggerPosLvl ) if inTimeframe() strategy.entry("Long" , strategy.long, comment="Entry Long", when=entryLong ) strategy.entry("Short", strategy.short, comment="Entry Short", when=entryShort) strategy.entry("Long" , strategy.long, comment="Switch Long", when=entryLong) strategy.entry("Short", strategy.short, comment="Switch Short",when=entryShort) strategy.exit("Stop (long SL/TP)", loss=stopLossValue, profit=takeProfitValue, when=entryLong ) strategy.exit("Stop (short SL/TP)", loss=stopLossValue, profit=takeProfitValue, when=entryShort) strategy.close("Long" , when=entryShort) strategy.close("Short", when=entryLong) // === DRAW === posColor = isNoMarginPos ? color.black : isPosLong ? color.green : color.red plot(100, color=posColor,style=plot.style_area, transp=90, histbase=0) plot(buySignal+overBought, color=color.green) plot(50+macdLine/4, color=color.yellow) plot(50+signalLine/4, color=color.orange) histColor = histLine[1]-histLine > 0 ? color.red : color.green plot(overSold+histLine/2, color=histColor, style=plot.style_histogram, histbase=overSold, transp=50, linewidth=2) rsicolor = avgRSI>overBought ? color.red : avgRSI<overSold ? color.green : color.blue plot(avgRSI,color=rsicolor, linewidth=2) //plot(vrsi,color=color.purple, linewidth=2) hline(overBought, color=color.red) hline(overSold, color=color.green) hline(50, color=color.gray)