Вот так вроде нормально. Функция Решетова, сразу не врубился.
void ClosePosBy()//закрытие перекрытых ордеров { int longticket = -1; int shortticket = -1; int longlots = 0; int shortlots = 0; // check for opened position int total = OrdersTotal(); //---- bool end; while(!end){ for(int i = total - 1; i >= 0; i--) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); // check for symbol & magic number if(OrderSymbol() == Symbol()) { // check for long opened position if (OrderType() == OP_BUY) { longticket = OrderTicket(); longlots = OrderLots(); } // check for short opened position if (OrderType() == OP_SELL) { shortticket = OrderTicket(); shortlots = OrderLots(); } } } // check for trade allowed if(IsTradeAllowed()) { RefreshRates(); } else { return(0); } // Close by if ((longticket >= 0) && (shortticket > 0)) { if (longlots > shortlots) { if (! OrderCloseBy(longticket, shortticket, Red)) { Sleep(1000); } } else { if (! OrderCloseBy(shortticket, longticket, Blue)) { Sleep(1000); } if((shortlots==0 && longlots!=0) || (shortlots!=0 && longlots==0)) { end=true; } } } } }
ИМХО - не совсем. Лучше перенести определение количества открытых
int total = OrdersTotal();
внутрь "вайл", как и остальных переменных.
И еще: после первого удаления будет пауза и по условию
// check for trade allowed
if(IsTradeAllowed()) {
RefreshRates();
} else {
return(0);
}
можно вылететь из функции.
Лучше так:
int n=0;
while(!IsTradeAllowed()&& n<limit) {Sleep(500);n++;}
RefreshRates();
ЗЫ уже ответили :)
ИМХО - не совсем. Лучше перенести определение количества открытых
int total = OrdersTotal();
внутрь "вайл", как и остальных переменных.
И еще: после первого удаления будет пауза и по условию
// check for trade allowed
if(IsTradeAllowed()) {
RefreshRates();
} else {
return(0);
}
можно вылететь из функции.
Лучше так:
int n=0;
while(!IsTradeAllowed()&& n<limit) {Sleep(500);n++;}
RefreshRates();
ЗЫ уже ответили :)
А почему лоты не десятичные, а целые?

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Рассчитывал, что эта функция должна закрывать всю сбалансированную часть совокупной позиции и в итоге должна остаться только несбалансированная часть. Но почему то она обрабатывает одну пару ордеров. Подскажите пожалуйста в чём дело.