Skip to content
Cycle quantitatif Lucrum

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.

5 étapesde la description à la publication
S/A/B/C/Dnotation à cinq niveaux
vnpypile de génération du code

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.

Cycle d’une stratégie Lucrum
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 ​

  1. 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 %.

  2. Génération IA du code vnpy

    python
    from 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)
  3. 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 (收益良好,风控合格)
  4. 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 :

    1. Resserrer le seuil RSI à 65
    2. Ajouter un filtre par moyenne mobile 5 jours du volume
    3. É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 (收益优秀,风控良好)
  5. Publication sur le marché des stratégies — accédez aux détails de la stratégie → bouton Publier → renseignez la tarification :

    ChampExemple
    Nom de la stratégieMA_RSI_A股趋势 v2
    Partage des revenusAuteur 70 % / Plateforme 30 %
    Période d’essai7 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 ​

Ratio de SharpeSharpe RatioRatio de Sharpe : rendement excédentaire obtenu par unité de risque supportée. > 1,0 : excellent ; > 2,0 : exceptionnel.

Le rendement excédentaire par unité de risque.

Drawdown maximalMax DrawdownDrawdown maximal : baisse maximale en pourcentage entre un sommet historique et le creux qui suit. < 20 % : acceptable ; < 10 % : excellent.

La baisse entre le plus haut historique et le creux le plus bas.

CtaTemplateCtaTemplateClasse de base des modèles de stratégie de vnpy, qui définit les hooks de cycle de vie standard on_bar / on_tick / on_trade, etc.

La classe de base des stratégies de vnpy.

Étapes suivantes ​

Étapes suivantes

Powered by Lurus Technologies