Tendência de vários períodos seguindo estratégia de scalping intradiário


Data de criação: 2023-11-16 17:47:06 última modificação: 2023-11-16 17:47:06
cópia: 1 Cliques: 768
1
focar em
1617
Seguidores

Tendência de vários períodos seguindo estratégia de scalping intradiário

Visão geral

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.

Princípio da estratégia

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.

Análise de vantagens

A estratégia tem as seguintes vantagens:

  1. 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.

  2. A estratégia de escalpelar no dia a dia, a otimização do lucro, permite que pequenos lucros sejam acumulados continuamente.

  3. A estrutura do código é clara, cada função é clara, fácil de entender e de otimizar.

  4. A definição de condições é razoável e permite um controlo eficaz do risco de transação.

Análise de Riscos

A estratégia também apresenta alguns riscos:

  1. 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.

  2. O scalping diurno leva a transações frequentes, e o controle dos custos de transação é necessário.

  3. A configuração do ponto de parada fixo não é suficientemente flexível para ser adaptada às mudanças do mercado.

  4. Dependendo do indicador para gerar sinais de negociação, existe a possibilidade de ser enganado.

Direção de otimização

A estratégia pode ser melhorada em alguns aspectos:

  1. Adicionar mais indicadores de julgamento em diferentes períodos de tempo, tornando o sinal mais estável e confiável.

  2. Optimizar a estratégia de parada, definindo o ponto de parada de acordo com a dinâmica do ATR.

  3. Adicionar condições adicionais para filtrar o momento de entrada, como aumento do volume de transações, quebra de recordes históricos, etc.

  4. Optimizar os parâmetros periódicos das médias móveis para encontrar a melhor combinação de parâmetros.

  5. Aumentar o modelo de aprendizado de máquina para julgar a confiabilidade dos sinais de indicadores e evitar a arbitragem.

Resumir

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.

Código-fonte da estratégia
/*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)