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.