Estratégia de negociação algorítmica de alto desempenho baseada em modelos quantitativos

Autora:ChaoZhang, Data: 2023-12-22 13:14:33
Tags:

img

Resumo

Esta estratégia é uma estratégia de negociação algorítmica de alto desempenho baseada em modelos quantitativos.

Princípio da estratégia

O núcleo desta estratégia é o modelo de volume de Modelius. Este modelo identifica oportunidades de negociação quantitativas no mercado, detectando mudanças de preço e volume. Especificamente, a estratégia combina preço de fechamento, preço de abertura, preço mais alto, preço mais baixo para calcular a direção da linha K atual com base em certas regras. Quando a direção da linha K muda, a qualidade da oportunidade de negociação quantitativa é julgada com base no volume de negociação. Além disso, a estratégia também combina o indicador SAR e o indicador de média móvel para ajudar a determinar o tempo de entrada e saída.

A lógica básica de negociação é ir longo quando o indicador passa de negativo para positivo e ir curto quando o indicador passa de positivo para negativo.

Análise das vantagens

A maior vantagem desta estratégia é que o modelo de volume de Modelius pode identificar efetivamente oportunidades de negociação quantitativas. Em comparação com os indicadores técnicos tradicionais, este modelo presta mais atenção às mudanças de volume, o que é muito prático na negociação quantitativa de alta frequência de hoje. Além disso, as regras de entrada da estratégia são relativamente rígidas, o que pode efetivamente evitar a perda de oportunidades de negociação quantitativas, reduzindo a probabilidade de desordem tanto quanto possível.

Análise de riscos

O principal risco desta estratégia é que o modelo de Volume Modelius em si não pode evitar completamente o ruído. Quando há flutuações anormais do mercado, isso levará a sinais de negociação errados. Além disso, as configurações de parâmetros na estratégia também afetarão os resultados finais.

Para controlar os riscos, os parâmetros podem ser ajustados em conformidade e combinados com outros indicadores para julgamento auxiliar.

Orientações de otimização

O algoritmo de aprendizagem de máquina pode ser considerado para otimizar dinamicamente as configurações de parâmetros. ou combinar análise de sentimento e outros indicadores para melhorar a precisão da decisão. Além disso, a correlação entre diferentes variedades pode ser estudada para estabelecer um modelo de arbitragem multi-variedade.

Resumo

Em resumo, esta estratégia utiliza as vantagens do modelo quantitativo de volume de Modelius e projeta um conjunto de estratégias de negociação algorítmicas com alta operabilidade.


/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=3
strategy(title="strategy modelius volume model ", shorttitle="mvm",overlay=true, calc_on_order_fills=true, default_qty_type=strategy.percent_of_equity, default_qty_value=50, overlay=false)

method = input(defval="ATR", options=["ATR", "Traditional", "Part of Price"], title="Renko Assignment Method")
methodvalue = input(defval=14.0, type=float, minval=0, title="Value")
pricesource = input(defval="Close", options=["Close", "Open / Close", "High / Low"], title="Price Source")
useClose = pricesource == "Close"
useOpenClose = pricesource == "Open / Close" or useClose
useTrueRange = input(defval="Auto", options=["Always", "Auto", "Never"], title="Use True Range instead of Volume")
isOscillating=input(defval=true, type=bool, title="Oscillating")
normalize=input(defval=false, type=bool, title="Normalize")
vol = useTrueRange == "Always" or (useTrueRange == "Auto" and na(volume))? tr : volume
op = useClose ? close : open
hi = useOpenClose ? close >= op ? close : op : high
lo = useOpenClose ? close <= op ? close : op : low

if method == "ATR"
    methodvalue := atr(round(methodvalue))
if method == "Part of Price"
    methodvalue := close/methodvalue

currclose = na
prevclose = nz(currclose[1])
prevhigh = prevclose + methodvalue
prevlow = prevclose - methodvalue
currclose := hi > prevhigh ? hi : lo < prevlow ? lo : prevclose

direction = na
direction := currclose > prevclose ? 1 : currclose < prevclose ? -1 : nz(direction[1])
directionHasChanged = change(direction) != 0
directionIsUp = direction > 0
directionIsDown = direction < 0

barcount = 1
barcount := not directionHasChanged and normalize ? barcount[1] + barcount : barcount
vol := not directionHasChanged ? vol[1] + vol : vol
res = barcount > 1 ? vol/barcount : vol


x=isOscillating and directionIsDown ? -res : res

TP = input(0) * 10
SL = input(0) * 10
TS = input(1) * 10
TO = input(3) * 10
CQ = 100

TPP = (TP > 0) ? TP : na
SLP = (SL > 0) ? SL : na
TSP = (TS > 0) ? TS : na
TOP = (TO > 0) ? TO : na

longCondition = crossover(x,0)
if (longCondition)
    strategy.entry("Long", strategy.long)


shortCondition = crossunder(x,0)
if (shortCondition)
    strategy.entry("Short", strategy.short)

strategy.exit("Close Short", "Short", qty_percent=CQ, profit=TPP, loss=SLP, trail_points=TSP, trail_offset=TOP)
strategy.exit("Close Long", "Long", qty_percent=CQ, profit=TPP, loss=SLP, trail_points=TSP, trail_offset=TOP)

Mais.