Esta estratégia utiliza a dupla linha média, o indicador aleatório e o indicador MACD para identificar oportunidades de negociação em linha curta, uma estratégia de negociação em linha curta mais clássica.
A estratégia baseia-se principalmente nos seguintes princípios:
Usando a linha média EMA de 50 e 100 ciclos, para determinar a direção da tendência. A linha média EMA é mais curta e pode responder rapidamente às mudanças de preço. A linha de 50 ciclos representa a entrada em mais de 100 ciclos; A linha de 50 ciclos abaixo da linha de 100 ciclos representa a entrada em vazio.
O MACD é usado para determinar a diferença entre os valores de compra e venda. Quando a diferença entre os valores de compra e venda é superior a 0, a força da cabeça mostra um aumento, fazendo mais; quando a diferença entre os valores de compra e venda é inferior a 0, a força da cabeça mostra um aumento, fazendo vazio.
Combinando o indicador Stochastic RSI para determinar se está sendo comprado ou vendido. O indicador, combinando os benefícios do indicador KDJ e do indicador RSI, pode mostrar a sobrevenda do mercado. Quando o indicador está abaixo de 20, é vendido em excesso, combinado com outros indicadores; Quando o indicador está acima de 80, é comprado em excesso, combinado com outros indicadores.
Após a determinação da direção de abertura, uma posição pode ser aberta se 4 dos 5 últimos preços de fechamento da linha K tocarem a linha média, indicando que há suporte ou pressão perto da linha média.
O uso de stop-loss para gerenciar o risco.
A estratégia tem as seguintes vantagens:
A combinação de indicadores múltiplos, o uso integrado de linhas médias, indicadores de sobrevenda e sobrevenda e indicadores de energia, aumentam a taxa de vitória de negociação.
O ciclo de linha média é curto e permite a rápida captação de tendências e reversões. Os parâmetros MACD são otimizados para identificar o momento preciso de compra e venda.
Os parâmetros do indicador Stochastic RSI foram otimizados para identificar o fenômeno de sobrecompra e sobrevenda.
O uso da pressão de suporte perto da linha média para o controle de ritmo, para evitar ser preso em uma quebra ineficaz.
O que é um Stop Loss Racional e um Controle de Risco de uma única transação?
A estratégia também apresenta alguns riscos:
A falta de informação sobre os riscos de falhas de segurança não é totalmente evitável.
A combinação de indicadores múltiplos pode se desviar, causando incoerência nos sinais de negociação.
O ponto de parada fixo pode não se adaptar às mudanças no mercado.
A implementação do código é mais complexa, com muitos parâmetros, e não é fácil de otimizar.
A solução para o risco é a seguinte:
Optimizar os parâmetros, melhorar a qualidade do sinal e reduzir a probabilidade de falsa brecha.
Estabelecer prioridades entre os indicadores para evitar conflitos de sinais
Acompanhar a dinâmica de stop loss, definindo um intervalo de stop loss com base em indicadores como o ATR.
Simplificar a lógica do código, extrair os parâmetros centrais para testes e otimização.
A estratégia pode ser otimizada em várias direções:
Testes com o ciclo da linha média e os parâmetros MACD para encontrar a melhor combinação de parâmetros.
Testar diferentes indicadores de overbought e oversold em vez do RSI estocástico.
Tente o stop loss dinâmico, o stop loss móvel, etc., para tornar a gestão de perdas e prejuízos mais inteligente.
Adição de filtros, como aumento de volume de transações, para melhorar a qualidade do sinal.
Optimizar a lógica de abertura de posições para evitar que as rupturas não sejam efetivas. Pode-se introduzir mais indicadores para avaliar as tendências.
Estabeleça limites de stop loss para o tamanho do capital da conta, o número de transações por dia, etc. Controle o risco geral.
Esta estratégia integra várias vantagens de indicadores e tem uma forte utilidade em negociações de curta linha. A estabilidade e a lucratividade da estratégia podem ser ainda melhoradas através da continuação da otimização dos parâmetros, da lógica de abertura rigorosa e da melhoria da estratégia de gerenciamento de perdas e prejuízos. A estratégia é adequada para o uso de comerciantes de curta linha com uma certa base, mas é necessário prestar atenção ao controle de risco para evitar grandes perdas.
/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="Forex scalper 2xEMA + SRSI + MACD", shorttitle="Forex scalper 5-15min", overlay=true)
src = input(title="Source", type=input.source, defval=close)
src_0 = src[0]
src_1 = src[1]
src_2 = src[2]
src_3 = src[3]
src_4 = src[4]
len50 = input(50, minval=1, title="Length")
src50 = input(close, title="Source")
out50 = ema(src50, len50)
len100 = input(100)
src100 = input(close, title="Source")
out100 = ema(src100, len100)
len1 = input(1, minval=1, title="Length")
src1 = input(close, title="Source")
out1 = sma(src1, len1)
length = input(4, minval=1)
OverBought = input(80)
OverSold = input(20)
smoothK = 3
smoothD = 3
k = sma(stoch(close, high, low, length), smoothK)
d = sma(k, smoothD)
cu = crossover(k,OverSold)
co = crossunder(k,OverBought)
sma_down = crossunder(out1, out50)
sma_up = crossover(out1,out50)
//if (not na(k) and not na(d))
// if (co and k < OverSold)
// strategy.entry("StochLE", strategy.long, comment="StochLE")
//if (cu and k > OverBought)
// strategy.entry("StochSE", strategy.short, comment="StochSE")
crossCandle_4 = crossover(src[4],out50)
crossCandleUnder_4= cross(src[4],out50)
crossCandle_3 = crossover(src[3],out50)
crossCandleUnder_3= crossunder(src[3],out50)
crossCandle_2 = crossover(src[2],out50)
crossCandleUnder_2= crossunder(src[2],out50)
crossCandle_1 = crossover(src[1],out50)
crossCandleUnder_1= crossunder(src[1],out50)
crossCandle_0 = crossover(src[0],out50)
crossCandleUnder_0= crossunder(src[0],out50)
conditionOver = (crossCandle_4 or crossCandle_3 or crossCandle_2 or crossCandle_1 or crossCandle_0)
conditionUnder =(crossCandleUnder_4 or crossCandleUnder_3 or crossCandleUnder_2 or crossCandleUnder_1 or crossCandleUnder_0)
touch4 = (cross(low[4],out50) or cross(high[4],out50))
touch3 = (cross(low[3],out50) or cross(high[3],out50))
touch2 = (cross(low[2],out50) or cross(high[2],out50))
touch1 = (cross(low[1],out50) or cross(high[1],out50))
touch = touch1 or touch2 or touch3 or touch4
//and sma_up
//and sma_down
// Getting inputs
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src_macd = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 10)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.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_macd, fast_length) : ema(src_macd, fast_length)
slow_ma = sma_source ? sma(src_macd, slow_length) : ema(src_macd, 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=plot.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)
// plot((conditionOver or conditionUnder or touch) and src[0] >= out50 and close >= out50 and (cu) and out50 > out100 and hist>=0 , title="Buy", style=columns, color=lime)
// plot((conditionOver or conditionUnder or touch) and src[0] <= out50 and close <= out50 and (co) and out50< out100 and hist<=0 , title="sell", style=columns, color=red)
long_cond = ((conditionOver or conditionUnder or touch) and src[0] >= out50 and close > out50 and (cu) and out50 > out100 and hist>=0)
short_cond = ((conditionOver or conditionUnder or touch) and src[0] <= out50 and close < out50 and (co) and out50< out100 and hist<=0)
tp=input(200)
sl=input(200)
strategy.entry("long",strategy.long, when=long_cond)
strategy.entry("short",strategy.short, when=short_cond)
strategy.exit("X_long", "long", profit=tp, loss=sl, when=touch )
strategy.exit("x_short", "short",profit=tp, loss=sl,when = touch )