//--- ulong ticket=0; //--- for(int i=OrdersTotal()-1;i>=0;i--) if((ticket=OrderGetTicket(i))>0) { //здесь определенный ордер, и работа с ним } //---Ну а если задача иная, нужно больше информации.
Если нужен перебор всех ордеров:Ну а если задач
Если нужен перебор всех ордеров:Ну а если задача иная, нужно больше информации.
Подскажите, кто знает - где ошибка в коде?
for(i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS);
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MAGIC) continue;
int total=OrdersTotal();
if
(OrderMagicNumber()==MAGIC
&&
total>N)
return(0);
}
Этот кусок кода у меня определяет сколько позиций открывает советник. НО: Когда в терминале запущен только этот советник, он работает как надо. Открывает сколько ему задано позиций по внешней переменней N. Но когда в терминале подключены одновременно еще несколько советников, и они открыли свои позиции, тот, кто должен открыть например 3 или 4 позиций, открывает только одну. Больше не хочет. Что-то происходит не как надо.
Подскажите, кто знает - где ошибка в коде?
for(i=OrdersTotal()-1;i>=0;i--) { OrderSelect(i,SELECT_BY_POS); if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MAGIC) continue; int total=OrdersTotal(); if (OrderMagicNumber()==MAGIC && total>N) return(0); }
Этот кусок кода у меня определяет сколько позиций открывает советник. НО: Когда в терминале запущен только этот советник, он работает как надо. Открывает сколько ему задано позиций по внешней переменней N. Но когда в терминале подключены одновременно еще несколько советников, и они открыли свои позиции, тот, кто должен открыть например 3 или 4 позиций, открывает только одну. Больше не хочет. Что-то происходит не как надо.
Попробуйте вот эту функцию. Функция возвращает количество открытых ордеров заданного типа (OrderCmd) , символа (Smb) и магика (MN)
int Trader::OrderOpenCount(int OrderCmd=-1, string Smb, int MN) { //Order_Type = -1 ордера всех типов //Order_Type = -2 только рыночные ордера OP_BUY и OP_SELL //Order_Type = -3 только отложенные ордера OP_BUYSTOP и OP_SELLSTOP //Order_Type = -4 только отложенные ордера OP_BUYLIMIT и OP_SELLLIMIT int i; int col; col=0; for(i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==Smb && OrderMagicNumber()==MN) { if (OrderCmd>=0) { if (OrderCmd == OrderType()) {col++; continue;} } else { if (OrderCmd == -1) {col++; continue;} if (OrderCmd == -2) { if (OrderType() == OP_BUY || OrderType() == OP_SELL) col++; continue; } if (OrderCmd == -3) { if (OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP) col++; continue; } if (OrderCmd == -4) { if (OrderType() == OP_BUYLIMIT || OrderType() == OP_SELLLIMIT) col++; continue; } } } } } return(col); }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Как реализовать if(OrdersTotal()<1) идущий один за одним
int start()
if(OrdersTotal()<1)
{
здесь определенный ордер
}
??????????? здесь что?
if(OrdersTotal()<1)
{
здесь определенный ордер
} и т.д.