Esta estratégia utiliza os sinais cruzados da linha rápida e lenta do MACD, combinados com julgamentos baseados em vários outros indicadores, para capturar os sinais de ruptura da linha do índice de média móvel em tempo hábil e tomar decisões de compra ou venda.
Use o cruzamento da linha rápida do MACD e da linha lenta como o principal sinal de negociação. Quando a linha rápida cruza acima da linha lenta, tome uma posição longa. Quando a linha rápida cruza abaixo da linha lenta, tome uma posição curta.
Incorpore o indicador RSI para determinar as condições de sobrecompra e sobrevenda.
Comparar o preço de fechamento atual com a linha SMA de um determinado período.
Calcule o nível de 0,5 Fibonacci do valor mais alto de um determinado período como a resistência para longo. Calcule o nível de 0,5 Fibonacci do valor mais baixo de um determinado período como o suporte para curto.
Tome longo quando a linha rápida cruza acima e o preço está abaixo do suporte. Tome curto quando a linha rápida cruza abaixo e o preço está acima da resistência.
Adotar um mecanismo de stop loss de trailing. O stop loss é fixado em uma certa porcentagem do preço de entrada inicialmente. Quando a perda atinge um certo nível, mude para um stop loss de trailing gradual.
A estratégia faz pleno uso dos sinais de cruzamento MACD, que é um sinal de negociação de indicadores técnicos clássico e eficaz.
Incorporar confirmações de múltiplos indicadores como RSI e SMA pode filtrar sinais falsos e melhorar a confiabilidade.
O cálculo dos níveis dinâmicos de suporte e resistência para a negociação de ruptura pode capturar tendências maiores.
O stop loss de trailing pode bloquear a maioria dos lucros enquanto controla o risco.
A lógica da estratégia é clara e simples, fácil de entender e dominar para iniciantes.
O indicador MACD tem problemas atrasados e pode perder os pontos de entrada e saída ideais.
A combinação de vários indicadores aumenta a complexidade e os riscos de sinais conflitantes.
Existem riscos de rupturas incorretas no cálculo dinâmico de suporte e resistência.
A redução da taxa de prejuízo pode ser prematura em tendências fortes, não conseguindo acompanhar as tendências.
Os parâmetros exigem testes e otimização repetitivos, os parâmetros inadequados afetam negativamente o desempenho.
Teste diferentes combinações de parâmetros para otimizar os períodos MACD.
Introduzir mais indicadores como Bollinger Bands, KDJ para análise multidimensional.
Incorporar mais fatores para julgar a razoabilidade do apoio e da resistência.
Pesquise mecanismos mais avançados de stop loss, como paradas baseadas em tempo ou volatilidade.
Adicionar um módulo de otimização automática para otimização automática de parâmetros.
Esta estratégia combina o MACD, RSI, SMA e outros indicadores para capturar sinais de avanço médio móvel de forma oportunista. Ela pertence a estratégias comerciais típicas de breakout de curto prazo. Há algum atraso em sua geração de sinal, mas a precisão pode ser melhorada através da otimização de parâmetros.
/*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