
Esta estratégia utiliza um indicador de dupla linha e um indicador de linha de três indicadores, combinados com indicadores aleatórios, formando uma estratégia de negociação de tendência mais estável e confiável. Sua principal idéia é emitir um sinal de negociação quando o indicador de linha de equilíbrio é julgado como um garfo ou um garfo morto; enquanto o indicador aleatório é usado para auxiliar a julgar sobre compras e vendas excessivas, evitando a produção de sinais errados em situações de forte flutuação no mercado.
A estratégia consiste em quatro partes principais:
Indicador de dupla equilíbrio: calcula a média móvel do índice de 50 e 100 ciclos, respectivamente (EMA), gerando um sinal de compra quando o EMA de curto prazo é atravessado pelo EMA de longo prazo e um sinal de venda quando é atravessado.
Três indicadores de índice: Calcule a média móvel do índice de 50 ciclos, 100 ciclos e 200 ciclos, respectivamente, para determinar a direção da tendência do mercado. Quando 50EMA> 100EMA> 200EMA é um mercado de cabeças, quando 50EMA < 100EMA < 200EMA é um mercado de cabeças vazias.
Indicador aleatório: Calcule o valor de K e o valor de D de 6 dias do RSI para determinar se há sobrevenda ou sobrevenda. Quando o valor de K é ultrapassado, o valor de D é ultrapassado e o valor de D é ultrapassado.
Sinais de negociação: somente quando o indicador de linha dupla produz um sinal, o mercado também corresponde ao estado de múltiplo ou vazio da linha média triangular, e o indicador aleatório não mostra sobrecompra ou sobrevenda, apenas quando a ordem de negociação real é emitida.
Esta estratégia combina o uso de indicadores de linha média e indicadores aleatórios. Ao emitir um sinal de negociação, considera a direção da tendência e também o estado de sobrecompra e sobrevenda do mercado, o que permite melhor filtrar o ruído e rastrear tendências mais claras. Além disso, usa a linha média de três índices para julgar a tendência geral, tornando o sinal mais confiável.
O maior risco da estratégia é que ela depende de indicadores de julgamento, e quando os indicadores emitem sinais errados, isso pode levar ao fracasso das negociações. Além disso, o uso de indicadores de média de longo período para julgar a tendência geral também pode perder oportunidades de curto prazo. As principais medidas de risco são:
Otimizar os parâmetros do indicador, ajustando a combinação de períodos de linha média dupla e de linha média tripla, para que seja mais compatível com as características do mercado.
A operação CANCEL, em combinação com mais indicadores, pode ser executada para suspender a negociação atual quando se julgar que o mercado está em alta.
Ajudado pela adoção de estratégias de curto prazo para obter lucros em oportunidades de curto prazo em mercados de longo prazo.
A estratégia pode ser melhorada em vários aspectos:
Ajustar os parâmetros de ciclo das linhas de média dupla e tripla, otimizar os indicadores de acordo com as características do mercado.
Aumentar o julgamento de indicadores como o VOLUME e o MACD, evitando que os preços anormais causem sinais errados.
O uso da modalidade candle permite uma melhor confirmação da tendência e evita sinais errados de retração em curto prazo.
Estender para outras variedades, como ações, divisas, etc., para testar a adequação das estratégias.
Combinado com o indicador VIX para determinar a volatilidade do mercado global, o controle do tamanho da posição.
Esta estratégia usa o indicador de linha dupla para emitir sinais de negociação, a linha de três indicadores e o indicador aleatório para julgamento auxiliar, de modo a construir uma estratégia de acompanhamento de tendências mais estável. É simples, fácil de entender, fácil de implementar, com alta correspondência com as características do mercado, com ganhos mais estáveis, é um conjunto de estratégias de quantificação recomendável.
/*backtest
start: 2023-12-07 00:00:00
end: 2023-12-12 08:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title='5212 EMA Strategy', shorttitle='5212 EMA', overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=10, calc_on_every_tick=false)
//**Backtest Date sof
useStartPeriodTime = input.bool(true , 'Start Date & Time' , group='Date Range' , inline='Start Period')
startPeriodTime = input(timestamp('16 Apr 2021') , '' , group='Date Range' , inline='Start Period')
useEndPeriodTime = input.bool(false , 'End Date & Time' , group='Date Range' , inline='End Period')
endPeriodTime = input(timestamp('31 Dec 2222') , '' , group='Date Range' , inline='End Period')
enableHighlight = input.bool(false , 'Highlight' , group='Date Range' , inline='Highlight')
highlightType = input.string('Anchors' , '' , group='Date Range' , inline='Highlight' , options=['Anchors', 'Background'])
highlightColor = input.color(color.white , '' , group='Date Range' , inline='Highlight')
start = useStartPeriodTime ? startPeriodTime >= time : false
end = useEndPeriodTime ? endPeriodTime <= time : false
calcPeriod = true
// var line startAnchor = line.new(na, na, na, na, xloc.bar_time, extend.both, highlightColor, width=2)
// var line endAnchor = line.new(na, na, na, na, xloc.bar_time, extend.both, highlightColor, width=2)
// useBgcolor = false
// if enableHighlight
// if highlightType == 'Anchors'
// if useStartPeriodTime
// line.set_xy1(startAnchor, startPeriodTime, low)
// line.set_xy2(startAnchor, startPeriodTime, high)
// if useEndPeriodTime
// line.set_xy1(endAnchor, calcPeriod ? time : line.get_x1(endAnchor), low)
// line.set_xy2(endAnchor, calcPeriod ? time : line.get_x1(endAnchor), high)
// if highlightType == 'Background'
// useBgcolor := true
// useBgcolor
// bgcolor(useBgcolor and calcPeriod ? color.new(highlightColor,90) : na, editable=false)
//**Backtest Date eof
src =input(close , 'Source' , group='Support')
showEMA = input(true , 'Show EMA' , group='Support')
//**Stochastic RSI sof
smoothK = input.int(6 , "K" , group='Stochastic RSI' , minval=1)
smoothD = input.int(6 , "D" , group='Stochastic RSI' , minval=1)
lengthRSI = input.int(28 , "RSI Length" , group='Stochastic RSI' , minval=1)
lengthStoch = input.int(28 , "Stoch Length" , group='Stochastic RSI' , minval=1)
rsi1 = ta.rsi(src, lengthRSI)
k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = ta.sma(k, smoothD)
//**STochastic RSI eof
//** EMA sof
emain01 = input.int(50 , "EMAma Girang" , group='Moving Average Exponential' , minval=1)
emain02 = input.int(100 , "EMAma Muda" , group='Moving Average Exponential' , minval=1)
emain03 = input.int(200 , "EMAma Tua" , group='Moving Average Exponential' , minval=1)
ema01 = ta.ema(src, emain01)
ema02 = ta.ema(src, emain02)
ema03 = ta.ema(src, emain03)
plot(showEMA ? ema01 : na, 'EMAma Girang' , color = color.new(color.orange, 0))
plot(showEMA ? ema02 : na, 'EMAma Muda' , color = color.new(color.blue, 0))
plot(showEMA ? ema03 : na, 'EMAma Tua' , color = color.new(color.red, 0))
//** EMA eof
//**Condition sof
emaLong = ema01 > ema02 and ema02 > ema03 and low > ema03
emaShort = ema01 < ema02 and ema02 < ema03 and high < ema03
longCond = ta.crossover(k,d) and k <= 23 and emaLong
shortCond = ta.crossunder(k,d) and k >= 77 and emaShort
longClose = ta.crossunder(k,d) and k <= 77
shortClose = ta.crossover(k,d) and k >= 23
longCross = ta.crossover(ema01, ema02)
shortCross = ta.crossunder(ema01, ema02)
//**Condition eof
//**Strategy sof
if calcPeriod and longCond
strategy.entry('long', strategy.long, when=longCond, comment='EN Long')
strategy.close('long', when=shortClose, comment='EX Long')
strategy.close('long', when=shortCross, comment='MD Short')
if calcPeriod and shortCond
strategy.entry('short', strategy.short, when=shortCond, comment='EN Short')
strategy.close('short', when=longClose, comment='EX Short')
strategy.close('short', when=longCross, comment='MD Long')
if calcPeriod == false and ta.crossover(ema01, ema02) or ta.crossunder(ema01, ema02)
strategy.cancel('long')
strategy.cancel('short')
//**Strategy eof
//**Label sof
entryText = str.tostring(strategy.position_avg_price, '##.###')
longText = 'Long Entry : ' + entryText
shortText = 'Short Entry : ' + entryText
noTrade = 'Sleeping Mode'
LongTrade = strategy.position_size > 0
ShortTrade = strategy.position_size < 0
Tekslabel = LongTrade ? longText : ShortTrade ? shortText : noTrade
xPosition = timenow + math.round(ta.change(time)*1)
yPosition = ta.highest(1)
labelColor = LongTrade ? color.new(color.aqua, 0) : ShortTrade ? color.new(color.red, 0) : color.new(color.gray, 0)
textColor = LongTrade ? color.new(color.black, 0) : ShortTrade ? color.new(color.white, 0) : color.new(color.white, 0)
// lab_l = label.new(
// xPosition, yPosition, Tekslabel,
// color=labelColor,
// textcolor=textColor,
// style = label.style_label_left,
// textalign=text.align_left,
// xloc=xloc.bar_time, yloc = yloc.price)
// label.delete(lab_l[1])
//**Strategy eof