
A ideia principal desta estratégia é usar os sinais de forca de ouro e forca de morte do indicador EMA para realizar operações de compra e venda. Ela mapeia simultaneamente vários grupos de EMAs rápidos e lentos e usa seus cruzamentos para julgar os sinais de negociação.
Esta estratégia define primeiro um conjunto de linhas médias EMA, incluindo as linhas médias EMA rápidas ema1 a ema6 e as linhas médias EMA lentas ema7 a ema12. Em seguida, define os sinais de compra buy_signal e os sinais de venda sell_signal:
Assim, quando a curta-metragem EMA na linha média da EMA longo prazo, indica que o mercado está em uma tendência ascendente, comprar; quando a curta-metragem EMA abaixo da linha média da EMA longo prazo, indica que o mercado está em uma tendência descendente, vender.
A estratégia de determinar a direção da tendência através da monitorização do cruzamento da linha média da EMA para tomar decisões de compra e venda.
A estratégia tem as seguintes vantagens:
Usando o indicador de linha média da EMA para determinar a tendência, a linha média da EMA é mais suave em relação às mudanças de preço, e pode filtrar o ruído do mercado de curto prazo, tornando os sinais de negociação mais confiáveis.
Ao traçar vários conjuntos de linhas médias EMA, pode-se determinar com mais precisão as mudanças de tendência. O cruzamento de linhas EMA rápidas e lentas pode evitar a perda de importantes pontos de mudança de tendência.
A estratégia é simples e clara, emite sinais de negociação através do cruzamento da EMA, é fácil de entender e de implementar, adequada para negociações quantitativas.
Os parâmetros do ciclo EMA podem ser personalizados e podem ser ajustados de acordo com diferentes variedades e parâmetros de mercado, respondendo de forma flexível às mudanças no mercado.
A estratégia também apresenta os seguintes riscos:
A linha média da EMA tem um atraso que pode atrasar o sinal de negociação.
A escolha de uma combinação de parâmetros EMA incorreta pode gerar um sinal de negociação errado.
O cruzamento da EMA não pode filtrar eficazmente os falsos sinais causados pela zona de oscilação.
Existe um risco de sobre-adaptação, com espaço limitado para otimizar os parâmetros do EMA.
Resposta:
Filtragem em combinação com outros indicadores para evitar sinais errados na faixa de vibração.
Teste a estabilidade de diferentes parâmetros de ciclo, para evitar que ocorra uma sobre-conformidade.
Ajustar adequadamente o conjunto de parâmetros da estratégia ou aumentar o mecanismo de saída para controlar o risco.
A estratégia também pode ser melhorada em alguns aspectos:
Aumentar a estratégia de stop loss e parar a perda depois de atingir um certo nível.
A adição de um mecanismo de reentrada no mercado, ou seja, a configuração de um sinal de recompra e venda.
Optimizar a combinação de parâmetros de ciclo cruzado de compra e venda de EMA, procurando o parâmetro otimizado.
Adicionar outros indicadores ao julgamento, realizar verificação multifatorial e melhorar a qualidade do sinal.
Teste a otimização de parâmetros de diferentes variedades para encontrar o melhor alcance de aplicação.
Considerando os fatores de deslizamento nas transações em disco rígido, realize o ajuste de retroalimentação.
Esta estratégia usa a linha de equilíbrio do EMA para determinar a direção da tendência, comprando e vendendo de acordo com os sinais de cruzamento. É uma estratégia de acompanhamento de tendências mais simples. Ela tem a vantagem de determinar a mudança de tendência, mas também existe o risco de atraso e oscilação.
/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
//Companion Strategy script to my Cloud Study. Enjoy! -MP
// study("MP's Cloud Study", overlay=true)
strategy(title="MP's Cloud Strat'", shorttitle="MP's Cloud Strat", overlay=true, precision=6, pyramiding=0, initial_capital=10000, currency="USD", default_qty_type=strategy.percent_of_equity,calc_on_order_fills= false, calc_on_every_tick=false, default_qty_value=100.0, commission_type=strategy.commission.percent, commission_value=0.05)
//bgcolor ( color=black, transp=20, title='Blackground', editable=true)
src = close, len1 = input(2, minval=1, title="Short EMA")
src2 = close, len3 = input(7, minval=1, title="Long EMA")
emaShort = ema(src, len1)
emaLong = ema(src2, len3)
StartYear = input(2018, "Start Year")
StartMonth = input(01, "Start Month")
StartDay = input(18, "Start Day")
StopYear = input(2018, "Stop Year")
StopMonth = input(12, "Stop Month")
StopDay = input(26, "Stop Day")
tradeStop = timestamp(StopYear,StopMonth,StopDay,0,0)
//src = close,
//len1 = input(3, minval=1, title="Fast EMA 1")
len2 = input(3, minval=1, title="Fast EMA 2")
//len3 = input(8, minval=1, title="Fast EMA 3")
len4 = input(5, minval=1, title="Fast EMA 4")
len5 = input(8, minval=1, title="Fast EMA 5")
len6 = input(10, minval=1, title="Fast EMA 6")
//Slow EMA
len7 = input(30, minval=1, title="Slow EMA 7")
len8 = input(35, minval=1, title="Slow EMA 8")
len9 = input(40, minval=1, title="Slow EMA 9")
len10 = input(45, minval=1, title="Slow EMA 10")
len11 = input(50, minval=1, title="Slow EMA 11")
len12 = input(60, minval=1, title="Slow EMA 12")
//Fast EMA
ema1 = ema(src, len1)
ema2 = ema(src, len2)
ema3 = ema(src, len3)
ema4 = ema(src, len4)
ema5 = ema(src, len5)
ema6 = ema(src, len6)
//Slow EMA
ema7 = ema(src, len7)
ema8 = ema(src, len8)
ema9 = ema(src, len9)
ema10 = ema(src, len10)
ema11 = ema(src, len11)
ema12 = ema(src, len12)
//Fast EMA Color Rules
//colfastL = (ema1 > ema2 and ema2 > ema3 and ema3 > ema4 and ema4 > ema5 and ema5 > ema6)
colfastS = (ema1 < ema2 and ema2 < ema3 and ema3 < ema4 and ema4 < ema5 and ema5 < ema6)
//Slow EMA Color Rules
//colslowL = ema7 > ema8 and ema8 > ema9 and ema9 > ema10 and ema10 > ema11 and ema11 > ema12
//colslowS = ema7 < ema8 and ema8 < ema9 and ema9 < ema10 and ema10 < ema11 and ema11 < ema12
//Fast EMA Final Color Rules
//colFinal = colfastL and colslowL? aqua : colfastS and colslowS? orange : gray
//Slow EMA Final Color Rules
//colFinal2 = colslowL ? lime : colslowS ? red : gray
//Fast EMA Plots
p1=plot(ema1, title="Fast EMA 1", style=line, linewidth=2, color=silver)
plot(ema2, title="Fast EMA 2", style=line, linewidth=1, color=silver)
plot(ema3, title="Fast EMA 3", style=line, linewidth=1, color=silver)
plot(ema4, title="Fast EMA 4", style=line, linewidth=1, color=silver)
plot(ema5, title="Fast EMA 5", style=line, linewidth=1, color=silver)
p2=plot(ema6, title="Fast EMA 6", style=line, linewidth=2, color=silver)
fill(p1,p2,color=silver, transp=60)
//Slow EMA Plots
//p3=plot(ema7, title="Slow EMA 7", style=line, linewidth=4, color=colFinal2)
//plot(ema8, title="Slow EMA 8", style=line, linewidth=3, color=colFinal2)
//plot(ema9, title="Slow EMA 9", style=line, linewidth=3, color=colFinal2)
//plot(ema10, title="Slow EMA 10", style=line, linewidth=3, color=colFinal2)
//plot(ema11, title="Slow EMA 11", style=line, linewidth=3, color=colFinal2)
//p4=plot(ema12, title="Slow EMA 12", style=line, linewidth=4, color=colFinal2)
//fill(p3,p4, color=silver, transp=60)
//Plot the Ribbon
ma1=plot( emaShort,color=rising(emaShort,2)?green:red,linewidth=1,join=true,transp=20,title="Short")
ma2=plot( emaLong,color=rising(emaLong,2)?green:red,linewidth=1,join=true,transp=20,title="Long")
fcolor = emaShort>emaLong?green:red
fill(ma1,ma2,color=fcolor,transp=80,title="Ribbon Fill")
//fast = 4, slow = 16
//fastMA = ema(close, fast)
//slowMA = ema(close, slow)
//plot(fastMA, color=green, title = "buy/sell")
//plot(slowMA, color=red, title = "base")
//Conditions
buy_signal = crossover(ema1,ema3)
sell_signal = crossunder(ema1,ema3)
plotshape(sell_signal, style=shape.triangleup, color = red, text="Start Short")
plotshape(buy_signal, style=shape.triangledown, color = green, text="Start Long")
alertcondition(sell_signal, title = 'Sell/Short', message = 'e= s= c=position b=long t=market l= | delay=30 | e= s= b=short l= t=market q=0.01')
alertcondition(buy_signal, title = 'Buy/Long', message = 'e= s= c=position b=short t=market l= | delay=30 | e= s= b=long l= t=market q=0.01')
//alertcondition(sell_signal, title = 'Sell/Short', message = 'e= s= c=order b=buy | delay=3 | e= b=sell q=99% p=0.70% u=currency')
//alertcondition(buy_signal, title = 'Buy/Long', message = 'e= s= c=order b=sell | delay=30 | e= b=buy q=80 p=0.1% u=currency')
testStartYear = input(2018, "From Year")
testStartMonth = input(1, "From Month")
testStartDay = input(1, "From Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear = input(2019, "To Year")
testStopMonth = input(1, "To Month")
testStopDay = input(1, "To Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
testPeriod() => true
if testPeriod()
if buy_signal
strategy.entry("Long", true)
if sell_signal
strategy.close("Long")