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

 

Обращение к разработчикам. Виснет скрипт Python при получении данных посредством copy_rates_from_pos при определенных обстоятельствах.

Объясню ситуацию. У брокера около 4 тыс инструментов.
Делаю первичный отбор инструментов путем их перебора и фильтрации по определенным правилам.

По одному из инструментов в терминале пустая история (то есть в market watch и в списке символов инструмент есть, но данные пустые).

При попытке выполнить скрипт: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 1, analysis_days),
скрипт просто виснет. Не помогает ни "try", ни проверка на None, так как сама ошибка не возникает, просто все висит на этой строке.

Если попробовать выполнить: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 0, analysis_days),
то есть указать номер начального бара с 0, то не виснет и возвращается пустая таблица.

Дополнение. Еще обнаружил аналогичную проблему, когда ПЕРВЫЙ РАЗ получаю данные через copy_rates_from_pos при этом количество запрашиваемых баров, больше чем есть в истории. Также скрипт зависает. При втором обращении такой ошибки нет. Поэтому видимо повторить ошибку будет сложно (возможно только полностью удалив историю по инструменту).

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

 
Alexander Mikheev:

Уважаемые разработчики, если я в чем то ошибаюсь или чего то не учел, поправьте пожалуйста.

Вы хотите, чтобы кто-то потратил время на написание исходника по вашим данным и проверил на различных торговых серверах?

Этого не будет. Уважайте чужое время: полностью предоставьте данные для воспроизведения проблемы - исходник, сервер, конфигурация машины и прочее.


Исходник лаконичный и с комментариями, чтобы не тратить время на разбор, что там написали. Рассказать, что хотели получить и что получили.

 
fxsaber:

Запароленный ZIP-архив.

А разве запароленные архивы поддерживаются в MQL?

 
Stanislav Korotky:

А разве запароленные архивы поддерживаются в MQL?

Не знаю.

 
suncrypto:

Обращение к разработчикам. Виснет скрипт Python при получении данных посредством copy_rates_from_pos при определенных обстоятельствах.

Объясню ситуацию. У брокера около 4 тыс инструментов.
Делаю первичный отбор инструментов путем их перебора и фильтрации по определенным правилам.

По одному из инструментов в терминале пустая история (то есть в market watch и в списке символов инструмент есть, но данные пустые).

При попытке выполнить скрипт: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 1, analysis_days),
скрипт просто виснет. Не помогает ни "try", ни проверка на None, так как сама ошибка не возникает, просто все висит на этой строке.

Если попробовать выполнить: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 0, analysis_days),
то есть указать номер начального бара с 0, то не виснет и возвращается пустая таблица.

Дополнение. Еще обнаружил аналогичную проблему, когда ПЕРВЫЙ РАЗ получаю данные через copy_rates_from_pos при этом количество запрашиваемых баров, больше чем есть в истории. Также скрипт зависает. При втором обращении такой ошибки нет. Поэтому видимо повторить ошибку будет сложно (возможно только полностью удалив историю по инструменту).

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

Воспроизвели, исправляем.

 
Перестал работать TesterHideIndicators(false);
 
suncrypto:

Обращение к разработчикам. Виснет скрипт Python при получении данных посредством copy_rates_from_pos при определенных обстоятельствах.

Объясню ситуацию. У брокера около 4 тыс инструментов.
Делаю первичный отбор инструментов путем их перебора и фильтрации по определенным правилам.

По одному из инструментов в терминале пустая история (то есть в market watch и в списке символов инструмент есть, но данные пустые).

При попытке выполнить скрипт: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 1, analysis_days),
скрипт просто виснет. Не помогает ни "try", ни проверка на None, так как сама ошибка не возникает, просто все висит на этой строке.

Если попробовать выполнить: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 0, analysis_days),
то есть указать номер начального бара с 0, то не виснет и возвращается пустая таблица.

Дополнение. Еще обнаружил аналогичную проблему, когда ПЕРВЫЙ РАЗ получаю данные через copy_rates_from_pos при этом количество запрашиваемых баров, больше чем есть в истории. Также скрипт зависает. При втором обращении такой ошибки нет. Поэтому видимо повторить ошибку будет сложно (возможно только полностью удалив историю по инструменту).

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

Исправили, будет в очередной бете
 
Aleksey Vyazmikin:
Перестал работать TesterHideIndicators(false);

TesterHideIndicator выставляет тестеру флаг видимости индикаторов, которые создаются после.

Он не меняет флаг видимости у созданных ранее индикаторов.

Можно проверить следующим экспертом

//+------------------------------------------------------------------+
//|                                     TestTesterHideIndicators.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

int ExtHandleMacd;
int ExtHandleEma;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   TesterHideIndicators(true);
   ExtHandleMacd=iMACD(NULL,0,12,26,9,PRICE_CLOSE);
   TesterHideIndicators(false);
   ExtHandleEma=iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  }
//+------------------------------------------------------------------+

В визуализаторе и на графике, открытом после простого тестирования, индикатор MACD не виден, Moving Average виден

То есть, работает, как и было задумано

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
  • www.mql5.com
Комбинация флагов видимости объекта определяет таймфреймы графика, на которых объект отображаем. Для установки/получения значения свойства OBJPROP_TIMEFRAMES можно использовать функции ObjectSetInteger()/ObjectGetInteger...
 
DMITRII PECHERITSA:
Bug - непоследовательная работа указателей (5.00, 2650)

Ошибка компиляции. У кого какие мысли?



Используйте оператор dereference явно

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   C201022_090654 c_1(* new C201022_090641); //works
   C201022_090654 c_3(* new C201022_092325(1)); //works
//---'new' - parameter passed as reference, variable expected
   C201022_090654 c_2(* new C201022_090641(1)); //not works
                      ^
  }
 

A100:
Ошибка при компиляции:

typedef void (*fn)();
void f() {}
fn g() { return f; }
oid OnStart()
{
        g()(); //Error: ')' - expression expected
}

Ранее исследовал данный вопрос, вот что удалось найти:

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

Ошибки, баги, вопросы

Sergey Dzyublik, 2020.04.04 21:46

Баг МТ5(build 2375) ошибка компиляции при вызове функции через ее указатель, когда используется массив указателей на функцию:

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

void test(){
   PRINT(__FUNCSIG__);
}

template<typename T>
void call(T f_ptr){
   f_ptr();
}


template<typename T>
class A{
public:
   T arr_1[1];
   
   typedef void (*ff)();
   ff arr_2[1];  
   
   
   T test_1(){
      return arr_1[0];
   } 
   
   ff test_2(){
      return arr_2[0];
   } 
   
   T operator[](int index){
      return arr_1[index];
   }
};

void OnStart(){
   typedef void (*ff)();
   ff arr[1];
   arr[0] = test;   
   
   ff f_ptr = arr[0];
   f_ptr();             //Ok
   call(arr[0]);        //Ok
   arr[0]();            //Compile Error: ')' - expression expected   
   
   
   A<ff> a;             
   a.arr_1[0] = test;
   a.arr_2[0] = test;
   
   
   a.arr_1[0]();        //Compile Error: ')' - expression expected   
   a.arr_2[0]();        //Compile Error: ')' - expression expected   
   
   a.test_1()();        //Compile Error: ')' - expression expected   
   a.test_2()();        //Compile Error: ')' - expression expected   
   
   a[0]();              //Ok ???
}



Причина обращения: