Cette stratégie est une stratégie de trading algorithmique de haute performance basée sur des modèles quantitatifs. Elle utilise le modèle de volume de Modelius comme modèle de base et l'étend et l'optimise davantage.
Le noyau de cette stratégie est le modèle de volume de Modelius. Ce modèle identifie les opportunités de trading quantitatives sur le marché en détectant les changements de prix et de volume. Plus précisément, la stratégie combine le prix de clôture, le prix d'ouverture, le prix le plus élevé, le prix le plus bas pour calculer la direction de la ligne K actuelle en fonction de certaines règles. Lorsque la direction de la ligne K change, la qualité de l'opportunité de trading quantitative est jugée en fonction du volume de trading. En outre, la stratégie combine également l'indicateur SAR et l'indicateur de moyenne mobile pour aider à déterminer le moment d'entrée et de sortie.
La logique de base du trading est d'aller long lorsque l'indicateur passe de négatif à positif et de passer court lorsque l'indicateur passe de positif à négatif.
Le plus grand avantage de cette stratégie est que le modèle de volume de Modelius peut identifier efficacement les opportunités de négociation quantitatives. Par rapport aux indicateurs techniques traditionnels, ce modèle accorde plus d'attention aux changements de volume, ce qui est très pratique dans le commerce quantitatif à haute fréquence d'aujourd'hui.
Le principal risque de cette stratégie est que le modèle de volume de Modelius lui-même ne peut pas éviter complètement le bruit. Lorsqu'il y a une fluctuation anormale du marché, cela conduira à de mauvais signaux de trading. En outre, les paramètres définis dans la stratégie auront également une incidence sur les résultats finaux.
Pour contrôler les risques, les paramètres peuvent être ajustés en conséquence et combinés avec d'autres indicateurs pour un jugement auxiliaire.
Il y a encore de la place pour optimiser cette stratégie. Par exemple, les algorithmes d'apprentissage automatique peuvent être considérés pour optimiser dynamiquement les paramètres. Ou combiner l'analyse du sentiment et d'autres indicateurs pour améliorer la précision des décisions. En outre, la corrélation entre différentes variétés peut être étudiée pour établir un modèle d'arbitrage multi-variétés.
En résumé, cette stratégie utilise les avantages du modèle quantitatif de volume de Modelius et conçoit un ensemble de stratégies de trading algorithmiques avec une haute operabilité.
/*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)