
Esta estratégia usa um indicador de média móvel em combinação com vários períodos de tempo para determinar a consistência da tendência entre períodos de tempo, e usa uma estratégia de scalping para obter lucro com a tendência durante o dia.
Esta estratégia utiliza as médias móveis de 8 e 20 períodos em quatro quadros de tempo de 5 minutos, 15 minutos, 30 minutos e 60 minutos para construir sinais de negociação. Um sinal de compra é gerado quando uma média móvel de 20 dias é atravessada acima da média móvel de 8 dias, que é mais curta; um sinal de venda é gerado quando uma média móvel de 20 dias é atravessada abaixo da média móvel de 8 dias.
A estratégia exige que os sinais de negociação dos períodos de tempo de 5, 15, 30 e 60 minutos sejam consistentes para que uma instrução de negociação seja emitida. Ou seja, uma operação de compra ou venda só é executada quando a média móvel desses quatro períodos de tempo corresponde ao sinal de compra ou venda.
Depois de entrar em uma posição, a estratégia pode definir um stop loss com um ponto de vantagem fixo para o escalpelamento do dia.
Especificamente, a estratégia obteve dados de médias móveis em diferentes prazos de tempo por meio da invocação da função de segurança. Calculou a diferença entre as médias de 8 e 20 dias de 5 minutos, 15 minutos, 30 minutos e 60 minutos e traçou a curva de diferença.
Julgar os sinais de compra e venda de acordo com a trajetória da curva de diferença e definir vários indicadores islong e isshort para registrar os sinais de negociação em cada período de tempo. Finalmente, emitir as instruções de entrada e saída quando os estados de islong e isshort satisfazem os requisitos.
Após a entrada, a estratégia define um parâmetro de pontos fixos através da função strategy.exit para realizar a operação de scalping.
A estratégia tem as seguintes vantagens:
O design de quadros de tempo múltiplos, através de um julgamento integrado de diferentes indicadores de ciclo, é capaz de filtrar eficazmente as falsas hipóteses e reduzir a frequência de negociação.
A estratégia de escalpelar no dia a dia, a otimização do lucro, permite que pequenos lucros sejam acumulados continuamente.
A estrutura do código é clara, cada função é clara, fácil de entender e de otimizar.
A definição de condições é razoável e permite um controlo eficaz do risco de transação.
A estratégia também apresenta alguns riscos:
Embora o design de multi-quadros de tempo possa filtrar parte do ruído, também é possível perder detalhes que levam a mudanças de tendência não visíveis.
O scalping diurno leva a transações frequentes, e o controle dos custos de transação é necessário.
A configuração do ponto de parada fixo não é suficientemente flexível para ser adaptada às mudanças do mercado.
Dependendo do indicador para gerar sinais de negociação, existe a possibilidade de ser enganado.
A estratégia pode ser melhorada em alguns aspectos:
Adicionar mais indicadores de julgamento em diferentes períodos de tempo, tornando o sinal mais estável e confiável.
Optimizar a estratégia de parada, definindo o ponto de parada de acordo com a dinâmica do ATR.
Adicionar condições adicionais para filtrar o momento de entrada, como aumento do volume de transações, quebra de recordes históricos, etc.
Optimizar os parâmetros periódicos das médias móveis para encontrar a melhor combinação de parâmetros.
Aumentar o modelo de aprendizado de máquina para julgar a confiabilidade dos sinais de indicadores e evitar a arbitragem.
Esta estratégia é uma estratégia típica de rastreamento de tendências de vários quadros temporais, que se beneficia do método de escalpelamento diário. A estratégia é clara, a estrutura do código é razoável e vale a pena testar e otimizar ainda mais. Com alguns ajustes de otimização, esta estratégia pode se tornar um modelo de estratégia de escalpelamento diário muito prático.
/*backtest
start: 2022-11-09 00:00:00
end: 2023-11-15 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy(title="PeBAS $JPY Scalper 15m ",overlay=true)
zeigeallebars= input(false, title="Zeige alle (Show all) Candles/Bars?")
profitwert=input(52, title="Profit")
myatr= input(title="ATR", type=float, defval=0.00002, minval=0.00001,step=0.00001)
//Plot EMA-Differenz Aktueller Timeframe
dif=(ema(close,8)+ema(close,20))/2
mcolor=ema(close,8) > ema(close,20) ? green : red
bs = ema(close,8) > ema(close,20) ? true : false
ThisATR=atr(16)
//trans = zeigeallebars == true ? 00 : 100
//plot(dif,"dif",color=mcolor,linewidth=6,transp=trans)
//1M EMA
htf_ma1Mema8 = ema(close, 5)
htf_ma1Mema20 = ema(close, 20)
ema81m=request.security(syminfo.tickerid, "1", htf_ma1Mema8)
ema201m=request.security(syminfo.tickerid, "1", htf_ma1Mema20)
dif1M = (ema81m + ema201m) / 2
Close1M = request.security(syminfo.tickerid, "1", close)
color1=ema81m > ema201m ? green : red
//plot(dif1M,"dif",color1,linewidth=6)
//plotshape(1, style=shape.cross, color=color1,location=location.top)
ls1 = ema81m > ema201m ? 1 : 0
//5M EMA
htf_ma5Mema8 = ema(close, 8)
htf_ma5Mema20 = ema(close, 20)
ema85m=request.security(syminfo.tickerid, "5", htf_ma5Mema8)
ema205m=request.security(syminfo.tickerid, "5", htf_ma5Mema20)
dif5M = (ema85m + ema205m) / 2
color5=ema85m > ema205m ? green : red
plot(dif5M,"dif",color5,linewidth=5)
ls5 = ema85m > ema205m ? 1 : 0
alert1= ema85m > ema205m and ema85m[1] < ema205m[1] ? 1 : 0
islong5 = ema85m > ema205m ? 1 : 0
isshort5 = ema85m < ema205m ? 1 : 0
//15M EMA
htf_ma15Mema8 = ema(close, 8)
htf_ma15Mema20 = ema(close, 20)
ema815m=request.security(syminfo.tickerid, "15", htf_ma15Mema8)
ema2015m=request.security(syminfo.tickerid, "15", htf_ma15Mema20)
dif15M = (ema815m + ema2015m) / 2
color15=ema815m > ema2015m ? green : red
plot(dif15M,"dif",color15,linewidth=3)
ls15= ema815m > ema2015m ? 1 : 0
alert2= ema815m > ema2015m and ema815m[1] < ema2015m[1] ? 1 : 0
islong15 = ema815m > ema2015m ? 1 : 0
isshort15 = ema815m < ema2015m ? 1 : 0
//30M EMA
htf_ma30Mema8 = ema(close, 8)
htf_ma30Mema20 = ema(close, 20)
ema830m=request.security(syminfo.tickerid, "30", htf_ma30Mema8)
ema2030m=request.security(syminfo.tickerid, "30", htf_ma30Mema20)
dif30M = (ema830m + ema2030m) / 2
color30=ema830m > ema2030m ? green : red
ls30= ema830m > ema2030m ?1 : 0
islong30 = ema830m > ema2030m ? 1 : 0
isshort30 = ema830m < ema2030m ? 1 : 0
//60M EMA
htf_ma60Mema8 = ema(close, 8)
htf_ma60Mema20 = ema(close, 20)
ema860m=request.security(syminfo.tickerid, "60", htf_ma60Mema8)
ema2060m=request.security(syminfo.tickerid, "60", htf_ma60Mema20)
dif60M = (ema860m + ema2060m) / 2
color60=ema860m > ema2060m ? green : red
ls60= ema860m > ema2060m ?1 : 0
islong60 = ema860m > ema2060m ? 1 : 0
isshort60 = ema860m < ema2060m ? 1 : 0
plot(dif60M,"dif",color60,linewidth=3,transp=70)
islong = islong5 ==1 and islong15 ==1 and islong60 ==1 and year > 2017 ? 1 : 0
isshort = isshort5 ==1 and isshort15 ==1 and isshort60 ==1 and year > 2017 ? 1 : 0
condition2l= 0
condition2s = 0
c= alert1 == alert2 and alert1[1] != alert2[1] ? 1 : 0
alertcondition(c, title='Da tat sich was ', message='Da tat sich was!')
strategy.entry("enter long", strategy.long,1,when = islong ==1 and islong[1] == 0 )
strategy.entry("enter short", strategy.short,1,when = isshort == 1 and isshort [1] == 0)
strategy.exit("close",profit=profitwert)
strategy.exit("close",profit=profitwert)