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.