A estratégia de cruzamento da média móvel é uma estratégia quantitativa muito comum. Ela usa a cruz de ouro e a cruz da morte das médias móveis para determinar tendências e lucros. Quando a média móvel de curto prazo cruza acima da média móvel de longo prazo, ela sinaliza uma tendência de alta e uma posição longa pode ser tomada. Quando a média móvel de curto prazo cruza abaixo da média móvel de longo prazo, ela sinaliza uma tendência de queda e uma posição curta pode ser tomada.
Esta estratégia é baseada na cruz de ouro e cruz de morte das médias móveis para determinar pontos de entrada e saída.upOrDown
elongOrShort
Determinar o longo ou curto;percentInput
fixar o limite percentual de variação dos preços;closePositionDays
Para definir o número de dias para manter a posição.
A lógica central é: calcular o aumento/diminuição de hoje em relação a ontem. Se atingir a porcentagem do limiar de entrada, um sinal de negociação é acionado. Se for um sinal longo, quando o preço de hoje aumenta mais do que o limiar em relação a ontem, vá longo. Se for um sinal curto, quando o preço de hoje diminui mais do que o limiar em relação a ontem, vá curto.
Após o longo / curto, o dia de entrada e os próximos 4 dias serão marcados com cores no gráfico.
Gestão de riscos:
A estratégia de cruzamento da média móvel é uma estratégia quantitativa de negociação muito simples e prática. Ao julgar a relação entre as tendências de curto e longo prazo, ela se beneficia da natureza de tendência dos preços dos ativos. Esta estratégia é fácil de implementar com lógica clara e forma a base de muitas estratégias quantitativas de negociação. Podemos obter um melhor desempenho através do ajuste e otimização de parâmetros. Mas também precisamos gerenciar riscos e evitar o uso indevido.
/*backtest start: 2023-01-01 00:00:00 end: 2023-10-11 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 // Created by Leon Ross strategy(title = "DaysAfterCertainPercentChangev1", shorttitle = "DACPCv1", overlay = true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, calc_on_every_tick=true, initial_capital=100000) //Inputs longOrShort = input(title="Long=Checked Short=Unchecked", type=bool, defval=true) //long=true, down=false upOrDown = input(title="Direction of Today vs. Previous day: Up=Checked Down=Unchecked", type=bool, defval=true) //up=true, down=false: this is the direction of days vs previous day percentInput = input(title="Percent", type=float, defval=4.5) closePositionDays = input(title="How Many Days to Close Position", defval=4) //Conditions //percentUpValue = (close / close[1]) - 1 //percentUp = percentUpValue >= (percentInput/100.0) //upConditions = percentUp //percentDownValue = 1- (close / close[1]) //percentDown = percentDownValue >= (percentInput/100.0) //downConditions = percentDown upValue = (close / close[1]) - 1 downValue = 1 - (close / close[1]) allConditions = if(upOrDown) upValue >= (percentInput/100.0) else downValue >= (percentInput/100.0) //Plots bgcolor(allConditions ? (upOrDown ? green : red) : na, transp=70) bgcolor(allConditions ? silver : na, transp=70, offset=1) bgcolor(allConditions ? silver : na, transp=70, offset=2) bgcolor(allConditions ? silver : na, transp=70, offset=3) bgcolor(allConditions ? silver : na, transp=70, offset=4) //bgcolor(downConditions == 1 ? red : na, transp=70) //bgcolor(downConditions == 1 ? silver : na, transp=70, offset=1) //bgcolor(downConditions == 1 ? silver : na, transp=70, offset=2) //bgcolor(downConditions == 1 ? silver : na, transp=70, offset=3) //bgcolor(downConditions == 1 ? silver : na, transp=70, offset=4) //Entires if(longOrShort) strategy.entry(id = "Long", long = true, when = allConditions) else strategy.entry(id = "Short", long = false, when = allConditions) //Exits if (barssince(allConditions) == closePositionDays) if(longOrShort) strategy.close("Long") else strategy.close("Short")