
A estratégia é uma estratégia de negociação quantitativa altamente eficiente, personalizada com base em modelos quantitativos. A estratégia usa o Modelo Volume de Modélius como modelo básico e é ampliada e otimizada com base nisso. A estratégia pode capturar oportunidades de negociação quantitativa no mercado e obter lucros estáveis.
O núcleo da estratégia é o modelo de volume da Modelius. O modelo usa a variação do preço e do volume de transações para identificar oportunidades de negociação quantitativas no mercado. Concretamente, a estratégia combina o uso do preço de fechamento, preço de abertura, preço mais alto e preço mais baixo para calcular a direção da linha K atual de acordo com uma determinada regra.
A lógica básica de negociação é fazer mais quando o indicador quebra de negativo para positivo; e fechar quando o indicador quebra de positivo para negativo. Além disso, a estratégia também configura stop loss, stop loss e tracking stop loss para controlar o risco.
A maior vantagem da estratégia é que ela usa o Modelis Volume para identificar com eficiência as oportunidades de negociação de quantificação. Comparado com os indicadores técnicos tradicionais, o modelo está mais focado nas mudanças no volume de negociação, o que é muito prático nas negociações de quantificação de alta frequência atuais. Além disso, as regras de entrada da estratégia são mais rigorosas, evitando efetivamente a perda de oportunidades de negociação de quantificação e minimizando a probabilidade de desordem.
O principal risco da estratégia é que o Modelius Volume não pode, por si só, evitar completamente o ruído. Quando o mercado se desloca de forma anormal, isso pode causar erros nos sinais de negociação. Além disso, a configuração de parâmetros na estratégia também pode afetar os resultados finais.
Para controlar o risco, os parâmetros podem ser adequadamente ajustados e, em combinação com outros indicadores, o julgamento auxiliar pode ser feito. Além disso, a posição de parada e parada de perda deve ser razoavelmente definida.
A estratégia também tem um certo espaço de otimização. Por exemplo, pode-se considerar a combinação de algoritmos de aprendizagem de máquina para otimizar dinamicamente a configuração de parâmetros. Ou a combinação de indicadores como a análise de sentimentos para melhorar a precisão da decisão. Além disso, pode-se estudar a correlação entre diferentes variedades e criar modelos de arbitragem multivariada.
Em geral, a estratégia utiliza os benefícios do modelo de volume de Modelius para projetar uma estratégia de negociação quantitativa com maior operabilidade. Pode ser melhorada por meio de ajustes de parâmetros, extensão de modelos e aprendizado de máquina, para obter melhores resultados estáveis em negociações reais.
/*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)