A estratégia de cruzamento de movimentação é uma estratégia de negociação quantitativa muito comum. A estratégia utiliza a média móvel para determinar a tendência e obter lucro. Quando a média móvel de curto prazo cruza a média móvel de longo prazo, indica que o preço da ação começa a subir e pode fazer mais; Quando a média móvel de curto prazo cruza a média móvel de longo prazo abaixo, indica que o preço da ação começa a cair e pode fazer vazio.
A estratégia baseia-se no movimento do equilíbrio para determinar o momento de compra e venda.upOrDownelongOrShortDois parâmetros de entrada de Boole para determinar o excesso de vazio;percentInputParâmetros de entrada para definir a porcentagem de desvalorização de mudanças no preço das ações; usoclosePositionDaysIntroduza um parâmetro para definir o número de dias de posse.
A lógica central da estratégia é: Calcule o aumento ou a diminuição de hoje em relação a ontem, e emite um sinal de negociação se atingir o percentual de diminuição de entrada. Se for de baixa, faça mais quando o aumento ou a diminuição de hoje em relação a ontem ultrapassa a diminuição de valor; se for de baixa, faça zero quando o aumento ou a diminuição de hoje em relação a ontem ultrapassa a diminuição de valor.
Depois de fazer mais vazio, o dia será marcado em cores diferentes no mapa e os 4 dias seguintes.
Medidas de controle de risco:
A estratégia de cruzamento de equilíbrio móvel é uma estratégia de negociação quantitativa muito simples e prática. Ela aproveita a tendência dos preços das ações, julgando a relação entre as tendências de curto e longo prazo. A estratégia é fácil de implementar, é clara em termos lógicos e é a base de muitas estratégias de negociação quantitativa.
/*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")