Непонятно

 

Здравствуйте. В общем, написал скрипт копипастой(ибо как не шарю в MQL) для открытия трех сделок. При запуске он начал их непрерывно открывать. Открылось семь штук(наверное ограничение брокера), благо график пошел в нужную сторону и я закрылся в плюсе.(чет полез на реале тестить). Не подскажете что не так?) Скрипт как во вложении так и здесь.

 

extern int     stoploss1    = 301,        //уровень выставления SL, если 0, то SL не выставляется

               takeprofit1  = 501,        //уровень выставления TP, если 0, то TP не выставляется

               Magic1       = 1, 

               stoploss2    = 501,        //уровень выставления SL, если 0, то SL не выставляется

               takeprofit2  = 1001,        //уровень выставления TP, если 0, то TP не выставляется

               Magic2       = 2,

               stoploss3    = 501,        //уровень выставления SL, если 0, то SL не выставляется

               takeprofit3  = 0,        //уровень выставления TP, если 0, то TP не выставляется

               Magic3       = 3;  //уникальный номер ордера

extern bool    SELL        = false,    //открыть ордер SELL

               BUY         = false;    //открыть ордер BUY

extern double  Lot1         = 0.1;      //объем ордера

extern int     slippage    = 20;        //Максимально допустимое отклонение цены для рыночных ордеров

//--------------------------------------------------------------------

double SL1,TP1,SL2,TP2,SL3,TP3;

double  Lot = Lot1;

double  Lot2 = Lot / 2;

double  Lot3 = Lot / 2;

//--------------------------------------------------------------------

int start()

{

   if (BUY)

   {

      if (takeprofit1!=0) TP1  = NormalizeDouble(Ask + takeprofit1*Point,Digits); else TP1=0;

      if (stoploss1!=0)   SL1  = NormalizeDouble(Ask - stoploss1*Point,Digits); else SL1=0;     

      OPENORDER ("Buy");

   }

   if (SELL)

   {  

      if (takeprofit1!=0) TP1 = NormalizeDouble(Bid - takeprofit1*Point,Digits); else TP1=0;

      if (stoploss1!=0)   SL1 = NormalizeDouble(Bid + stoploss1*Point,Digits);  else SL1=0;              

      OPENORDER ("Sell");

      }

   if (BUY)

   {

      if (takeprofit2!=0) TP2  = NormalizeDouble(Ask + takeprofit2*Point,Digits); else TP2=0;

      if (stoploss2!=0)   SL2  = NormalizeDouble(Ask - stoploss2*Point,Digits); else SL2=0;     

      OPENORDER ("Buy");

   }

   if (SELL)

   {  

      if (takeprofit2!=0) TP2 = NormalizeDouble(Bid - takeprofit2*Point,Digits); else TP2=0;

      if (stoploss2!=0)   SL2 = NormalizeDouble(Bid + stoploss2*Point,Digits);  else SL2=0;              

      OPENORDER ("Sell");

      }

   if (BUY)

   {

      if (takeprofit3!=0) TP3  = NormalizeDouble(Ask + takeprofit3*Point,Digits); else TP3=0;

      if (stoploss3!=0)   SL3  = NormalizeDouble(Ask - stoploss3*Point,Digits); else SL3=0;     

      OPENORDER ("Buy");

   }

   if (SELL)

   {  

      if (takeprofit3!=0) TP3 = NormalizeDouble(Bid - takeprofit3*Point,Digits); else TP3=0;

      if (stoploss3!=0)   SL3 = NormalizeDouble(Bid + stoploss3*Point,Digits);  else SL3=0;              

      OPENORDER ("Sell");

   }

return(0);

}

//--------------------------------------------------------------------

void OPENORDER(string ord)

{

   int error,err;

   while (true)

   {  error=true;

      if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, Lot1,NormalizeDouble(Ask,Digits),slippage,SL1,TP1,"BUY",Magic1,0,Blue);

      if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, Lot2,NormalizeDouble(Ask,Digits),slippage,SL2,TP2,"BUY",Magic2,0,Blue);

      if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, Lot3,NormalizeDouble(Ask,Digits),slippage,SL3,TP3,"BUY",Magic3,0,Blue);

      if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,Lot1,NormalizeDouble(Bid,Digits),slippage,SL1,TP1,"SELL",Magic1,0,Red);

      if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,Lot2,NormalizeDouble(Bid,Digits),slippage,SL2,TP2,"SELL",Magic2,0,Red);

      if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,Lot3,NormalizeDouble(Bid,Digits),slippage,SL3,TP3,"SELL",Magic3,0,Red);

      if (error==-1) //неудачная покупка OK

      {  

         ShowERROR();

         err++;Sleep(2000);RefreshRates();

      }

      if (error || err >10) return;

   }

return;

}                   

Файлы:
OpenOrder3.mq4  10 kb
 
Arctus:

Здравствуйте. В общем, написал скрипт копипастой(ибо как не шарю в MQL) для открытия трех сделок. При запуске он начал их непрерывно открывать. Открылось семь штук(наверное ограничение брокера), благо график пошел в нужную сторону и я закрылся в плюсе.(чет полез на реале тестить). Не подскажете что не так?) Скрипт как во вложении так и здесь.


Ужас...

Список замечаний получится длиннее вашего кода, лучше воздержусь.