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

 
Mikhail Dovbakh:

При попытке создать ресурс, компилятор "ругается" на BMP файл mouse.bmp

Хотя, если использовать напрямую, ошибки нет и картинко отображается корректно.

файл в архиве.

Редактор


Поведение в МТ4 аналогичное...

не хочет глотать 8-битный битмап. 
Лучше преобразовать в 24 или 32 битный.

32 битный предпочтительней когда нужен альфа-канал, тогда можно будет получать изображение на прозрачном фоне, а не на прямоугольном закрывающем чарт фоне.

В этом случает нужно битмап переносить в массив через ResourceReadImage и использовать COLOR_FORMAT_ARGB_NORMALIZE.

Файлы:
Images.zip  3 kb
[Удален]  
Добрый день, после обновления возник следующий баг [MT4 (1280) / МE (2375)]:

Раскрытие области видимости через шаблонный параметр для доступа к функциям с возвращаемым значением.         

Пример 1: вызов функции базового класса.               
class _f
{
public:
   
   bool f(){ return false; }
   
   void g(){ Print("g");   }   
};

template<typename F>
class run_f : public F
{
public:

   bool f(){ return F::f(); } //<--- '::' - unexpected token

   void g(){ F::g(); }        //<--- OK
};


//+------------------------------------------------------------------+

void OnStart() 
{ 
   run_f<_f> r;
   
   r.f();
   r.g();
}  
Если обращаемся через раскрытие области видимости к void-функции или без продвижения возвращаемого значения, то все ок.

Пример 2: вызов static-функции класса.  
class _f
{
public:
   
   static bool static_f(){ return true; } 
   static void static_g(){}    
};

template<typename F>
bool call_static()
{
   return F::static_f(); //<--- '::' - unexpected token and function not defined
   
   F::static_f();       //<--- OK (не используем возварщаемое значение)
   
   //F::static_g();     //<--- OK (void функция)
   
   return true;  
}

//+------------------------------------------------------------------+

void OnStart() 
{ 
   call_static<_f>();
}  

До обновления работало. В MT5/MetaEditor 2560 тоже все ок.
Документация по MQL5: Основы языка / Операторы / Оператор возврата return
Документация по MQL5: Основы языка / Операторы / Оператор возврата return
  • www.mql5.com
Оператор возврата return - Операторы - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Не одинаковое поведение для Select-функций.
void OnStart()
{
  PositionSelectByTicket(0); // OK
  OrderSelect(0);            // return value of 'OrderSelect' should be checked
}
[Удален]  
Добрый день, после обновления возник следующий баг [MT4 (1280) / МetaEditor (2375)]: 

Перегрузка шаблонной функции в теле класса, шаблонный параметр перекрывает правильную версию функции.
(Для глобальных функций - разрешение перегрузки работает ок.)
template<typename T>
class template_class{};

class X
{  
public:

   template<typename T>
   void f(const template_class<T>&) 
   {
      Print("T");
      
      T * obj = NULL;
   }
   
   void f(const template_class<string>&) 
   {
      Print("string");
   }
   
   void call()
   {
      template_class<string> ts;
      
      f(ts);    //Вызывает версию Т, а должен string.
   }
};

void OnStart()
{
   X x;
   
   x.call();
}
 
Новые штатные функции.
int OrderExist( const string symbol, ENUM_ORDER_TYPE type, ulong magic, ulong &tickets[] );

int PositionExist( const string symbol, ENUM_POSITION_TYPE type, ulong magic, ulong &tickets[] );
 

Приветствую. Подскажите или дайте ссылку куда обратиться.

VPS WinServer 2012 R2, МТ4 запускается, в какой-то момент выгружается, приходится запускать снова.

Куда смотреть и тд ....

Заранее благодарствую.

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Особенности языка mql5, тонкости и приёмы работы

fxsaber, 2020.08.20 18:52

Следующим кодом на демо-счете RannForex-Server можно сразу воспроизвести эту ситуацию, если запустить этот советник.

// Воспроизведение ситуации наличия позиции и отложенного ордера с одинаковыми тикетами.

#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

MqlTradeResult Result = {0};
MqlTradeRequest Request = {0};

int OnInit()
{

        Request.action = TRADE_ACTION_PENDING;
        Request.symbol = _Symbol;
        Request.volume = 100;
        Request.price = Ask;
        Request.type = ORDER_TYPE_BUY_LIMIT;
        
        return(!OrderSend(Request, Result)); // Выставили лимитник по текущей цене.
}

#define TOSTRING(A) #A + " = " + DoubleToString(A, _Digits)

void OnTradeTransaction( const MqlTradeTransaction&, const MqlTradeRequest&, const MqlTradeResult& )
{
  if (OrderSelect(Result.order) && (OrderGetInteger(ORDER_STATE) == ORDER_STATE_PARTIAL)) // Если наш лимитник исполнился частично
  {
    if (Ask - OrderGetDouble(ORDER_PRICE_OPEN) < 100 * _Point)                            // и находится близко от текущей цены
    {
        Request.action = TRADE_ACTION_MODIFY;
        Request.order = Result.order;
        Request.price = Ask - 1000 * _Point;

      // тогда передвигаем его подальше.
      if (OrderSend(Request, Result)) // Если синхронный OrderSend выполнился успешно, то торговое окружение должно соответствовать.
      {
        // Проверка соответствия торгового окружения.
        if (OrderSelect(Request.order) &&                                                                // Если получилось взять данные нашего ордера
            NormalizeDouble(OrderGetDouble(ORDER_PRICE_OPEN) - Request.price, _Digits))                  // и цена ордера не равна цене успешного OrderSend
          Alert("Bug:" + TOSTRING(OrderGetDouble(ORDER_PRICE_OPEN)) + " != " + TOSTRING(Request.price)); // сообщаем о баге MT5.
      }
    }
    else
      ExpertRemove();
  }     
}


Попутно скрипт показывает (не всегда с первого раза) баг выполнения синхронного OrderSend.

Alert: Bug:OrderGetDouble(ORDER_PRICE_OPEN) = 0.89837 != Request.price = 0.88837

После выполнения OrderSend в течение нескольких десятков/сотен миллисекунд цена ордера старая, а не та, что успешно выставил OrderSend.

 

отправьте в поиск - не нашел сам

как в SQLite добиться уникальности строк с несколькими полями в таблице?

ЗЫ: если кто то может дать пример - заранее благодарен!

 

Кому принадлежит идея перенести вкладку "Форум" в начало списка шапки?

Плохая идея, не говорите кому.

 
Подсветка кодов в базе больше недели не работает, переключение вложений тоже ошибка