Cette stratégie utilise les concepts de filtre Kalman et de réversion moyenne pour capturer les fluctuations anormales à court terme des cours des actions et mettre en œuvre le trading directionnel des actions. La stratégie établit d'abord un modèle de rapport de prix entre un stock et un indice de marché, puis utilise la technique de filtre Kalman pour prédire et filtrer le ratio.
L'idée de base de la stratégie est d'établir un modèle de ratio de prix entre le prix de l'action elle-même et le prix de l'indice du marché. Ce ratio reflète le niveau de prix des actions individuelles par rapport au marché global. Lorsque le ratio est élevé, il est considéré que l'action individuelle est surévaluée et un signal de vente est généré. Lorsque le ratio est faible, il est considéré que l'action individuelle est sous-évaluée et un signal d'achat est généré.
Pour filtrer le signal de rapport en douceur, la stratégie adopte l'algorithme de filtre Kalman. Le filtre Kalman pèse la valeur observée réelle du rapport avec la valeur prédite et met à jour la prédiction du rapport en temps réel. Et calcule une valeur de filtre Kalman en douceur. Les signaux de trading sont générés lorsque la valeur filtrée dépasse 2 écarts types au-dessus ou au-dessous des niveaux normaux.
En outre, la stratégie prend également en compte les facteurs de volume de négociation. Les vrais signaux de négociation ne sont générés que lorsque le volume de négociation est important.
Le plus grand avantage de cette stratégie est l'assouplissement et la prédiction efficaces du ratio de prix à l'aide de l'algorithme de filtre Kalman. Par rapport aux modèles de réversion moyenne simples, le filtre Kalman peut mieux refléter les changements dynamiques des prix, en particulier lorsque les prix fluctuent fortement. Cela permet à la stratégie de détecter les anomalies de prix en temps opportun et de générer des signaux de trading précis.
Deuxièmement, la combinaison du volume de négociation améliore également l'applicabilité pratique de la stratégie.
Dans l'ensemble, la stratégie combine avec succès le filtrage Kalman, la réversion moyenne, l'analyse du volume des transactions et d'autres techniques pour former une stratégie de négociation quantitative solide.
Bien que la stratégie soit théoriquement et techniquement solide, il existe encore des risques potentiels dans l'utilisation réelle qui nécessitent une attention particulière.
La première est le risque du modèle. Certains paramètres clés du modèle de filtre Kalman, tels que la variance du bruit de processus, la variance du bruit d'observation, etc., doivent être estimés sur la base de données historiques. Si l'estimation est inexacte ou s'il y a un changement majeur dans les conditions du marché, cela entraînera un écart dans la prédiction du modèle.
La deuxième est le risque de coûts de glissement. Les transactions fréquentes entraîneront des coûts de glissement plus élevés, ce qui érodera les rendements de la stratégie. L'optimisation des paramètres et le filtrage du volume des transactions peuvent réduire les transactions inutiles dans une certaine mesure.
Enfin, il y a un certain risque systémique de marché à suivre l'indice de marché comme référence. Lorsque l'ensemble du marché fluctue fortement, le rapport de prix entre les actions individuelles et le marché sera également anormal. La stratégie générera alors de mauvais signaux. Nous pouvons envisager de choisir un indice plus stable comme référence.
La stratégie peut être encore optimisée:
Utiliser des modèles d'apprentissage en profondeur plus complexes pour adapter et prédire les ratios de prix.
Optimiser les règles de filtrage du volume des transactions afin d'obtenir des paramètres de seuil plus dynamiques et intelligents, ce qui réduit la probabilité de faux échanges.
Testez différents indices de marché comme repères stratégiques et choisissez des indices dont les fluctuations sont plus faibles et plus stables, ce qui réduit l'impact du risque systémique du marché.
Incorporer l'analyse fondamentale des actions pour éviter de négocier certaines actions dont les fondamentaux se sont considérablement détériorés.
Utiliser des données intraday à haute fréquence pour le backtesting et l'optimisation de la stratégie.
La stratégie capture avec succès les fluctuations anormales des prix à court terme des actions en utilisant le modèle de filtre Kalman. Pendant ce temps, l'introduction de signaux de volume améliore également la praticité de la stratégie. Bien qu'il existe encore des risques de modèle et des risques de marché, il s'agit d'une stratégie de trading quantitative très prometteuse. Il y a beaucoup de place pour l'amélioration et le potentiel d'application dans la future optimisation du modèle et du signal.
/*backtest start: 2023-12-21 00:00:00 end: 2023-12-28 00:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © xXM3GAXx //@version=5 strategy("My strategy", overlay=true) //SPY or QQQ context = request.security("BTC_USDT:swap", timeframe.period, input(close)) //our stock particular = input(close) //ratio src = ta.roc(particular, 1) / math.abs(ta.roc(context, 1)) //kalman calculation Sharpness = input.float(1.0) K = input.float(1.0) greencolor = color.lime redcolor = color.red velocity = 0.0 kfilt = 0.0 Distance = src - nz(kfilt[1], src) Error = nz(kfilt[1], src) + Distance * math.sqrt(Sharpness*K/ 100) velocity := nz(velocity[1], 0) + Distance*K / 100 kfilt := Error + velocity //2 std devs up and down upper = kfilt[1] + 2 * ta.stdev(kfilt, input(20)) lower = kfilt[1] - 2 * ta.stdev(kfilt, input(20)) //plotting for visuals plot(kfilt, color=velocity > 0 ? greencolor : redcolor, linewidth = 2) plot(upper) plot(lower) //plot(ta.ema(ta.roc(particular, 1)/ta.roc(context, 1), 5), color = #00ffff, linewidth=2) //volume data vol = volume volema = ta.ema(volume, 10) //buy when ratio too low longCondition = kfilt<=lower and vol>=volema if (longCondition) strategy.entry("My Long Entry Id", strategy.long) //sell when ratio too high shortCondition = kfilt>=upper and vol>=volema if (shortCondition) strategy.entry("My Short Entry Id", strategy.short)