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

 
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 ???
}



 

MetaQuotes:
Исправили, будет в очередной бете

Отлично, спасибо за оперативность!

 
Sergey Dzyublik:

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

Раньше с массивом работало build 2085

Странно что сейчас не работает при том, что Вы сообщали об ошибке полгода назад, я - 3 месяца назад (почти год не обновлял терминал). Если бы изначально не работало - тогда понятно

 
A100:

Раньше с массивом работало

проверил - в MQL4 до сих пор работает

UPD: даже с директивой #property strict  4-ке все компилируется

 
В Календаре нет USA-Elections.
 

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

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

Машинное обучение в трейдинге: теория, практика, торговля и не только

Aleksey Vyazmikin, 2020.11.02 21:52

Ух, как злюсь - выявил индикаторы из стандартной поставки, которые дают разный показатель в один момент времени, если были запущены в разные периоды в тестере - не знаю как они считаются, но для машинного обучения они опасны!

iAO(Symbol(),TF);//Awesome Oscillator
iOBV(Symbol(),TF,Type_Vol);//On Balance Volume

Результат снимался 01.08.2019 10:04:00 на минутках по OHLC Si Splice.

 
Slava:

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

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

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

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

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

Спасибо. Это я не на том фрейме ждал индикатор, извиняюсь за невнимательность!

 
Nikolai Semko:

Долго не мог понять почему шрифты выводятся в Canvas с таким плохим качеством.
И сегодня понял, что существует неправильный вывод шрифтов в режиме канваса с подержкой прозрачности COLOR_FORMAT_ARGB_NORMALIZE.

Очевидно, что этот баг заключается в том, что в режиме COLOR_FORMAT_ARGB_NORMALIZE сглаживание кромки шрифта происходит не через 4-й байт прозрачности(A), а изменением яркости трех байтов RGB, как в режиме COLOR_FORMAT_XRGB_NOALPHA.
Если это поправить, то шрифты в режиме COLOR_FORMAT_ARGB_NORMALIZE будут выводится даже чуть быстрее(т.к. нужно менять только один байт A , а не три RGB в пикселе ARGB)  и с гораздо лучшим качеством.

Демонстрирующий этог Баг скрипт прикладываю. (Слева выводятся шрифты в режиме COLOR_FORMAT_XRGB_NOALPHA, а справа с потерей качества шрифты в режиме COLOR_FORMAT_ARGB_NORMALIZE)

Особенно это хорошо видно в режиме "белый на белом" - шрифтов не должно быть видно. И в режиме белый на черном. Видно что качество шрифтов сильно портится из-за неправильной обработки краев шрифта.

Черный на белом:

Белый на черном


    VS   


Белый на белом. Справа (режим COLOR_FORMAT_ARGB_NORMALIZE) ореол(кромка) шрифта, которого не должно быть.


Разработчики, пожалуйста, почините это. 
Самый важный режим Canvas.


ЗЫ Кстати такой же косяк у вас в классе CCanvas как миминум из-за функции PixelTransform (https://www.mql5.com/ru/forum/227736/page43#comment_13272694), поэтому функции со сглаживанием работают неправильно. Решение я вроде там предлагал.

Здесь нет ошибки.

Для белого шрифта используйте белую "подкладку"

C2.Erase(0x00FFFFFF);