//+------------------------------------------------------------------+ //| Calculer le bénéfice total et le nombre d'opérations pour la période sélectionnée. //+------------------------------------------------------------------+ void CalculateProfit() { total_profit = 0; total_deals = 0; HistorySelect(0, TimeCurrent()); int total_orders = HistoryDealsTotal(); for (int i = total_orders - 1; i >= 0; i--) { ulong deal_ticket = HistoryDealGetTicket(i); datetime deal_time = (datetime)HistoryDealGetInteger(deal_ticket, DEAL_TIME); // Pourquoi cette ligne n'est-elle pas plus basse que la suivante ? if (HistoryDealGetInteger(deal_ticket, DEAL_ENTRY) != 1) continue; // Qu'en est-il des transactions CloseBy et IN-commission ? if (deal_time >= start_date && deal_time <= end_date) // Pourquoi pas HistorySelect ? { string deal_symbol = HistoryDealGetString(deal_ticket, DEAL_SYMBOL); int deal_magic = (int)HistoryDealGetInteger(deal_ticket, DEAL_MAGIC); int deal_type = (int)HistoryDealGetInteger(deal_ticket, DEAL_TYPE); // Filtrage par type de transaction (achat ou vente) bool type_filter = (deal_type == 0 || deal_type == 1); // Filtrage des caractères bool symbol_filter = (StringFind(current_symbols, "ALL") != -1) || (StringFind(current_symbols, deal_symbol) != -1); // Il est coûteux de vérifier la première condition à chaque fois dans la boucle. // Filtrage par Magiks bool magic_filter_all = (StringFind(current_magics, "ALL") != -1); // Il est coûteux de vérifier à chaque fois dans une boucle. // Diviser la chaîne avec les mages en un tableau string magic_values[]; int count = StringSplit(current_magics, ',', magic_values); // Ce point aurait également dû être retiré de la boucle. // Vérifier la présence de "Empty" et de magick 0 bool magic_filter_empty = false; for (int j = 0; j < count; j++) // Cher cycle. { if (magic_values[j] == "Empty" && deal_magic == 0) // Il est moins coûteux de vérifier d'abord la deuxième condition. { magic_filter_empty = true; break; } } // Vérifier la présence d'un magik spécifique bool magic_filter_exact = false; for (int j = 0; j < count; j++) { if (IntegerToString(deal_magic) == magic_values[j]) // Pourquoi comparer des variables de type chaîne de caractères entre elles ? { magic_filter_exact = true; break; } }
Quelques commentaires sur le code.
Beau travail. Merci pour votre partage.
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Panneau de calcul du bénéfice historique:
Ce script CalculateHistoryProfit version 1.0 est conçu pour calculer les bénéfices d'une période donnée à l'aide d'un panneau graphique.
Author: Sergey Porphiryev