Открывает много ордеров, как это исправить

 

Данная сова по плану должна открывать один новый ордер бай, если он закрылся в плюс то открывает новый бай, если в минус то просто прекращает свою работу. Но эта зараза сразу открывает очень много ордеров, но мне нужно что бы открывался только один ордер.

extern int tp = 350;
extern int sl = 400;
double Lots = 0.01;
extern int TakeProfit = 150;
extern int StopLoss = 150;
bool mir;

int start()
{

if(GetTypeLastClosePos("0", -1)!=OP_BUY)
if(OrderProfit()<0)
{
mir = false;
}
if(OrderProfit()>0)
{
mir = true;
}

if(OrdersHistoryTotal()==0)
{
NewOrder (OP_BUY,Lots);

}
}




//+------- ФУНКЦИЯ ОПРЕДЕЛЯЕТ ТИП ПОСЛЕДНЕЙ ЗАКРЫТОЙ ПОЗЫ.
int GetTypeLastClosePos(string sy="NULL", int mn=-1) { // Инт наз фу-ции. string-пременна строкового типа sy="0". mn=-1
datetime t; // datetime-переменая даты и времени. Обозначает числовое значение года, месяца, даты (либо даты, месяца, года), часа, минуты и секунды.Константа обрамляется
// одинарными кавычками и начинается с символа D. Допускается использование усечённого значения: либо без даты, либо без времени, либо пустое значение.Примеры:datetime Compile = D''; datetime N_3 = D'12.05.2005 16:30:45';
int i, k=OrdersHistoryTotal(), r=-1; //OrdersHistoryTotal- опроделяет количество закрытых позиций и удаленных ордеров в истории текущего счета

if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
r=OrderType();
}
}
}
}
}
return(r);
}
//_______________---------------+++++++++++++====================__________________===========
int NewOrder(int Cmd,double Lot)
{double TP=0; //тейкпрофит
double SL=0; //стоплосс
double PR=0; //Цена
while(!IsTradeAllowed()) Sleep(100);
if(Cmd==OP_BUY)
{PR=Ask;
if(TakeProfit>0) TP=Ask+TakeProfit*Point;
if(StopLoss>0) SL=Ask-StopLoss*Point;}
if(Cmd==OP_SELL)
{PR=Bid;
if(TakeProfit>0) TP=Bid-TakeProfit*Point;
if(StopLoss>0) SL=Bid+StopLoss*Point;}
int tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP,"",0,0,CLR_NONE);
if(tic<0) Print("Ошибка открытия ордера: ",GetLastError()); //---- Print() — Выдать сообщение в журнал. GetLastError() — Номер последней ошибки.
return(tic);
}
// строчка вызова NewOrder::: NewOrder(OP_BUY,Lot); //

bool mir ()
{
NewOrder(OP_BUY,Lots);
}

 
 extern int tp = 350;
 extern int sl = 400;
 double Lots = 0.01;
 extern int TakeProfit = 150;
 extern int StopLoss = 150;
 bool mir;

 int start() 
 { 

 if(GetTypeLastClosePos("0", -1)!=OP_BUY)
 if(OrderProfit()<0)
 {
 mir = false;
 }
 if(OrderProfit()>0)
 {
 mir = true;
 }

 if(OrdersTotal()==0)
 {
 NewOrder (OP_BUY,Lots);

 }
 }

 //+------- ФУНКЦИЯ ОПРЕДЕЛЯЕТ ТИП ПОСЛЕДНЕЙ ЗАКРЫТОЙ ПОЗЫ.
 int GetTypeLastClosePos(string sy="NULL", int mn=-1) { // Инт наз фу-ции. string-пременная 
 //строкового типа sy="0". mn=-1
 datetime t; // datetime-переменая даты и времени. Обозначает числовое значение года, месяца, даты 
 //(либо даты, месяца, года), часа, минуты и секунды.Константа обрамляется
 // одинарными кавычками и начинается с символа D. Допускается использование усечённого значения: либо без даты, 
 //либо без времени, либо пустое значение.Примеры:datetime Compile = D''; datetime N_3 = D'12.05.2005 16:30:45';
 int i, k=OrdersHistoryTotal(), r=-1; //OrdersHistoryTotal- опроделяет количество закрытых позиций и 
 //удаленных ордеров в истории текущего счета

 if (sy=="0") sy=Symbol();
 for (i=0; i<k; i++) {
 if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
 if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
 if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
 if (t<OrderCloseTime()) {
 t=OrderCloseTime();
 r=OrderType();
 }
 }
 }
 }
 }
 return(r);
 }
 //_______________---------------+++++++++++++====================__________________===========
 int NewOrder(int Cmd,double Lot)
 {double TP=0; //тейкпрофит
 double SL=0; //стоплосс
 double PR=0; //Цена
 while(!IsTradeAllowed()) Sleep(100);
 if(Cmd==OP_BUY)
 {PR=Ask;
 if(TakeProfit>0) TP=Ask+TakeProfit*Point;
 if(StopLoss>0) SL=Ask-StopLoss*Point;}
 if(Cmd==OP_SELL)
 {PR=Bid;
 if(TakeProfit>0) TP=Bid-TakeProfit*Point;
 if(StopLoss>0) SL=Bid+StopLoss*Point;}
 int tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP,"",0,0,CLR_NONE);
 if(tic<0) Print("Ошибка открытия ордера: ",GetLastError()); //---- Print() — Выдать сообщение в журнал. GetLastError() — Номер последней ошибки.
 return(tic);
 }
 // строчка вызова NewOrder::: NewOrder(OP_BUY,Lot); //

 bool mir ()
 {
 NewOrder(OP_BUY,Lots);
 }

 
DmitriyN:

... ну, или отключить от интернета.
Причина обращения: