не работает код на ограничение сделок после серии убыточных

 
При тестировании не работает блок на ограничение сделок после серии убыточных (после 5 убыточных сделок подряд сделки не открываются в течение 2 месяцев) Вот фрагмент кода:
//| Проверка закрытых сделок на предмет убытков                      |
//+------------------------------------------------------------------+
void CheckClosedTrades()
{
    lossCount = 0; // Сбрасываем счетчик убыточных сделок при проверке
    ulong ordersTotal = HistoryDealsTotal(); // Получаем общее количество закрытых сделок
    
    for (ulong i = 0; i < ordersTotal; i++)
    {
        ulong ticket = HistoryDealGetTicket(i); // Получаем тикет сделки
        
        if (HistoryDealSelect(ticket)) // Убедимся, что сделка выбрана
        {
            // Проверяем, является ли сделка магическим номером нашего советника
            if (HistoryDealGetInteger(ticket, DEAL_MAGIC) == EA_Magic) 
            {
                double profit = HistoryDealGetDouble(ticket, DEAL_PROFIT); // Получаем прибыль сделки
                
                // Проверяем на убыточные сделки Sell
                if (HistoryDealGetInteger(ticket, DEAL_TYPE) == ORDER_TYPE_SELL && profit < 0) 
                {
                    lossCount++; // Увеличиваем счетчик убыточных сделок Sell
                    Alert("Обнаружена убыточная  сделка Sell, тикет: " + ticket);
                }

                // Проверяем на убыточные сделки Buy
                if (HistoryDealGetInteger(ticket, DEAL_TYPE) == ORDER_TYPE_BUY && profit < 0) 
                {
                    lossCount++; // Увеличиваем счетчик убыточных сделок Buy
                    Alert("Обнаружена убыточная  сделка Buy, тикет: " + ticket);
                }
            }
        }
    }

    // Проверка на общее количество убыточных сделок
    if (lossCount >= 5) 
    {
        tradeBanEndTime = TimeCurrent() + 60 * 60 * 24 * 30 * 2; // Два месяца задержки
        Alert("Достигнут лимит убыточных сделок. Торговля будет запрещена до: " + TimeToString(tradeBanEndTime, TIME_DATE | TIME_MINUTES));
    }
}

Буду очень благодарен за помощь в нахождении ошибки либо в предоставлении готового шаблона

 
ilmir2902:
При тестировании не работает блок на ограничение сделок после серии убыточных (после 5 убыточных сделок подряд сделки не открываются в течение 2 месяцев) Вот фрагмент кода:

Буду очень благодарен за помощь в нахождении ошибки либо в предоставлении готового шаблона

писать долго и муторно :-)

но в общем:

1. при загрузке (и при закрытии в минус) считать и запомнить все сделки за последние 4 месяца. (цикл от HistoryDealTotal()-1 до 0, то есть обратный вашему)

2. отсортировать по времени

3. от настоящего в прошлое, найти первый фрагмент где 5 сделок подряд убыточны и промежуток между сделками не более 2-х месяцев; если фрагмент найден - добавить макс.дате фрагмента 2 месяца

 
ilmir2902:
DEAL_TYPE

ENUM_DEAL_TYPE

Идентификатор

Описание

DEAL_TYPE_BUY

Покупка

DEAL_TYPE_SELL

Продажа

DEAL_TYPE_BALANCE

Начисление баланса

DEAL_TYPE_CREDIT

Начисление кредита

DEAL_TYPE_CHARGE

Дополнительные сборы

DEAL_TYPE_CORRECTION

Корректирующая запись

DEAL_TYPE_BONUS

Перечисление бонусов

DEAL_TYPE_COMMISSION

Дополнительные комиссии

DEAL_TYPE_COMMISSION_DAILY

Комиссия, начисляемая в конце торгового дня

DEAL_TYPE_COMMISSION_MONTHLY

Комиссия, начисляемая в конце месяца

DEAL_TYPE_COMMISSION_AGENT_DAILY

Агентская комиссия, начисляемая в конце торгового дня

DEAL_TYPE_COMMISSION_AGENT_MONTHLY

Агентская комиссия, начисляемая в конце месяца

DEAL_TYPE_INTEREST

Начисления процентов на свободные средства

DEAL_TYPE_BUY_CANCELED

Отмененная сделка покупки. Возможная ситуация, когда ранее совершенная сделка на покупку отменяется. В таком случае тип ранее совершенной сделки (DEAL_TYPE_BUY) меняется на DEAL_TYPE_BUY_CANCELED, а ее прибыль/убыток обнуляется. Ранее полученная прибыль/убыток начисляется/списывается со счета отдельной балансовой операцией

DEAL_TYPE_SELL_CANCELED

Отмененная сделка продажи. Возможная ситуация, когда ранее совершенная сделка на продажу отменяется. В таком случае тип ранее совершенной сделки (DEAL_TYPE_SELL) меняется на DEAL_TYPE_SELL_CANCELED, а ее прибыль/убыток обнуляется. Ранее полученная прибыль/убыток начисляется/списывается со счета отдельной балансовой операцией

DEAL_DIVIDEND

Начисление дивиденда

DEAL_DIVIDEND_FRANKED

Начисление франкированного дивиденда (освобожденного от уплаты налога)

DEAL_TAX

Начисление налога


А Вы сравниваете с ORDER_TYPE_BUY и ORDER_TYPE_SELL .

Вообще, логичней делать проверку сделки на выход из рынка.

ENUM_DEAL_ENTRY

Идентификатор

Описание

DEAL_ENTRY_IN

Вход в рынок

DEAL_ENTRY_OUT

Выход из рынка

DEAL_ENTRY_INOUT

Разворот

DEAL_ENTRY_OUT_BY

Закрытие встречной позицией

 

Потом уже смотреть профит по ней, и если он меньше нуля, то мотать счётчик.

 
ilmir2902:
При тестировании не работает блок на ограничение сделок после серии убыточных (после 5 убыточных сделок подряд сделки не открываются в течение 2 месяцев) Вот фрагмент кода:

Буду очень благодарен за помощь в нахождении ошибки либо в предоставлении готового шаблона

Да, и сохраняйте время, когда последний раз счётчик был равен нулю и проверяйте историю сделок по фин результату с этой даты.

Ну и на дату - "не позже чем два месяца назад" проверяйте, прежде чем считать убытки.