Новая версия платформы MetaTrader 5 build 2007: Экономический календарь, MQL5-программы в виде сервисов - страница 76

 
Alexey Navoykov:

Настолько рабочего, что  

?

В общем, мы конечно ценим ваш оптимизм, но это не реализуемо на MQL.  Уж скоко раз уже обсуждалось в разных ветках.  Так что поберегите своё время.

В свое время умножение тоже была не ускоряемая операция O(n^2).

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

Результат выполнения:

2019.05.17 22:43:05.047 Test_plan EURUSD,H1: array_stuct.At(0).value==struct_type.value:true
2019.05.17 22:43:05.047 Test_plan EURUSD,H1: array_class.At(0).GetValue()==class_type.GetValue():true
2019.05.17 22:43:05.047 Test_plan EURUSD,H1: &array_class.At(0)!=&class_type:true
2019.05.17 22:43:05.047 Test_plan EURUSD,H1: array_class_ptr.At(1).GetValue()==class_ptr.GetValue():true
2019.05.17 22:43:05.047 Test_plan EURUSD,H1: array_class_ptr.At(1)==&class_ptr:true
2019.05.17 22:43:05.047 Test_plan EURUSD,H1: CheckPointer(array_class_ptr.At(0))==POINTER_DYNAMIC:true
2019.05.17 22:43:05.047 Test_plan EURUSD,H1: array_string.At(1)==best:true
2019.05.17 22:43:05.047 Test_plan EURUSD,H1: array_string.At(0)==test:true
2019.05.17 22:43:05.047 Test_plan EURUSD,H1: array_int.At(1)==4:true
2019.05.17 22:43:05.047 Test_plan EURUSD,H1: array_int.At(0)==1:true
 
Sergey Dzyublik:

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

Ну ок, флаг в руки, как говорится )

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

 
Alexey Navoykov:

Ну ок, флаг в руки, как говорится )

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

 
Sergey Dzyublik:

Предоставьте, пожалуйста, пример, где без возвращения разных типов ни как не обойтись.

MqlParam Params[10];

iCustom(symbol, period, name,
        (Params[0].type == TYPE_STRING) ? Params[0].string_value : Params[0].double_value,
        (Params[1].type == TYPE_STRING) ? Params[1].string_value : Params[1].double_value,
        (Params[2].type == TYPE_STRING) ? Params[2].string_value : Params[2].double_value,
        (Params[3].type == TYPE_STRING) ? Params[3].string_value : Params[3].double_value,
        (Params[4].type == TYPE_STRING) ? Params[4].string_value : Params[4].double_value,
        (Params[5].type == TYPE_STRING) ? Params[5].string_value : Params[5].double_value,
        (Params[6].type == TYPE_STRING) ? Params[6].string_value : Params[6].double_value,
        (Params[7].type == TYPE_STRING) ? Params[7].string_value : Params[7].double_value,
        (Params[8].type == TYPE_STRING) ? Params[8].string_value : Params[8].double_value,
        (Params[9].type == TYPE_STRING) ? Params[9].string_value : Params[9].double_value,
        mode, shift);
В данном случае можно написать 1024 iCustom, но длина массивы Params может быть значительно больше десяти.
 
fxsaber:
В данном случае можно написать 1024 iCustom, но длина массивы Params может быть значительно больше десяти.


ой я тоже с этой проблемой бился недавно, 

если в мт4 индикатор с string - то все пропало..

 
Alexey Navoykov:

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

Спасибо за идею добавить негативные тест кейсы.
Так же добавлен пример работы со strings и classes.

// Negative test cases
   
   struct StructA{
      uchar data;
   } a;
  
   //array_stuct.Add(a);           //Ok Compile Error 'Add' - no one of the overloads can be applied to the function call 
   //array_stuct.Add(1);           //Ok Compile Error 'operator=' - object required
   //array_stuct.Add("test");      //Ok Compile Error error 'operator=' - object required 
   //array_int.Add("test");        //Ok Compile Warning(s) implicit conversion from 'string' to 'number'  
   //array_int.Add(2234.4);        //Ok Compile Warning(s) implicit conversion from 'string' to 'number'


   class ClassB{
   
   } b;
   
   //array_class.Add(b);           //Ok Compile Error 'Add' - no one of the overloads can be applied to the function call
   //array_class.Add(1);           //Ok Compile Error 'value' - parameter conversion not allowed  
   //array_class_ptr.Add(&b);      //Ok Compile Error '=' - type mismatch    
   //array_class_ptr.Add(1);       //Ok Compile Error 'value' - parameter conversion not allowed
 
fxsaber:
В данном случае можно написать 1024 iCustom, но длина массивы Params может быть значительно больше десяти.

Т.е. у вас имеется 1024 индикатора с разными типами параметров?

 
fxsaber:
В данном случае можно написать 1024 iCustom, но длина массивы Params может быть значительно больше десяти.

 К сожалению не понимаю сути проблемы из-за относительно давнего опыта использования iCustom.

1. Проблема в большом листинге? Можно где-то ошибиться?
2. Данные беруться с MqlParam Params[10], но это же параметр для функции IndicatorCreate, почему она не используется?

 
Alexey Navoykov:

Т.е. у вас имеется 1024 индикатора с разными типами параметров?

Если индикатор состоит из 10 параметров, то прописав 1024 iCustom можно всегда точно выйти на правильный вызов.

 
fxsaber:
В данном случае можно написать 1024 iCustom, но длина массивы Params может быть значительно больше десяти.

Это давнишняя нерешаемая проблема в нотации iCustom. В МТ5 можно попробовать IndicatorCreate.

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