Помогите разобраться с ЛОКированием позиций

 
Здравствуйте,

Пожалуйста помогите разобраться с Локированием позиций

Набранный мною код позиций не Локирует

Ошибку найти не могу - не хватает опыта


Для упрощения рассм. только Локирование BUY позиций

Рассмотрите, пожалйста, возможность упрощения кода



Что хотел сделать: Открывается позиция BUY одновременно с отложенным ордером SELL

Если отложенный ордер SELL срабатывает - Удаляем из BUY TakeProfit

Если BUY получил Profit - удаляем отложенный SELL, который шел к нему в паре--

Если при этом существует Локированная пара BUY-SELL - то закрываем эту пару


Каждой паре присваивается MagicNumber, равный номеру предыдущей пары +1



Благодарю за оказанную помощь.



 
Чисто из любопытства попробуйте при наборе следующего сообщения нажать <Ctrl> + <Alt> + <M>...
 
#property copyright "Mr.Red" 
#property link "" 

extern double TakeProfit = 20, 
Lock=50; 

extern double Lots = 0.1; 
//extern double StopLoss =40; 
bool New_Bar=false; 

//+------------------------------------------------------------------+ 
//| expert initialization function | 
//+------------------------------------------------------------------+ 
int start() 
{ 
int M=1;// меджик намбер 
if(OrderSelect(0,SELECT_BY_POS, MODE_TRADES)==true) 
{ 
M++; 
} 
//+------------------------------------------------------------------+ 
for(int i=0;i< OrdersHistoryTotal();i++) 
{ 
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY )==true)// поиск и проверка позиции БАЙ 
{ 
if (OrderSymbol()==Symbol()&& OrderType() == OP_BUY&& 
OrderMagicNumber()==M && OrderProfit()>0) // если БАЙ получил текущий ПРОФИТ то 
{ 
for(int a=0; a<OrdersTotal(); a++) 
{ 
OrderSelect(a, SELECT_BY_POS, MODE_TRADES); 
if(OrderSymbol()==Symbol()&&OrderType() == OP_SELLSTOP&& OrderMagicNumber()==M) // то находим отложенный СЕЛЛ 
{ 
OrderDelete(OrderTicket(),Red); // и закрываем его 
} 
} 


for(int s=0; s<OrdersTotal(); s++) 
{ 
if(OrderSelect(s, SELECT_BY_POS, MODE_TRADES)==true) 
{ 
if(OrderSymbol()==Symbol()&&OrderType() == OP_SELL&& OrderMagicNumber()==M-1) // ищем пару СЕЛЛ БАЙ что бы закрыть замок (если он есть) 
{ 
for(int w=0; w<OrdersTotal(); w++) 
{ 
OrderSelect(w, SELECT_BY_POS, MODE_TRADES); 
if(OrderSymbol()==Symbol()&&OrderType() == OP_BUY&& OrderMagicNumber()==M-1) // находим пару 
{ 
OrderClose(OrderTicket(),Lots,Bid,3, Yellow); // и закрываем сначала БАЙ 

for(int y=0; y<OrdersTotal(); y++) 
{ 
OrderSelect(y, SELECT_BY_POS, MODE_TRADES); 
if(OrderSymbol()==Symbol()&&OrderType() == OP_SELL&& OrderMagicNumber()==M-1) // ищем СЕЛЛ 
{ 
OrderClose(OrderTicket(),Lots,Ask,3, Yellow); //закрываем СЕЛЛ 
} 
} 
} 
} 
} 
} 
} 
} 
} 
} 
for(int n=0; n<OrdersTotal(); n++) 
{ 
if(OrderSelect(n, SELECT_BY_POS, MODE_TRADES)==true) 
{ 
if(OrderSymbol()==Symbol()&&OrderType() == OP_SELL&& 
OrderMagicNumber()==M) //если открылся ЛОК то 
{ 
for(int q=0; q<OrdersTotal(); q++)//ищем бай 
{ 
OrderSelect(q, SELECT_BY_POS, MODE_TRADES); 
if(OrderSymbol()==Symbol()&&OrderType() == OP_BUY&& OrderMagicNumber()==M) // 
{ 
OrderModify (OrderTicket(), OrderOpenPrice(), 0, 0, 0, Blue); // удаляем ТЕЙК ПРОФИТ из БАЯ 
} 
} 
} 
} 
} 
//-------------------------------------------------------------------- 
Fun_New_Bar(); 
if (New_Bar==false) 
return; 
int ticket; 


if(.... ..)// Условие входа в сделку, если наступил новый бар 
{ 

ticket=OrderSend(Symbol(),OP_BUY,Lots, Ask,3, 
0,Ask+TakeProfit*Point, 0,M,0, 
Red); 
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Lock*Point,0, 
0,0, 0,M,0, 
Red); 
Alert (GetLastError()); 

return; 
} 

} 


//-------------------------------------------------------------------- 
void Fun_New_Bar() // Ф-ия обнаружения .. 
{ // .. нового бара 
static datetime New_Time=0; // Время текущего бара 
New_Bar=false; // Нового бара нет 
if(New_Time!=Time[0]) // Сравниваем время 
{New_Time=Time[0]; // Теперь время такое 
New_Bar=true; // Поймался новый бар 
} 
} 
//--------------------------------------------------------------------

Причина обращения: