//+------------------------------------------------------------------+ //| Calcolare il profitto totale e il conteggio delle transazioni per il periodo selezionato. //+------------------------------------------------------------------+ 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); // Perché questa riga non è più bassa della successiva? if (HistoryDealGetInteger(deal_ticket, DEAL_ENTRY) != 1) continue; // Che dire degli accordi CloseBy e delle commissioni IN? if (deal_time >= start_date && deal_time <= end_date) // Perché non 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); // Filtro per tipo di transazione (acquisto o vendita) bool type_filter = (deal_type == 0 || deal_type == 1); // Filtraggio dei caratteri bool symbol_filter = (StringFind(current_symbols, "ALL") != -1) || (StringFind(current_symbols, deal_symbol) != -1); // È costoso controllare la prima condizione ogni volta nel ciclo. // Filtraggio da parte di Magiks bool magic_filter_all = (StringFind(current_magics, "ALL") != -1); // È costoso controllare ogni volta in un ciclo. // Dividere la stringa con i maghi in un array string magic_values[]; int count = StringSplit(current_magics, ',', magic_values); // Anche questo dovrebbe essere eliminato dal ciclo. // Verificare la presenza di "Empty" e di magick 0 bool magic_filter_empty = false; for (int j = 0; j < count; j++) // Caro ciclo. { if (magic_values[j] == "Empty" && deal_magic == 0) // È più conveniente verificare prima la seconda condizione. { magic_filter_empty = true; break; } } // Verificare la presenza di una specifica magia bool magic_filter_exact = false; for (int j = 0; j < count; j++) { if (IntegerToString(deal_magic) == magic_values[j]) // Perché confrontare le variabili stringa tra loro? { magic_filter_exact = true; break; } }
Alcuni commenti sul codice.
Ottimo lavoro. Grazie per la condivisione.
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Pannello per il calcolo dell'utile storico:
Questo script CalculateHistoryProfit versione 1.0 è stato progettato per calcolare il profitto per un periodo specifico utilizzando un pannello grafico.
Author: Sergey Porphiryev