Développer un outil personnalisé de backtesting de stratégie de trading, Excel VBA

Développer un outil personnalisé de backtesting de stratégie de trading, Excel VBA

Voici un guide détaillé pour développer un outil personnalisé de backtesting de stratégie de trading avec Excel VBA. Ce guide couvrira les étapes de la configuration de la feuille Excel, l’écriture du code VBA, et l’exécution du backtest.
Étape 1 : Configuration de la feuille Excel
Avant de commencer avec le code VBA, nous devons d’abord configurer la feuille Excel. Nous supposerons que vous avez des données historiques de prix nécessaires pour le backtesting.
Disposition de la feuille Excel :
1. Données Historiques : Habituellement, vos données de prix historiques seront dans des colonnes comme :

  • Colonne A : Date
  • Colonne B : Prix d’ouverture
  • Colonne C : Prix maximum
  • Colonne D : Prix minimum
  • Colonne E : Prix de clôture
  • Colonne F : Volume (facultatif, mais utile pour certaines stratégies)

2. Paramètres de la stratégie : Dans une autre section de la feuille Excel, nous définirons les paramètres pour la stratégie de trading (comme les moyennes mobiles, les seuils, etc.).

  • Cellule H1 : Période de la Moyenne Mobile Rapide (par exemple, 50)
  • Cellule H2 : Période de la Moyenne Mobile Lente (par exemple, 200)
  • Cellule H3 : Seuil d’achat (par exemple, 1,02 pour 2 % au-dessus de la moyenne mobile lente)

3. Résultats du backtest :

  • Colonne G : Signaux (Acheter/Vendre)
  • Colonne H : Position de trading (Long/Court)
  • Colonne I : Valeur du portefeuille (calculée en fonction des décisions de trading)
  • Colonne J : P&L (Profit et Perte) par trade.

Exemple de disposition de la feuille :
       A |       B        |  C    | D    | E         | F          | G       | H          | I                | J
1  Date | Ouverture | Haut | Bas | Clôture | Volume | Signal | Position | Portefeuille | P&L
2  01/01/2020 | 100 | 105 | 98 | 102 | 10000 |         |         |        |
3  02/01/2020 | 102 | 106 | 101 | 104 | 12000 |        |        |        |

Étape 2 : Écriture du code VBA
Maintenant, passons à l’écriture du code VBA qui implémentera la logique du backtesting. Le code :
1. Calculera les moyennes mobiles pour les périodes choisies.
2. Générera des signaux de trading (acheter/vendre) en fonction de la stratégie.
3. Suivra la valeur du portefeuille et calculera les profits et pertes.
Exemple de code VBA :
1. Ouvrez l’éditeur Visual Basic pour Applications (VBA) dans Excel (appuyez sur Alt + F11).
2. Insérez un module (clic droit sur le projet dans l’explorateur de projets > Insérer > Module).
3. Copiez et collez le code VBA suivant :

