//+------------------------------------------------------------------+ //| Calculate total profit and deal count for the selected period | //+------------------------------------------------------------------+ 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); // Почему эта строка не ниже следующей? if (HistoryDealGetInteger(deal_ticket, DEAL_ENTRY) != 1) continue; // А как же CloseBy-сделки и IN-комиссия? if (deal_time >= start_date && deal_time <= end_date) // Почему не через 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); // Фильтрация по типу сделки (покупка или продажа) bool type_filter = (deal_type == 0 || deal_type == 1); // Фильтрация по символам bool symbol_filter = (StringFind(current_symbols, "ALL") != -1) || (StringFind(current_symbols, deal_symbol) != -1); // Первое условие проверять каждый раз в цикле - дорого. // Фильтрация по магикам bool magic_filter_all = (StringFind(current_magics, "ALL") != -1); // Проверять каждый раз в цикле - дорого. // Разделение строки с магиками на массив string magic_values[]; int count = StringSplit(current_magics, ',', magic_values); // Это тоже нужно было вынести из цикла. // Проверка на "Empty" и магик 0 bool magic_filter_empty = false; for (int j = 0; j < count; j++) // Дорогой цикл. { if (magic_values[j] == "Empty" && deal_magic == 0) // Дешевле сначала проверить второе условие. { magic_filter_empty = true; break; } } // Проверка на конкретный магик bool magic_filter_exact = false; for (int j = 0; j < count; j++) { if (IntegerToString(deal_magic) == magic_values[j]) // Зачем сравнивать между собой string-переменные? { magic_filter_exact = true; break; } }
Некоторые замечания по коду.
Отличная работа. Спасибо, что поделились.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
CalculateHistoryProfit:
Этот скрипт CalculateHistoryProfit версии 1.0 предназначен для расчета прибыли за указанный период с использованием графической панели.
Автор: Sergey Porphiryev