Ошибки, баги, вопросы - страница 1914

 
int OrdersTotalT(int _type)
  {
   int _total=0;
   for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
     {

      bool select=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol() && OrderType()==_type)
        {
           _total++;
        }
     }
   return(_total);
  }
 
nys2000:

Спасибо, но нумерация ордеров с 0 до OrdersTotal()-1 учтена в OrderSelect(i-1,...)


делайте перебор в обратном порядке ..

 
nys2000:

Вот такой простенький код:

В момент запуска функции открыто две позиции Buy. Функция дважды принтует наличие двух ордеров: Проход № 1, Проход № 2.

Снимаем комментарии и запускаем функцию повторно. Она бодро сносит один ордер бай, честно принтует "Проход № 1" и выходит из цикла. Второй ордер остается нетронутым сообщение "Проход № 2" не появляется.

В чем магия?


1. i=1, Посчитали ордера ... проверили условие 1<= 2 ? да. Выбрали и Закрыли ордер.

2. i++ (i=2)

3. OrdersTotal()=1 <---------- закрытием ордера внутри цикла фактически поменяли условие для выхода из цикла

4. 2<=1 ? нет <----------- тут ваша "магия" и соответственно выход из цикла

void CloseAllOrders()
{
bool Ans;
int total=OrdersTotal();
   for(int i=1; i <=total; i++)     
      {      
      Print("Проход № ", i);      
      if (OrderSelect(i-1,SELECT_BY_POS)==true) 
         {  
         if (OrderSymbol() != Symbol())
            continue;
         if (OrderType()==0)
             {
//            Ans=OrderClose(OrderTicket(),OrderLots(), NormalizeDouble(Bid,Digits),25);
             }           
         if (OrderType()==1)
             {
//            Ans=OrderClose(OrderTicket(),OrderLots(), NormalizeDouble(Ask,Digits),25);
             } 
         }
      }      
         
return;
   
}
 

зачем введен дополнительный идентификатор чарта CHART_WINDOW_HANDLE, ведь есть ID чарта, для каких целей он нужен?

[Удален]  
Konstantin:

зачем введен дополнительный идентификатор чарта CHART_WINDOW_HANDLE, ведь есть ID чарта, для каких целей он нужен?

Предположу, что ID чарта для среды mql, а HWND - для winapi.
 

Ошибка при выполнении

int f( int t )
{
union U {
        U( int t ) : t1( t ) {}
        int t2;
        int t1;
};
	U u( t );
        return u.t2;
}
void OnStart()
{
        Print( f( 3 ));
}

Результат: случайное число (ну уж точно не 3)
 

Иллюзия правильности кода

#property library
#define MACRO1(X)               (X)
//#define MACRO2
int f()
{
        return MACRO1( 1
#ifdef MACRO2
                + 1
#endif
                - 1 );
}
Отсутствует сообщение об ошибке
 

Сейчас выдает ошибку, а раньше (например build 1571) работало - #import успешно сочетался с макро...

#define TEST1   "test1.ex5"
#define TEST2   "Z:\\VERSION1\\test32.dll"
//
#import TEST1                   //Error: #import is expecting a filename
#import TEST2                   //Error: #import is expecting a filename
#import
было очень удобно для кроссплатформенного кода - сосредоточив макро в одном месте можно было сразу в десятках файлах для dll заменить путь и имя (32bit/64bit, UNICODE/ANSI), а для mql - путь и расширение (ex4/ex5). И главное что все это работало ранее

#resource с макро работает до сих пор - одной строкой можно отключать/подключать десятки ресурсов

#include с макро не работала и раньше, но было бы удобно чтобы в будущем работала (чем #include хуже #resource) что позволило бы с легкостью в десятках строк десятков файлов изменить например путь

 

Хочу обратить внимание.

покупатели жалуются на то что не удается установить продукт после покупки.

нажимают кнопку "установить", но установка купленного продукта не происходит.

 
Alexandr Bryzgalov:

Хочу обратить внимание.

покупатели жалуются на то что не удается установить продукт после покупки.

нажимают кнопку "установить", но установка купленного продукта не происходит.

Какой продукт ?