Как сбросить счетчики ордеров в истории?

 

Есть советник который торгует каждый день до определенного результата в $. Он складывает все закрытые позиции из истории и открытые текущие позиции. Когда профит достиг ждет следующего дня.

Как сбросить после CloseAll(); все счетчики CalculateProfitHistory(); CalculateBuyHistory(); CalculateSellHistory();

Подскажите кодом. Ни как не могу сообразить.


//+------------------------------------------------------------------+
void OnTick()
  {
        if(CalculateProfitHistory() + CalculateProfitTrade() <= 50)
        {
         CloseAll();
	//сбросить все счетчикиж
        }
}
//+------------------------------------------------------------------+
double CalculateProfitHistory()
  {
   double oProfit = 0;
   for(int i = OrdersHistoryTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol() == Symbol()&& OrderMagicNumber() == Magic)
           {
            if(OrderType() == OP_BUY || OrderType() == OP_SELL)
              {
               oProfit += OrderProfit();
              }
           }
        }
     }

   return(oProfit);
  }
//+------------------------------------------------------------------+
double CalculateProfitTrade()
  {
   double oProfit = 0;
   for(int i = OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol() == Symbol()&& OrderMagicNumber() == Magic)
           {
            if(OrderType() == OP_BUY || OrderType() == OP_SELL)
              {
               oProfit += OrderProfit();
              }
           }
        }
     }


   return(oProfit);
  }
//+------------------------------------------------------------------+
void CloseAll()
  {
   for(int i = OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol() == Symbol()&& OrderMagicNumber() == Magic)
           {
            if(OrderType() == OP_BUY)
              {
               if(!OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Green))
                  Print("Не удалось закрыть ордер на покупку!");
              }
            if(OrderType() == OP_SELL)
              {
               if(!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Red))
                  Print("Не удалось закрыть ордер на продажу!");
              }
           }
        }
     }
  }//+------------------------------------------------------------------+
int CountBuyHistory()
  {
   int count = 0;
   for(int trade = OrdersHistoryTotal()-1; trade >= 0; trade--)
     {
      if(OrderSelect(trade, SELECT_BY_POS, MODE_HISTORY) == true)
        {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
           {
            count++;
           }
        }
     }

   return(count);
  }
//+------------------------------------------------------------------+
int CountSellHistory()
  {
   int count = 0;
   for(int trade = OrdersHistoryTotal()-1; trade >= 0; trade--)
     {
      if(OrderSelect(trade, SELECT_BY_POS, MODE_HISTORY) == true)
        {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
           {
            count++;
           }
        }
     }

   return(count);
  }
Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением...
 
weblatters:

1. Он складывает все закрытые позиции из истории и открытые текущие позиции.

2. Как сбросить счетчики ордеров в истории?

Как же Вы собираетесь сбросить то, что хотите сами посчитать?

 
weblatters:

Есть советник который торгует каждый день до определенного результата в $. Он складывает все закрытые позиции из истории и открытые текущие позиции. Когда профит достиг ждет следующего дня.

Как сбросить после CloseAll(); все счетчики CalculateProfitHistory(); CalculateBuyHistory(); CalculateSellHistory();

Подскажите кодом. Ни как не могу сообразить.


запоминать последнюю нужную дату и от неё считать (установить фильтр)...

PS/ и хватит наверное использовать кривущщие методы и программировать "лесенкой" 

 
Aleksei Stepanenko #:

Как же Вы собираетесь сбросить то, что хотите сами посчитать?

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

 
Maxim Kuznetsov #:

запоминать последнюю нужную дату и от неё считать (установить фильтр)...

PS/ и хватит наверное использовать кривущщие методы и программировать "лесенкой" 

Спасибо. Но OrdersHistoryTotal() - Возвращает количество закрытых и удаленных ордеров в истории текущего счета, загруженной в клиентском терминале. Поэтому я решил эту задачу по другому.  Задал статичную переменную = 0. Потом как профит достик записываю количество закрытых ордеров в истории в эту переменную и потом уже от нее считаю новые закрытые ордера в CalculateProfitHistory() цикл for(int i = OrdersHistoryTotal()-1; i>=cHistLast; i--)

>>>PS/ и хватит наверное использовать кривущщие методы и программировать "лесенкой" 

Что значит лесенкой?  и что кривого в этих методах? как то можно по другому подсчитать кол-во ордеров в истории и  открытых?

Пожалуйста объясните что в этих методах не так?
 
Maxim Kuznetsov #:

...и программировать "лесенкой" 

А как надо?

 
weblatters:

Есть советник который торгует каждый день до определенного результата в $. Он складывает все закрытые позиции из истории и открытые текущие позиции. Когда профит достиг ждет следующего дня.

Как сбросить после CloseAll(); все счетчики CalculateProfitHistory(); CalculateBuyHistory(); CalculateSellHistory();

Подскажите кодом. Ни как не могу сообразить.


А это, между прочим, очень не просто.

Первая проблема в том, что нет единого порядка сортировки ордеров в истории.

В процессе работы терминала история пополняется по мере закрытия ордеров. 

А на запуске терминала история отсортирована по времени открытия. 

Начать надо с того, что вести свой массив с тикетами в порядке открытия ордеров.

Когда все ордера закрыты - считать ничего не надо. Поэтому первый ордер в новой серии

как-нибудль помечаем, например через комментарий. А потом все подсчеты ведем

заканчивая на этом ордере. Примерно так, а вообще вариантов множество. Но среди

нет ни одного идеального и все чем-то замороченные.

 
Dmitry Fedoseev #:

А это, между прочим, очень не просто.

Первая проблема в том, что нет единого порядка сортировки ордеров в истории.

В процессе работы терминала история пополняется по мере закрытия ордеров. 

А на запуске терминала история отсортирована по времени открытия. 

Начать надо с того, что вести свой массив с тикетами в порядке открытия ордеров.

Когда все ордера закрыты - считать ничего не надо. Поэтому первый ордер в новой серии

как-нибудль помечаем, например через комментарий. А потом все подсчеты ведем

заканчивая на этом ордере. Примерно так, а вообще вариантов множество. Но среди

нет ни одного идеального и все чем-то замороченные.

Спасибо!

Причина обращения: