Sergey Salnikov:
for (int i=OrdersTotal();i>0;i--) //проверяем количество ордеров
Magic нужен, на каждую вал.пару разный !!! Например: EUR_USD MagicB=1; и MagicS=11; / GBP_USD MagicB=2; и MagicS=22; / и т.д.
А зачем вообще перебор ордеров для OrderSend ?? Так не правильно.
if (если условия совпали для buystop) {
//+
stoplossB=NormalizeDouble(DH-Stop*Point,Format);
takeprofitB=NormalizeDouble(DH+Profit*Point,Format);
OrderB=OrderSend(Symbol(),OP_BUYSTOP,Lot,DH,0,stoplossB,takeprofitB,"Buy order",MagicB,0,clrRed);
}
if (если условия совпали для sellstop) {
//-
stoplossS=NormalizeDouble(DL+Stop*Point,Format);
takeprofitS=NormalizeDouble(DL-Profit*Point,Format);
OrderS=OrderSend(Symbol(),OP_SELLSTOP, Lot,DL,0,stoplossS,takeprofitS,"Sell order",MagicS,0,clrBlue);
}
//+
stoplossB=NormalizeDouble(DH-Stop*Point,Format);
takeprofitB=NormalizeDouble(DH+Profit*Point,Format);
OrderB=OrderSend(Symbol(),OP_BUYSTOP,Lot,DH,0,stoplossB,takeprofitB,"Buy order",MagicB,0,clrRed);
}
if (если условия совпали для sellstop) {
//-
stoplossS=NormalizeDouble(DL+Stop*Point,Format);
takeprofitS=NormalizeDouble(DL-Profit*Point,Format);
OrderS=OrderSend(Symbol(),OP_SELLSTOP, Lot,DL,0,stoplossS,takeprofitS,"Sell order",MagicS,0,clrBlue);
}
И всё, цикл перебора ордеров не нужен.
И так же ошибка есть в переборе ордеров
for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicB) {
------ в рынке есть ордера buy ------
-------- работа с ордерами -----------
}
for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicS) {
------ в рынке есть ордера sell ------
-------- работа с ордерами -----------
}
------ в рынке есть ордера buy ------
-------- работа с ордерами -----------
}
for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicS) {
------ в рынке есть ордера sell ------
-------- работа с ордерами -----------
}

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Висят 4 одинаковые по логике совы, на разных парах, расставляют отложки с открытия дня, каждая для своей пары.
Проблема в следующем: Если на какой-то валюте висит открытый ордер, то ни по одной другой паре отложки не ставятся. Где ошибка?
Вот алгоритм действия.
Ситуация: Все пары без ордеров, кроме одной (двух и тд), на которой висит открытый ордер.
Задача: Проверить общее наличие ордеров, и выставить отложки на тех парах, где нет открытых ордеров.
for (int i=OrdersTotal();i>0;i--) //проверяем количество ордеров
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==TRUE)//выбираем
{
if (Symbol()==OrderSymbol()){break;} // если символ ордера совпадает с символом инструмента, то начинаем следующую итерацию цикла
if ((i==1)&&(Symbol()!=OrderSymbol())) //если перебрав все ордера до последнего, не находим равенства по символу,то кидаем 2 отложки.
{
//+
stoplossB=NormalizeDouble(DH-Stop*Point,Format);
takeprofitB=NormalizeDouble(DH+Profit*Point,Format);
OrderB=OrderSend(Symbol(),OP_BUYSTOP,Lot,DH,0,stoplossB,takeprofitB,"Buy order",MagicB,0,clrRed);
//-
stoplossS=NormalizeDouble(DL+Stop*Point,Format);
takeprofitS=NormalizeDouble(DL-Profit*Point,Format);
OrderS=OrderSend(Symbol(),OP_SELLSTOP, Lot,DL,0,stoplossS,takeprofitS,"Sell order",MagicS,0,clrBlue);
}
}
}