Скачать MetaTrader 5

Помогите поправить цикл

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Sergey Salnikov
127
Sergey Salnikov  

Висят 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);
}
}


 

Natashe4ka
360
Natashe4ka  
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);
}

И всё, цикл перебора ордеров не нужен. 

И так же ошибка есть в переборе ордеров 

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 ------
-------- работа с ордерами -----------
}
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий