Как по очереди (по одному) удалить отложенные ордера? - страница 2

 
Aleksandr Glebov:
Покажи код, как это реализовать

И проглоти? :)

Вам нужно две функции:

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

На каждом тике считываете количество отложек (вызываете первую функцию и её результат проверяете) и, если их стало больше заданного количества - вызываете вторую функцию, которая найдёт первую отложку и удалит её.

Пробуйте написать функции, ежли трудности будут - поможем.

 
Artyom Trishkin:

И проглоти? :)

Вам нужно две функции:

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

На каждом тике считываете количество отложек (вызываете первую функцию и её результат проверяете) и, если их стало больше заданного количества - вызываете вторую функцию, которая найдёт первую отложку и удалит её.

Пробуйте написать функции, ежли трудности будут - поможем.

единственное решение это тот код, который я представлял ранее (с массивами). вот с ним у меня трудности, да вот только ваши рекомендации не решили проблемы...
 
Aleksandr Glebov:
единственное решение это тот код, который я представлял ранее (с массивами). вот с ним у меня трудности, да вот только ваши рекомендации не решили проблемы...
Тот код и решение не могут быть единственными. А по моим рекомендациям я вижу вы ничего и не делали. Мне нужно за вас всё сделать, верно?
 
Artyom Trishkin:
Тот код и решение не могут быть единственными. А по моим рекомендациям я вижу вы ничего и не делали. Мне нужно за вас всё сделать, верно?
я не знаю как искать самый ранний отложенный ордер (вторую функцию) :(
 
Aleksandr Glebov:
я не знаю как искать самый ранний отложенный ордер (вторую функцию) :(
Я ведь давал уже код. В него нужно лишь вписать критерий, по которому Вы считаете более ранний ордер: по цене или времени.
 
Aleksandr Glebov:
я не знаю как искать самый ранний отложенный ордер (вторую функцию) :(

Попробуйте:

//+------------------------------------------------------------------+
int TicketFirstOrder(string sy, int op, int mn) {
   datetime time=TimeCurrent();  // проверяемое время открытия
   int j=EMPTY;   // индекс найденного ордера
   for(int i=OrdersTotal()-1; i>=0; i--) {      // цикл по рыночным ордерам
      if(OrderSelect(i,SELECT_BY_POS)) {
         if(OrderMagicNumber()!=mn) continue;   // если магик не тот - далее
         if(OrderSymbol()!=sy)      continue;   // если символ не тот - далее
         if(OrderType()!=op)        continue;   // если тип не тот - далее
         //--- если мы тут, значит нашли подходящий ордер, проверим его время
         if(OrderOpenTime()<time) { // если время ордера меньше, чем в i...
            time=OrderOpenTime();   // ... запомним новое время,...
            j=i;                    // ... запомним индекс ордера в списке
            }
         }
      }
   //--- после цикла, если возможно выбрать ордер по индексу j...
   if(OrderSelect(j,SELECT_BY_POS)) return(OrderTicket());  // ... вернём тикет найденного ордера
   return(j);  // если мы тут, значит не нашли ни одного подходящего ордера - возвращаем -1 (EMPTY)
}
//+------------------------------------------------------------------+

не проверял, писал "на коленке"

 
Игорь Герасько:
Я ведь давал уже код. В него нужно лишь вписать критерий, по которому Вы считаете более ранний ордер: по цене или времени.
Извините, разобраться не смог... спасибо!
 
Artyom Trishkin:

Попробуйте:

не проверял, писал "на коленке"

Ну надо же, заработало!!!! А я уж начал думать, что такого не бывает :D Спасибо, Artyom Trishkin!!!!
Причина обращения: