Скачать MetaTrader 5

Проблемы с одновременным закрытием открытых позиций и отложенных ордеров

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
MQL5 Cloud Network ускоряет расчеты. Попробуй сам!
Forex Trader
114255
Forex Trader 2005.12.08 00:50 
Собственно сабж. Вылазит какая-то ошибка №2. Посмотрите, может я что-то не так делаю.
//+------------------------------------------------------------------+
//|                                                   ShadowTrader   |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//|                                                             v1.2 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern double Lots     = 0.1;
extern int TakeProfit  =  200;
extern int StopLoss    =  200;
extern int hour        =  12; // Время, по истечении которого ордер будет закрыт
extern int limit       =   5; // Уровень установки отложенного ордера
extern int ProfitLevel =  20; // Общий профит для всех позиций при котором они закрываются

static int magicNumber = 23456;

bool AllowTorg,NewBar;
datetime LastTrade,PrevTime;
int ticket,CountBars;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
   AllowTorg=True;
   LastTrade=CurTime();PrevTime=Time[0];
   ticket=0;CountBars=0;
   return(0);
}

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{
   return(0);
}

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{

int cnt=0,total=0,i=0,totalcountpos=0;
NewBar=false;
   

//+------------------------------------------------------------------------------------------------+
//| Модуль счетчика баров                                           
//+------------------------------------------------------------------------------------------------+
//Отфильтрововаем бары от ценовых тиков
if (Time[0]>PrevTime)
{   
   CountBars=CountBars+1;
   NewBar=True;
   PrevTime=Time[0];
}
//+------------------------------------------------------------------------------------------------+
//| Конец модуля счетчика баров                                           
//+------------------------------------------------------------------------------------------------+


if (CountBars>531)
{
bool result=false;
AllowTorg=false;
total=OrdersTotal();
if (total>0)
{
for (cnt=total-1;cnt>=0;cnt--)
{  
   if ((CurTime()-LastTrade)<10) return (0);
   result=false;
   OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
   {
      if ((OrderSymbol()==Symbol()) && (OrderType()==OP_BUY)&& (OrderMagicNumber()== magicNumber))
      {
         result=OrderClose(OrderTicket(),OrderLots(),Bid,10,Yellow);  
         if (result) LastTrade=CurTime();
         break;
      }
      if ((OrderSymbol()==Symbol()) && (OrderType()==OP_SELL)&& (OrderMagicNumber()== magicNumber))
      {
         result=OrderClose(OrderTicket(),OrderLots(),Ask,10,Blue );  
         if (result) LastTrade=CurTime();
         break;
      }
      if ((OrderSymbol()==Symbol()) && (OrderType()==OP_BUYSTOP) && (OrderMagicNumber()== magicNumber))
      {
         result=OrderDelete(OrderTicket());  
         if (result) LastTrade=CurTime();
         break;
      }   
      if ((OrderSymbol()==Symbol()) && (OrderType()==OP_SELLSTOP) && (OrderMagicNumber()== magicNumber))
      {
         result=OrderDelete(OrderTicket());  
         if (result) LastTrade=CurTime();
         break;
      }   
   
   }
}

if(result==false)
{
   Alert("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
   Sleep(3000);
}   
}
}

//Открытие позиций
if (CountBars==503 && NewBar)
{
   OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"OP_SELL",magicNumber,0,Blue);
}
if (CountBars==505 && NewBar)
{
   OrderSend(Symbol(),OP_SELLSTOP,Lots,1.1,3,1.5,1.0,"OP_SELLSTOP", magicNumber,0,SkyBlue);
}
if (CountBars==507 && NewBar)
{
   OrderSend(Symbol(),OP_BUYSTOP,Lots,1.4,3,1.1,1.5, "OP_BUYSTOP", magicNumber,0,Pink);
}
if (CountBars==509 && NewBar)
{
   OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"OP_BUY",magicNumber,0, Yellow);
}
if (CountBars==511 && NewBar)
{
   OrderSend(Symbol(),OP_SELLSTOP,Lots,1.1,3,1.5,1.0,"OP_SELLSTOP", magicNumber,0,SkyBlue);
}
if (CountBars==513 && NewBar)
{
   OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"OP_SELL",magicNumber,0,Blue);
}
if (CountBars==515 && NewBar)
{
   OrderSend(Symbol(),OP_BUYSTOP,Lots,1.4,3,1.1,1.5, "OP_BUYSTOP", magicNumber,0,Pink);
}
if (CountBars==519 && NewBar)
{
   OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"OP_BUY",magicNumber,0, Yellow);
}


   return(0);
}
//+------------------------------------------------------------------+
MetaQuotes Software Corp.
Модератор
181031
MetaQuotes Software Corp. 2005.12.08 01:00  
Стандартный случай - не учитывается устаревание цен.
Поищите, пожалуйста, обсуждения по форуму.
Forex Trader
114255
Forex Trader 2005.12.08 01:41  
Ну вот, использую я обновление рыночного окружения - тоже самое:
//+------------------------------------------------------------------+
//|                                                   ShadowTrader   |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//|                                                             v1.2 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern double Lots     = 0.1;
extern int TakeProfit  =  200;
extern int StopLoss    =  200;
extern int hour        =  12; // Время, по истечении которого ордер будет закрыт
extern int limit       =   5; // Уровень установки отложенного ордера
extern int ProfitLevel =  20; // Общий профит для всех позиций при котором они закрываются

static int magicNumber = 23456;

bool AllowTorg,NewBar;
datetime LastTrade,PrevTime;
int ticket,CountBars;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
   AllowTorg=True;
   LastTrade=CurTime();PrevTime=Time[0];
   ticket=0;CountBars=0;
   return(0);
}

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{
   return(0);
}

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{

int cnt=0,total=0,i=0,totalcountpos=0;
NewBar=false;
   

//+------------------------------------------------------------------------------------------------+
//| Модуль счетчика баров                                           
//+------------------------------------------------------------------------------------------------+
//Отфильтрововаем бары от ценовых тиков
if (Time[0]>PrevTime)
{   
   CountBars=CountBars+1;
   NewBar=True;
   PrevTime=Time[0];
}
//+------------------------------------------------------------------------------------------------+
//| Конец модуля счетчика баров                                           
//+------------------------------------------------------------------------------------------------+


if (CountBars>531)
{
bool result=false;
AllowTorg=false;
total=OrdersTotal();
if (total>0)
{
for (cnt=total-1;cnt>=0;cnt--)
{  
   if ((CurTime()-LastTrade)<10) return (0);
   result=false;
   OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
   RefreshRates();
   {
      if ((OrderSymbol()==Symbol()) && (OrderType()==OP_BUY)&& (OrderMagicNumber()== magicNumber))
      {
         result=OrderClose(OrderTicket(),OrderLots(),Bid,10,Yellow);  
         if (result) LastTrade=CurTime();
         break;
      }
      if ((OrderSymbol()==Symbol()) && (OrderType()==OP_SELL)&& (OrderMagicNumber()== magicNumber))
      {
         result=OrderClose(OrderTicket(),OrderLots(),Ask,10,Blue );  
         if (result) LastTrade=CurTime();
         break;
      }
      if ((OrderSymbol()==Symbol()) && (OrderType()==OP_BUYSTOP) && (OrderMagicNumber()== magicNumber))
      {
         result=OrderDelete(OrderTicket());  
         if (result) LastTrade=CurTime();
         break;
      }   
      if ((OrderSymbol()==Symbol()) && (OrderType()==OP_SELLSTOP) && (OrderMagicNumber()== magicNumber))
      {
         result=OrderDelete(OrderTicket());  
         if (result) LastTrade=CurTime();
         break;
      }   
   
   }
}

if(result==false)
{
   Alert("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
   Sleep(3000);
}   
}
}

//Открытие позиций
if (CountBars==503 && NewBar)
{
   OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"OP_SELL",magicNumber,0,Blue);
}
if (CountBars==505 && NewBar)
{
   OrderSend(Symbol(),OP_SELLSTOP,Lots,1.1,3,1.5,1.0,"OP_SELLSTOP", magicNumber,0,SkyBlue);
}
if (CountBars==507 && NewBar)
{
   OrderSend(Symbol(),OP_BUYSTOP,Lots,1.4,3,1.1,1.5, "OP_BUYSTOP", magicNumber,0,Pink);
}
if (CountBars==509 && NewBar)
{
   OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"OP_BUY",magicNumber,0, Yellow);
}
if (CountBars==511 && NewBar)
{
   OrderSend(Symbol(),OP_SELLSTOP,Lots,1.1,3,1.5,1.0,"OP_SELLSTOP", magicNumber,0,SkyBlue);
}
if (CountBars==513 && NewBar)
{
   OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"OP_SELL",magicNumber,0,Blue);
}
if (CountBars==515 && NewBar)
{
   OrderSend(Symbol(),OP_BUYSTOP,Lots,1.4,3,1.1,1.5, "OP_BUYSTOP", magicNumber,0,Pink);
}
if (CountBars==519 && NewBar)
{
   OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"OP_BUY",magicNumber,0, Yellow);
}


   return(0);
}
//+------------------------------------------------------------------+



Ошибка №2 #define ERR_COMMON_ERROR 2. Млин, нельзя ли своей рукой поправить код, чтобы он работал?
И зачем тогда в OrderClose() проскальзование используется? Очевидно, что когда в цикле по тикетам перебераются все ордера и после ордера BUY или SELL встречаются ордера BUYSTOP или SELLSTOP, или наоборот - вылазит эта ошибка. Имхо, это явно глюк MQL4.

Forex Trader
114255
Forex Trader 2005.12.08 06:24  
Видно по Вашим записям, что Вы хотели решить проблему устаревания данных. Попробуйте вывести на печать значение LastTrade. Иногда бывает, что во время выполнения запроса на ордер неправильно отрабатывается функция времени и возвращается 0. Из-за этого у Вас может и не быть паузы в запросах и, соответственно, может из-зи этого и выплывает Ваша ошибка.
MetaQuotes Software Corp.
Модератор
181031
MetaQuotes Software Corp. 2005.12.08 14:50  
Так как гораздо лучше самостоятельно научиться ловить рыбу, чем каждый раз ждать рыбу от других:
1) подсчитайте количество мест, где есть задержки и устаревание цен
2) проверьте, есть ли защита от устаревания везде где нужно?
3) поищите, пожалуйста, темы, в которых я детально объяснял аналогичные вопросы

Имхо, это явно глюк MQL4

Представленный код очень плох.
Настолько плох, что речи об каких-либо ошибках в MQL4 даже не может идти речи.
Forex Trader
114255
Forex Trader 2005.12.08 17:49  
Ну, вот я кажется поймал Вашу рыбку. Ошибка пропала, по крайней мере, я её замаскировал:
//+------------------------------------------------------------------+
//|                                                   ShadowTrader   |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//|                                                             v1.2 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern double Lots     = 0.1;
extern int TakeProfit  =  200;
extern int StopLoss    =  200;
extern int hour        =  12; // Время, по истечении которого ордер будет закрыт
extern int limit       =   5; // Уровень установки отложенного ордера
extern int ProfitLevel =  20; // Общий профит для всех позиций при котором они закрываются

static int magicNumber = 23456;

bool AllowTorg,NewBar;
datetime LastTrade,PrevTime;
int ticket,CountBars;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
   AllowTorg=True;
   LastTrade=CurTime();PrevTime=Time[0];
   ticket=0;CountBars=0;
   return(0);
}

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{
   return(0);
}

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{

int cnt=0,total=0,i=0,totalcountpos=0;
NewBar=false;
   

//+------------------------------------------------------------------------------------------------+
//| Модуль счетчика баров                                           
//+------------------------------------------------------------------------------------------------+
//Отфильтрововаем бары от ценовых тиков
if (Time[0]>PrevTime)
{   
   CountBars=CountBars+1;
   NewBar=True;
   PrevTime=Time[0];
}
//+------------------------------------------------------------------------------------------------+
//| Конец модуля счетчика баров                                           
//+------------------------------------------------------------------------------------------------+


if (CountBars>571)
{
bool result=false;
AllowTorg=false;
total=OrdersTotal();
if (total>0)
{
for (cnt=total-1;cnt>=0;cnt--)
{  
//   Print(LastTrade);
   if (((CurTime()-LastTrade)<10) || (LastTrade==0)) return (0);
   result=false;
   OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
   RefreshRates();
   {
      if ((OrderSymbol()==Symbol()) && (OrderType()==OP_BUY))
      {
         result=OrderClose(OrderTicket(),OrderLots(),Bid,5,Yellow);  
         if (result){ LastTrade=CurTime();break; }
      }
      if ((OrderSymbol()==Symbol()) && (OrderType()==OP_SELL))
      {
         result=OrderClose(OrderTicket(),OrderLots(),Ask,5,Blue );  
         if (result){ LastTrade=CurTime();break; }
      }
      if ((OrderSymbol()==Symbol()) && (OrderType()==OP_BUYSTOP) && (OrderMagicNumber()== magicNumber))
      {
         result=OrderDelete(OrderTicket());  
         if (result){ LastTrade=CurTime();break; }
      }   
      if ((OrderSymbol()==Symbol()) && (OrderType()==OP_SELLSTOP) && (OrderMagicNumber()== magicNumber))
      {
         result=OrderDelete(OrderTicket());  
         if (result){ LastTrade=CurTime();break; }
      }   
   
   }
}

if(result==false)
{
   Alert("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
   Sleep(3000);
}   
}
}



//Открытие позиций
if (CountBars==503 && NewBar)
{
   OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"OP_SELL",magicNumber,0,Blue);
   LastTrade=CurTime();
}
if (CountBars==505 && NewBar)
{
   OrderSend(Symbol(),OP_SELLSTOP,Lots,1.1,3,1.5,1.0,"OP_SELLSTOP", magicNumber,0,SkyBlue);
   LastTrade=CurTime();
}
if (CountBars==507 && NewBar)
{
   OrderSend(Symbol(),OP_BUYSTOP,Lots,1.4,3,1.1,1.5, "OP_BUYSTOP", magicNumber,0,Pink);
   LastTrade=CurTime();
}
if (CountBars==509 && NewBar)
{
   OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"OP_BUY",magicNumber,0, Yellow);
   LastTrade=CurTime();
}
if (CountBars==511 && NewBar)
{
   OrderSend(Symbol(),OP_SELLSTOP,Lots,1.1,3,1.5,1.0,"OP_SELLSTOP", magicNumber,0,SkyBlue);
   LastTrade=CurTime();
}
if (CountBars==513 && NewBar)
{
   OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"OP_SELL",magicNumber,0,Blue);
   LastTrade=CurTime();
}
if (CountBars==515 && NewBar)
{
   OrderSend(Symbol(),OP_SELLSTOP,Lots,1.1,3,1.5,1.0,"OP_SELLSTOP", magicNumber,0,SkyBlue);
   LastTrade=CurTime();
}
if (CountBars==517 && NewBar)
{
   OrderSend(Symbol(),OP_SELLSTOP,Lots,1.1,3,1.5,1.0,"OP_SELLSTOP", magicNumber,0,SkyBlue);
   LastTrade=CurTime();
}
if (CountBars==519 && NewBar)
{
   OrderSend(Symbol(),OP_SELLSTOP,Lots,1.1,3,1.5,1.0,"OP_SELLSTOP", magicNumber,0,SkyBlue);
   LastTrade=CurTime();
}
if (CountBars==521 && NewBar)
{
   OrderSend(Symbol(),OP_BUYSTOP,Lots,1.4,3,1.1,1.5, "OP_BUYSTOP", magicNumber,0,Pink);
   LastTrade=CurTime();
}
if (CountBars==523 && NewBar)
{
   OrderSend(Symbol(),OP_BUYSTOP,Lots,1.4,3,1.1,1.5, "OP_BUYSTOP", magicNumber,0,Pink);
   LastTrade=CurTime();
}
if (CountBars==525 && NewBar)
{
   OrderSend(Symbol(),OP_BUYSTOP,Lots,1.4,3,1.1,1.5, "OP_BUYSTOP", magicNumber,0,Pink);
   LastTrade=CurTime();
}
if (CountBars==527 && NewBar)
{
   OrderSend(Symbol(),OP_BUYSTOP,Lots,1.4,3,1.1,1.5, "OP_BUYSTOP", magicNumber,0,Pink);
   LastTrade=CurTime();
}
if (CountBars==529 && NewBar)
{
   OrderSend(Symbol(),OP_BUYSTOP,Lots,1.4,3,1.1,1.5, "OP_BUYSTOP", magicNumber,0,Pink);
   LastTrade=CurTime();
}
if (CountBars==531 && NewBar)
{
   OrderSend(Symbol(),OP_BUYSTOP,Lots,1.4,3,1.1,1.5, "OP_BUYSTOP", magicNumber,0,Pink);
   LastTrade=CurTime();
}
if (CountBars==533 && NewBar)
{
   OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"OP_BUY",magicNumber,0, Yellow);
   LastTrade=CurTime();
}


   return(0);
}
//+------------------------------------------------------------------+



Хотя иногда ордера закрываются не в том порядке, котором открывались... И это смущает. Предусмотрел ситуацию, если вдруг LastTrade будет равен 0.


Представленный код очень плох.

А я и не претендую на звание супер-пупер программиста MQL4 и Ваш форум, как мне показалось, для того и существует, чтобы помочь разобраться, а не отсылать к проотцам учиться. Хотя бы ссылку дали...

Forex Trader
114255
Forex Trader 2005.12.10 05:07  
Интерестно посмотреть результат при попытке удалить в куче ордера Buy, например, вот в такой конструкции:
      if ((OrderSymbol()==Symbol()) && (OrderType()==OP_BUY) && (OrderMagicNumber()== magicNumber))
      {
         while (result==false)
         {
            RefreshRates();
            result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),5,Yellow);  
            Print(" Тикет: ",OrderTicket()," Результат: ",result);
            attempt++;
            if (attempt==10) break;
            Sleep(1000);
         }
         if (result) LastTrade=CurTime();
         break;
      }



Тесер закрывает все ордера Buy, кроме последнего, в протколе пишеться вот, что:


04:46:04 2005.06.03 21:00 NemoX-0002: open #46 buy 0.10 EURUSD at 1.2225 sl: 1.1225 tp: 1.3225 ok
04:46:04 2005.06.06 00:00 NemoX-0002: close #46 buy 0.10 EURUSD at 1.2225 sl: 1.1225 tp: 1.3225 at price 1.2227
04:46:04 2005.06.06 00:00 NemoX-0002: Тикет: 46 Результат: 1
04:46:04 2005.06.06 00:00 NemoX-0002: close #44 buy 0.10 EURUSD at 1.2287 sl: 1.1287 tp: 1.3287 at price 1.2229
04:46:04 2005.06.06 00:00 NemoX-0002: Тикет: 44 Результат: 1
04:46:04 2005.06.06 00:00 NemoX-0002: close #40 buy 0.10 EURUSD at 1.2274 sl: 1.1274 tp: 1.3274 at price 1.2224
04:46:04 2005.06.06 00:00 NemoX-0002: Тикет: 40 Результат: 1
04:46:04 2005.06.06 00:01 NemoX-0002: close #32 buy 0.10 EURUSD at 1.2290 sl: 1.1290 tp: 1.3290 at price 1.2225
04:46:04 2005.06.06 00:01 NemoX-0002: Тикет: 32 Результат: 1
04:46:04 2005.06.06 00:02 NemoX-0002: close #26 buy 0.10 EURUSD at 1.2288 sl: 1.1288 tp: 1.3288 at price 1.2229
04:46:04 2005.06.06 00:02 NemoX-0002: Тикет: 26 Результат: 1
04:46:04 2005.06.06 00:02 NemoX-0002: close #22 buy 0.10 EURUSD at 1.2216 sl: 1.1216 tp: 1.3216 at price 1.2223
04:46:04 2005.06.06 00:02 NemoX-0002: Тикет: 22 Результат: 1
04:46:04 2005.06.06 00:02 NemoX-0002: close #18 buy 0.10 EURUSD at 1.2206 sl: 1.1206 tp: 1.3206 at price 1.2225
04:46:04 2005.06.06 00:02 NemoX-0002: Тикет: 18 Результат: 1
04:46:04 2005.06.06 00:03 NemoX-0002: close #16 buy 0.10 EURUSD at 1.2237 sl: 1.1237 tp: 1.3237 at price 1.2224
04:46:04 2005.06.06 00:03 NemoX-0002: Тикет: 16 Результат: 1
04:46:04 2005.06.06 00:03 NemoX-0002: close #12 buy 0.10 EURUSD at 1.2257 sl: 1.1257 tp: 1.3257 at price 1.2229
04:46:04 2005.06.06 00:03 NemoX-0002: Тикет: 12 Результат: 1
04:46:04 2005.06.06 00:03 NemoX-0002: close #10 buy 0.10 EURUSD at 1.2251 sl: 1.1251 tp: 1.3251 at price 1.2227
04:46:04 2005.06.06 00:03 NemoX-0002: Тикет: 10 Результат: 1
04:46:04 2005.06.06 00:04 NemoX-0002: Тикет: 2 Результат: 0
04:46:04 2005.06.06 00:04 NemoX-0002: Тикет: 2 Результат: 0
04:46:04 2005.06.06 00:04 NemoX-0002: Тикет: 2 Результат: 0
04:46:04 2005.06.06 00:04 NemoX-0002: Тикет: 2 Результат: 0
04:46:04 2005.06.06 00:04 NemoX-0002: Тикет: 2 Результат: 0
04:46:04 2005.06.06 00:04 NemoX-0002: Тикет: 2 Результат: 0
04:46:04 2005.06.06 00:04 NemoX-0002: Тикет: 2 Результат: 0
04:46:04 2005.06.06 00:04 NemoX-0002: Тикет: 2 Результат: 0
04:46:04 2005.06.06 00:04 NemoX-0002: Тикет: 2 Результат: 0
04:46:04 2005.06.06 00:04 NemoX-0002: Тикет: 2 Результат: 0
04:46:04 2005.06.06 00:04 NemoX-0002: Alert: Order 2 failed to close. Error:2
04:46:04 2005.06.06 00:04 NemoX-0002: Тикет: 2 Результат: 0
04:46:04 2005.06.06 00:04 NemoX-0002: Тикет: 2 Результат: 0
04:46:04 2005.06.06 00:04 NemoX-0002: Тикет: 2 Результат: 0


И ошибка №2 будет выплывать до тех пор, пока не закроются все ордера BuyStop. И Вы мне ещё говорите, что это не глюк МТ4?... Так у кого из нас код ужастный :-) ?

Forex Trader
114255
Forex Trader 2005.12.10 11:14  
А для чего оператор break здесь?

    if (result) LastTrade=CurTime();
         break;
      }



Он алгоритм не ломает?

Forex Trader
114255
Forex Trader 2005.12.10 12:12  
А потому, что это цикл вложен внутрь другого цикла:
   for (cnt=OrdersTotal()-1;cnt>=0;cnt--)
   {  
      if ((CurTime()-LastTrade)<5) Sleep(5000);


где отрабатывается задержка, если ордер закрылся удачно. Можно конечно и тут Sleep(5000), но мне кажется, что лучше, чтобы сначала закрылись все Buy, а потом уж все Sell, можно и на оборот, но деньги вперед :-)

Forex Trader
114255
Forex Trader 2005.12.10 13:46  
if (attempt==10)


Что такое 10? У Ивана-Царевича было всего 3 попытки:)

Sleep(1000);


Почему 1 сек? А не 1,5? Или не 0,5?

MetaQuotes Software Corp.
Модератор
181031
MetaQuotes Software Corp. 2005.12.10 14:34  
Мой совет: приведите код и логику в чистый вид.
1234
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий