Как выбрать все ордера по комментарию? - страница 2

 

Мужик попросил велик, а вы ему танк нафигачили

string mycomment="My comment";
int k =OrderHistoryTotal()-10 //можешь установить глубину проверки истории какую сам пожелаешь
for(int i=k;i<OrderHistoryTotal();i++)
   {
   OrderSelect(i, SELECT_BY_POS,MODE_HISTORY);
   if(StringFind(OrderComment(),mycomment,0)!=-1) int ticket=OrderTicket() //или любое твое действие
   }
 
Roger:

Мужик попросил велик, а вы ему танк нафигачили

Вот о чём я и говорил несколькими постами выше. Только времени код набросать не было.
 

Странно, ордера по комментарию скрипт не находит и считает все подряд. Если-же взять какой-либо из ордеров/сделок, то все корректно. Что-же получается, что ордера являющиеся пополнением счета в виде депозита, ребейта, процентного начисления скриптом выбрать по комментарию невозможно?

Но несмотря на ошибку с подсчитанной суммой, функция OrderPrint(); выводит найденные ордера.

Кто может пояснить в чем проблема? Ордера по комментарию находятся, но подсчет их общей суммы происходит некорректно.

 
WebProger:

Я наверное дико туплю, но что-то не могу сообразить, как в цикле суммировать всю прибыль по ордерам?

Пробовал так:

Но при попытке добавить к существующему значению новое, появляется ошибка '+=' - comma or semicolon expected

Сделал иначе:

Но обратил внимание, что в результате я получаю всю сумму по ордерам. Т.е. ребейт ордера по комментарию скрипт не находит и считает все подряд. Если-же взять какой-либо из ордеров/сделок, то все корректно. Что-же получается, что ордера являющиеся пополнением счета в виде депозита, ребейта, процентного начисления скриптом выбрать по комментарию невозможно?

//+----------------------------------------------------------------------------+
string mycomment="Rebate:";
double Rebate = 0;

int start() {
   int k = OrdersHistoryTotal(); 

   for(int i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS,MODE_HISTORY)) {
         if(StringFind(OrderComment(),mycomment,0)!=-1) Rebate += OrderProfit();
         }
      }
   return(0); 
}
//+----------------------------------------------------------------------------+

а так?

 

Да, так работает, спасибо.

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

Например, есть 4 ордера с комментарием IR

0.01, 0.02, 1.83, 2.15 что в сумме 4.03, а скрипт выдает 9.7276. Можно было-бы подумать, что отображается просто сумма на счету, но на счету 9.77 при отсутствии открытых сделок.

 

Разобрался, теперь все находит и считает.

Написал такую функцию:

double RebateAndIR(int k, string mycomment, bool log = false)
{
double result = 0;
 
   for(int i=0;i<k;i++)
   {
   OrderSelect(i, SELECT_BY_POS,MODE_HISTORY);
      if(StringFind(OrderComment(),mycomment,0)!=-1)
      {
         OrderSelect(OrderTicket(), SELECT_BY_TICKET);
         result += OrderProfit();
            if(log){OrderPrint();}
      }   
   }

return (result);
}
Причина обращения: