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

 
Igor Zakharov:

Так оно и не в секундах...

Так вот об этом в описании языка в первую очередь надо сообщать.

А не в статьях, которые еще и искать надо. На форуме об этом надо искать в последнюю очередь.

Иначе получается так: смотрю в книгу, а вижу фигу...

 

Почему такое может быть?

IM      0       17:19:04.403    Terminal        MetaTrader 5 x64 build 2056 started (MetaQuotes Software Corp.)
NG      0       17:19:04.403    Terminal        Windows 7 Service Pack 1 (build 7601) x64, IE 11, AMD FX-4170 Quad-Core Processor , Memory: 9408 / 12255 Mb, Disk: 20 / 238 Gb, GMT+3

Сегодня обнаружил что в спецификации инструмента минимальный объём равен 100 и шаг тоже 100. Но при таких объёмах, вручную не открывает позиции с ошибкой "Неправильный объём", а если поставить 0.01 то кнопки не активны.

Заменил версию на "помладше"

KK      0       17:35:14.046    Terminal        MetaTrader 5 x64 build 2025 started (MetaQuotes Software Corp.)
IE      0       17:35:14.046    Terminal        Windows 7 Service Pack 1 (build 7601) x64, IE 11, AMD FX-4170 Quad-Core Processor , Memory: 9182 / 12255 Mb, Disk: 20 / 238 Gb, GMT+3

никаких изменений.

Затем заменил на релизную версию

FI      0       17:37:23.049    Terminal        MetaTrader 5 x64 build 2007 started (MetaQuotes Software Corp.)
RS      0       17:37:23.049    Terminal        Windows 7 Service Pack 1 (build 7601) x64, IE 11, AMD FX-4170 Quad-Core Processor , Memory: 9180 / 12255 Mb, Disk: 20 / 238 Gb, GMT+3

И вот результат



Почему такое происходит только в одной компании? Ведь если-бы это было повально, то вопрос уже давно был-бы поднят и решён.

В каком направлении посылать тех.поддержку той компании?


Добавлено: И очень странно, что на центовом счёте этой-же компании билд 2025 работает нормально. Все параметры инструмента как и должны быть.

Торгуй на центовом. Я сам догадался... но хочется побольше.

 
Ilyas:

Спасибо за сообщение.
Это рудимент, исправим.

@Ilyas, аналогичная проблема есть и у NonPOD struct.

struct NonPod{
   uchar data[];
};   
   
void OnStart(){
   NonPod obj;
   
   obj = (NonPod)(obj);   // '(' - invalid cast operation	
}
 
Кто-то знает как кроме ожидания нового билда с поддержкой namespace для классов обойти это ограничение:
template<typename T>
class TestTypedef{
public:
   typedef void (* callback)(T &);    // 'callback' - identifier already used
   callback eq;
};


void ff(int&) {Print(__FUNCSIG__);}

void OnStart(){  

   TestTypedef<int> int_value;
   int_value.eq = ff;
   
   int x = 5;
   int_value.eq(x);                 // Ok

   TestTypedef<string> int_value;   //Compile error 'callback' - identifier already used
}

Проблема в глобальной области объявления имени в рамках функциональности typedef

 
MT5 (build 2057) 

Ошибка компиляции при повторном использовании одной и той же сигнатуры функции в рамках typedef:
typedef void (* callback_0)();     // а без этой строки все ОК
typedef void (* callback)();

void test_func(){}

void OnStart(){
   callback func_ptr = test_func;  //'test_func' - type mismatch
   func_ptr();
}
 
Sergey Dzyublik:
MT5 (build 2057) 

Баг с "запретом" на повторное использование одной и той же сигнатуры в рамках typedef:

А у меня похожий по сути скрипт более чем 2-х годичной давности выдаёт в 2056x32 результат: EX5 loading failed

 
Sergey Dzyublik:
Кто-то знает как кроме ожидания нового билда с поддержкой namespace для классов обойти это ограничение:

Скомпилировать

void f(int&) {}
void OnStart()
{
   TestTypedef<int> int_value;
   TestTypedef<string> string_value;

можно (и даже будет работать), но не более того: далее допустим нельзя будет написать

   int_value.eq = f;
}

поэтому не пишу как

 
A100:

Скомпилироватьпоэтому не пишу как

Не не, оно все же с трудом, но работает...
Там в примере в typedef тип bool затерялся немного.

#define PRINT(x) ; Print(#x, ":", string(x))

#define CREATE_TestTypedef(type)                              \
class TestTypedef_##type{                                     \
public:                                                       \
   typedef bool (* callback_##type)(type &);                  \
   callback_##type eq;                                        \
}
   
bool f(int&) {return true;}


void OnStart(){
   CREATE_TestTypedef(int) int_value;
   CREATE_TestTypedef(string) string_value;                     
   
   int data = 5;
   int_value.eq = f;
   PRINT(int_value.eq(data));                    // result: true
}
 
До выхода исправлений в typedef и обновлений namespace, если они кончено будут, 
придется отдельно декларировать использование каждого типа через макросы, а затем опять через макросы получать уже имя сгенерированных классов что бы создать объект класса... 
 

Обьясните почему при создании CChartObjectLabel у меня не удаляются обекты в индикаторе при деинициализации в таком коде:

//+------------------------------------------------------------------+
//|                                                         test.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
#property indicator_separate_window
#include <ChartObjects\ChartObjectsTxtControls.mqh>
CChartObjectLabel *LabelUP,*LabelDN;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   CreateLabel(LabelUP,"LabelUP",0);
   CreateLabel(LabelDN,"LabelDN",30);
/*   
   LabelUP=new CChartObjectLabel;
   LabelDN=new CChartObjectLabel;
   LabelUP.Create(0,"LabelUP",ChartWindowFind(),0,0);
   LabelUP.Color(clrYellow);
   LabelUP.FontSize(14);
   LabelUP.Description("LabelUP");
   
   LabelDN.Create(0,"LabelDN",ChartWindowFind(),0,10);
   LabelDN.Color(clrYellow);
   LabelDN.FontSize(14);
   LabelDN.Description("LabelDN");
*/
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   delete LabelUP;
   delete LabelDN;
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   return(rates_total);

  }
//+------------------------------------------------------------------+
void CreateLabel(CChartObjectLabel *l,string name,int y)
  {
   l=new CChartObjectLabel;
   l.Create(0,name,ChartWindowFind(),0,y);
   l.Color(clrYellow);
   l.FontSize(14);
   l.Description(name);
  }
//+------------------------------------------------------------------+

при переключении ТФ получаю запись в журнале: 2019.05.23 09:49:02.044 tstlabel EURUSD,M30: 2 objects of type CChartObjectLabel left

если раскомментировать в OnInit() создание текстовых меток ( CChartObjectLabel ), то все будет корректно работать

в ф-цию CreateLabel() передаю указатель, а удалить его потом в OnDeinit() почему то не удается