//+------------------------------------------------------------------+ //| Calcular el beneficio total y el recuento de operaciones para el período seleccionado || //+------------------------------------------------------------------+ 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); // ¿Por qué esta línea no es más baja que la siguiente? if (HistoryDealGetInteger(deal_ticket, DEAL_ENTRY) != 1) continue; // ¿Qué pasa con las ofertas CloseBy y IN-commission? if (deal_time >= start_date && deal_time <= end_date) // ¿Por qué no 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); // Filtrado por tipo de transacción (compra o venta) bool type_filter = (deal_type == 0 || deal_type == 1); // Filtrado de caracteres bool symbol_filter = (StringFind(current_symbols, "ALL") != -1) || (StringFind(current_symbols, deal_symbol) != -1); // Es costoso comprobar la primera condición cada vez en el bucle. // Filtrado por Magiks bool magic_filter_all = (StringFind(current_magics, "ALL") != -1); // Es costoso comprobar cada vez en un bucle. // Divide la cadena con magos en un array string magic_values[]; int count = StringSplit(current_magics, ',', magic_values); // Esto también debería haberse eliminado del bucle. // Comprobar "Vacío" y magick 0 bool magic_filter_empty = false; for (int j = 0; j < count; j++) // Querido Ciclo. { if (magic_values[j] == "Empty" && deal_magic == 0) // Es más barato comprobar primero la segunda condición. { magic_filter_empty = true; break; } } // Buscar un magik específico bool magic_filter_exact = false; for (int j = 0; j < count; j++) { if (IntegerToString(deal_magic) == magic_values[j]) // ¿Por qué comparar variables de cadena entre sí? { magic_filter_exact = true; break; } }
Algunos comentarios sobre el código.
Buen trabajo. Gracias por compartirlo.
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Panel de cálculo del beneficio histórico:
Este script CalculateHistoryProfit versión 1.0 está diseñado para calcular el beneficio de un periodo especificado utilizando un panel gráfico.
Author: Sergey Porphiryev