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

 

После последнего обновления, функция EnumToString неправильно работает в зависимости от вызываемого кода. Отдельный вызов Enum_ не воспроизводит ошибку.

template<typename T>

int Enum_(T enum_value)
  {
   ...
         s1=EnumToString(T(i1));

   ...

   }

В отладчике:

GetLastError возвращает: 

ERR_INVALID_PARAMETER

4003

Ошибочный параметр при вызове системной функции

 

помогите копия из журнала мт4 

sell 0.20 CL-MAY21 at 59.36 sl: 0.00 tp: 0.00 -> sl: 0.00 tp: 58.00
14:07:13.521 Trade: '50223437': order #5595882 sell 0.20 CL-MAY21 at 59.36 was modified -> sl: 0.00 tp: 58.00
15:56:34.215 Startup: MetaTrader 4 for Android
15:56:34.223 Startup: Copyright 2001-2021, MetaQuotes Software Corp.
15:56:34.223 Startup:
15:56:34.223 Startup: Device: samsung a41 (QP1A.190711.020.A415FXXU1BUC3) 10(REL) 29SDK
15:56:34.223 Startup: Kernel: 4.14.141-20194519
15:56:34.239 Terminal: Native library initialized. Version 400 Build 1334
15:56:34.259 Chat: initialization success
15:57:43.276 Terminal: Codepage for current language (ru_RU) is 'CP1251'
15:57:43.277 Terminal: Using 'windows-1251' for server strings
15:57:43.284 Terminal: Terminal instance created
15:57:43.641 Terminal: Connecting to PinedaIntl-Trader through 'Main'
15:57:43.793 Terminal: Connected to PinedaIntl-Trader through Main
15:57:43.993 Chat: connected to msg.mql5.com:443
15:57:44.088 Network: '50223437': login successfull [connection type: unknown]
15:58:02.749 GL: Texture size: 256x256
15:59:35.745 Trade: '50223437': modify order #5595882 sell 0.20 CL-MAY21 at 54.19 sl: 0.00 tp: 58.00 -> sl: 0.00 tp: 52.0015:59:36.073 Trade: '50223437': order #5595882

как такое произошло

 
JRandomTrader:

Кто сказал, что CopyBuffer() хоть раз будет успешна?

Кто сказал, что iCustom() будет успешна?

"Ошибки могут образовывать циклы. Наиболее устойчивый из них - бесконечный." Теория ошибок.

Самое интересное что эта функция выполняется успешно. Она выполняется и выдает значения. Потом только терминал входит в непонятное состояние.

iCustom тоже выполняется на ура.

 
   datetime a = D'2021.04.08 10:00:00';
   int      handle;
   double   Buffer[];
   

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{

   handle = iCustom(_Symbol, PERIOD_CURRENT, "Examples\\ATR.ex5", 14);
   ::Print(__FUNCTION__ + "| PERIOD_CURRENT = ", EnumToString(_Period));

   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| 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[])
{

   if(handle != INVALID_HANDLE)
   {
      ::CopyBuffer(handle, 0, a, 1, Buffer);
      
      double BS = ::NormalizeDouble(Buffer[0], _Digits);
      
      ::Print(__FUNCTION__ + "| a = ", a);
      ::Print(__FUNCTION__ + "| BS ", BS);
      
      handle = INVALID_HANDLE;
   }
   
   // return value of prev_calculated for next call
   return(rates_total);
}


Может кто ответить почему данный код корректно работает только на минутках?

Это индикатор.


P. S.

На других таймфреймах кроме минутных выводит неверные значения.

 
Francuz:


Может кто ответить почему данный код корректно работает только на минутках?

Это индикатор.

P. S.

На других таймфреймах кроме минутных выводит неверные значения.

потому что вы выполняете единственную итерацию только при самом первом заходе в OnCalculate, когда prev_calculated = 0. В этот момент бары могут быть еще не сформированы. А все ТФ формируются из 1M ТФ.
Вставьте в проверку:

if(prev_calculated>0 && handle != INVALID_HANDLE)

и все будет работать.

 

В МЕ открыты вкладки двух экспертов, в обоих есть несохраненные изменения, нажимаем кнопку компиляции одного из них и видим, что МЕ сохраняет изменения в обоих советниках. Зачем? Кто его об этом просил?

Если бы МЕ сохранял изменения в связанных файлах перед компиляцией, то это было бы логичным поведением, а так.... Конечно, ведь так гораздо проще, зачем разбираться какие файлы кому принадлежат?-гораздо проще сохранить все открытые файлы и дело с концом.... 

 
Andrey Dik:
В МЕ открыты вкладки двух экспертов, в обоих есть несохраненные изменения, нажимаем кнопку компиляции одного из них и видим, что МЕ сохраняет изменения в обоих советниках. Зачем? Кто его об этом просил? 
А как иначе?
Только так.
Во всех IDE так.
 
Nikolai Semko:
А как иначе?
Только так.
Во всех IDE так.

точно ли во всех?

попробовал только что в VS, да, поведение такое же. но, дебильное поведение продукта, даже самого известно, нужно ли считать эталоном? давайте тогда копировать все баги и недоразумения VS, а чё.

))

 
Andrey Dik:

точно ли во всех?

попробовал только что в VS, да, поведение такое же. но, дебильное поведение продукта, даже самого известно, нужно ли считать эталоном? давайте тогда копировать все баги и недоразумения VS, а чё.

))

Я за последний год использовал минимум 9 разных IDE. Везде так.
Ну подумайте логически, сколько может быть проблем, если у одного файла несколько хозяев, которые не видят изменения друг друга.   Если один скомпилировал с одним кодом, а другой с другим кодом, то уже нужно создавать два ex5 файла с одним именем и т.д. 
 

А почему бы не сделать Навигатор в виде таблицы на манер окна Обзор Рынка? В Обзоре Рынка реализовали сортировку, Респектище! - давно просили.

Tеперь наступила эра новых наших мечтаний о мега крутейших по удобству возможностей отображения содержимого Навигатора и сортировки по столбцам: Название, Автор, Дата компиляции, Дата Последнего Запуска, Наличие Исходника, Тип программы (и отключение сортировки с возвращением к виду как сейчас)