Sub BacktestStrategy()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim fastMA As Integer
    Dim slowMA As Integer
    Dim closePrice As Double
    Dim fastMAValue As Double
    Dim slowMAValue As Double
    Dim signal As String
    Dim position As String
    Dim portfolioValue As Double
    Dim tradeSize As Double
    Dim initialCapital As Double
    Dim pnl As Double
    Dim totalPnL As Double
    ' Paramètres de la feuille de calcul et de la stratégie
    Set ws = ThisWorkbook.Sheets("Sheet1")
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    fastMA = ws.Range("H1").Value  ' Période de la Moyenne Mobile Rapide
    slowMA = ws.Range("H2").Value  ' Période de la Moyenne Mobile Lente
    initialCapital = 100000  ' Capital initial
    tradeSize = 1000  ' Nombre d'actions par transaction
    ' Initialisation de la valeur du portefeuille et du PnL total
    portfolioValue = initialCapital
    totalPnL = 0
    ' Boucle pour effectuer le backtest
    For i = slowMA + 1 To lastRow ' Démarrer à partir de la ligne où nous avons assez de données pour les moyennes mobiles
        closePrice = ws.Cells(i, 5).Value  ' Colonne des prix de clôture
        ' Calcul des moyennes mobiles
        fastMAValue = Application.WorksheetFunction.Average(ws.Range(ws.Cells(i - fastMA + 1, 5), ws.Cells(i, 5)))
        slowMAValue = Application.WorksheetFunction.Average(ws.Range(ws.Cells(i - slowMA + 1, 5), ws.Cells(i, 5)))
        ' Générer le signal d'achat/vente en fonction de la stratégie
        If fastMAValue > slowMAValue * 1.02 Then ' Moyenne mobile rapide 2 % au-dessus de la lente
            signal = "Buy"
        ElseIf fastMAValue < slowMAValue * 0.98 Then ' Moyenne mobile rapide 2 % en-dessous de la lente
            signal = "Sell"
        Else
            signal = "Hold"
        End If
        ' Appliquer la logique de la stratégie : Acheter, Vendre ou Garder
        If signal = "Buy" And position <> "Long" Then
            position = "Long"
            ws.Cells(i, 7).Value = "Buy"
            portfolioValue = portfolioValue - closePrice * tradeSize
        ElseIf signal = "Sell" And position <> "Short" Then
            position = "Short"
            ws.Cells(i, 7).Value = "Sell"
            portfolioValue = portfolioValue + closePrice * tradeSize
        Else
            ws.Cells(i, 7).Value = "Hold"
        End If
        ' Mise à jour de la valeur du portefeuille et calcul du PnL
        If position = "Long" Then
            pnl = (closePrice - ws.Cells(i - 1, 5).Value) * tradeSize
        ElseIf position = "Short" Then
            pnl = (ws.Cells(i - 1, 5).Value - closePrice) * tradeSize
        Else
            pnl = 0
        End If
        totalPnL = totalPnL + pnl
        ws.Cells(i, 8).Value = position
        ws.Cells(i, 9).Value = portfolioValue
        ws.Cells(i, 10).Value = pnl
    Next i
    MsgBox "Backtest terminé. PnL total : " & totalPnL
End Sub

Explication du Code :
1. Initialisation :

  • Le code initialise des variables telles que fastMA, slowMA, portfolioValue, etc.
  • La variable lastRow permet de déterminer la dernière ligne de données.
  • La stratégie utilise des moyennes mobiles (fastMA et slowMA) pour générer les signaux d’achat/vente.

2. Logique principale du Backtest :

  • Le code parcourt chaque ligne, en commençant à partir du point où nous avons suffisamment de données pour calculer les deux moyennes mobiles.
  • Il calcule les moyennes mobiles pour chaque ligne.
  • Il génère un signal pour « Acheter », « Vendre » ou « Garder » en fonction de la relation entre les moyennes mobiles.
  • La valeur du portefeuille est mise à jour à chaque transaction, et le profit ou la perte (PnL) est calculé.

3. Affichage des résultats :

  • Pour chaque ligne, le code stocke :
    • Le signal (« Acheter », « Vendre », « Garder »)
    • La position (« Long », « Court »)
    • La valeur du portefeuille après la transaction
    • Le PnL pour la transaction spécifique
  • Après la boucle, le PnL total est affiché dans une boîte de message.

Étape 3 : Exécution du Backtest
Pour exécuter le backtest :
1. Assurez-vous que vos données historiques sont correctement configurées dans la feuille Excel, comme indiqué à l’étape 1.
2. Appuyez sur Alt + F8, sélectionnez BacktestStrategy, puis cliquez sur « Exécuter ».
3. Le backtest sera exécuté, et les résultats (signaux, positions, valeur du portefeuille et PnL) seront affichés dans les colonnes correspondantes de la feuille.
Exemple de Résultats :

Date Prix de Clôture Signal Position Valeur du Portefeuille P&L
01/01/2020 102 Acheter Long 99,000 0
02/01/2020 104 Garder Long 100,000 2,000
03/01/2020 98 Vendre Court 101,500 6,000

Conclusion
Cet outil de backtesting en VBA vous permet de tester une stratégie de trading simple basée sur les moyennes mobiles. Le code peut être étendu avec des fonctionnalités supplémentaires, comme les frais de transaction, des stratégies plus complexes, ou des règles de gestion des risques.

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x