Le flux complet d’une stratégie Lucrum
Objectif : faire passer l’idée « double moyenne mobile + filtre RSI » d’une description en langage naturel jusqu’à sa publication sur le marché des stratégies.
Architecture
Du langage naturel à la publication, la note sert d’aiguillage : une note ≥ A déclenche la publication directe, en dessous de A le parcours passe par l’optimisation IA puis un nouveau backtest.
graph TB
NL[Langage naturel] --> GEN[Génération IA de la stratégie]
GEN --> CODE[Code vnpy]
CODE --> BT[Backtest sur données historiques]
BT --> SCORE{Notation}
SCORE -->|En dessous de A| OPT[Suggestions d’optimisation IA]
OPT --> BT
SCORE -->|Niveau A atteint| MKT[Publication sur le marché des stratégies]Processus complet
Description en langage naturel — accédez à lucrum.lurus.cn → Nouvelle stratégie → collez la description :
Stratégie de croisement de deux moyennes mobiles : acheter lorsque la moyenne 5 jours croise à la hausse la moyenne 20 jours, vendre lorsqu’elle croise à la baisse. Ajouter un filtre RSI(14) : pas d’achat lorsque le RSI > 70. Stop-loss 5 %, take-profit 15 %.
Génération IA du code vnpy
pythonfrom vnpy.app.cta_strategy import CtaTemplate import talib class MA_RSI_Strategy(CtaTemplate): fast_window = 5 slow_window = 20 rsi_window = 14 rsi_upper = 70 stop_loss_pct = 0.05 take_profit_pct = 0.15 def on_bar(self, bar): self.am.update_bar(bar) if not self.am.inited: return fast_ma = talib.SMA(self.am.close_array, self.fast_window)[-1] slow_ma = talib.SMA(self.am.close_array, self.slow_window)[-1] rsi = talib.RSI(self.am.close_array, self.rsi_window)[-1] if self.pos == 0 and fast_ma > slow_ma and rsi < self.rsi_upper: self.buy(bar.close_price, 1) elif self.pos > 0 and (fast_ma < slow_ma): self.sell(bar.close_price, self.pos)Backtest — choisissez la période de backtest (2 dernières années par défaut), puis cliquez sur Exécuter :
回测期间: 2024-01-01 ~ 2025-12-31 夏普比率: 1.15 最大回撤: 11.3% 胜率: 56% 年化收益: 18.4% 评级: B (收益良好,风控合格)Optimisation IA — Lucrum propose des pistes d’amélioration :
Le seuil actuel du filtre RSI (70) est trop permissif : 8 faux signaux de cassure dans le backtest. Recommandations :
- Resserrer le seuil RSI à 65
- Ajouter un filtre par moyenne mobile 5 jours du volume
- Élargir le stop-loss de 5 % à 7 % (pour éviter les sorties dues au bruit)
Sharpe estimé → 1,42, drawdown → 9,2 %
Acceptez les suggestions et relancez le backtest :
夏普比率: 1.44 最大回撤: 9.1% 胜率: 62% 评级: A (收益优秀,风控良好)Publication sur le marché des stratégies — accédez aux détails de la stratégie → bouton Publier → renseignez la tarification :
Champ Exemple Nom de la stratégie MA_RSI_A股趋势 v2 Partage des revenus Auteur 70 % / Plateforme 30 % Période d’essai 7 jours Prix d’abonnement recommandé 99 Lubei/mois Une fois la revue de conformité validée, la stratégie peut être publiée sur le marché des stratégies.
Le passage de B à A vient du tour d’optimisation
Le premier backtest donne la note B (Sharpe 1,15). Après acceptation des suggestions d’optimisation IA et un nouveau backtest, le Sharpe monte à 1,44 et le drawdown descend à 9,1 %, atteignant le niveau A — qui ouvre l’aiguillage vers la publication.
Concepts clés
Le rendement excédentaire par unité de risque.
La baisse entre le plus haut historique et le creux le plus bas.
La classe de base des stratégies de vnpy.