Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 975

 
Tango_X:

Здравствуйте! разложите конструкцию на операторы if... C= (i>0) ? (A>B) ? 1 : (A<B) ? 2 : C: 0;

читал по справке - но не справился)

if
(i>0)   {    if(A>B)      {       C=1;      }    else      {       if(A<B)         {          C=2;         }       else         {          C=C;         }      }   } else   {    C=0;   }

Artyom Trishkin:

Вроде так:

ЗЫ. Справка-то тут не при чём. Тут логика.

Обьясните в каком месте присутствует операция С=С

ЗЫ. Неработает почему то логика)

 
Tango_X:

Обьясните в каком месте присутствует операция С=С

ЗЫ. Неработает почему то логика)

Зная Артёма, я не сомневаюсь что он расписал правильно, просто хочу попробовать объяснить чуток по-другому.

C =   // присвоить переменной С значение
(i>0) // если первое условие выполнено
?     // то
(A>B) // если и второе условие выполнено
?     // то С
1     // будет равно 1
:     // иначе, (относится ко второму условию) если второе условие НЕ выполнено
(A<B) // если третье условие выполнено
?     // то С
2     // будет равно 2
:     // иначе (относится к третьему условию) если третье условие НЕ выполнено
C     // то С будет равно предыдущему значению. То-есть изменено не будет
:     // иначе (относится первому условию) если первое условие НЕ выполнено
0     // С будет равно 0
;
 
Alexey Viktorov:

Зная Артёма, я не сомневаюсь что он расписал правильно, просто хочу попробовать объяснить чуток по-другому.

спасибо!

 
Tango_X:

Обьясните в каком месте присутствует операция С=С

ЗЫ. Неработает почему то логика)

В этом:

C = (i>0) ? (A>B) ? 1 : (A<B) ? 2 : C: 0;
ЗЫ. Работает.
 
Artyom Trishkin:

В этом:

ЗЫ. Работает.

Спасибо!

 

А как искать в по массиву объектов?

Вот например как я ищу по моему массиву объектов CArrayObj. Задача найти экземпляр со значением, возвращаемым одним из методов, равным заданному (offset). Делаю это полным перебором, что получается очень долго, ввиду огромного числа элементов в массивве. Как сделать правильно?

CArrayObj m_bind_shifts;

CBindParams *CCheckRules::GetBindObjectByOffset(int offset)
  {
   for(int i=0;i<m_bind_shifts.Total();i++)
     {
      if(!CheckPointer(m_bind_shifts.At(i)))
         continue;
      CBindParams *value=m_bind_shifts.At(i);
      if(value==NULL)
         continue;
      //Print(__FUNCTION__+": offset from array: ",value.Shift());
      if(value.Shift()==offset)
        {
         return GetPointer(value);
        }
     }
   CBindParams *value=new CBindParams();
   value.GroupID(0);
   return value;
  }

В C# это делается просто:

Find (x=>x.method()==value)

И даже не важно сортирован список или нет. А здесь как быть? В CList я тоже не нашел каких-то готовых методов.

 
Juer:

А как искать в по массиву объектов?

Вот например как я ищу по моему массиву объектов CArrayObj. Задача найти экземпляр со значением, возвращаемым одним из методов, равным заданному (offset). Делаю это полным перебором, что получается очень долго, ввиду огромного числа элементов в массивве. Как сделать правильно?

В C# это делается просто:

Find (x=>x.method()==value)

И даже не важно сортирован список или нет. А здесь как быть? В CList я тоже не нашел каких-то готовых методов.

offset у меня здесь уникальный. CHashMap видимо мне поможет? Но сложно ж как... :(

Но всё равно непонятно. Объект-то у меня имеет кучу методов. Как мне указатель на объект получить?

 
Juer:

offset у меня здесь уникальный. CHashMap видимо мне поможет? Но сложно ж как... :(

Но всё равно непонятно. Объект-то у меня имеет кучу методов. Как мне указатель на объект получить?

https://www.mql5.com/ru/articles/1334#summary думаю то, что надо
Рецепты MQL5 - Реализуем ассоциативный массив или словарь для быстрого доступа к данным
Рецепты MQL5 - Реализуем ассоциативный массив или словарь для быстрого доступа к данным
  • www.mql5.com
Эта статья описывает удобный класс для хранения информации - ассоциативный массив или словарь. Благодаря этому классу можно получать доступ к информации по ее ключу. Ассоциативный массив напоминает обычный массив, однако вместо индекса он использует некий уникальный ключ, например, перечисление ENUM_TIMEFRAMES или какой-либо текст. Что...
 
Juer:

... Задача найти экземпляр со значением, возвращаемым одним из методов, равным заданному (offset). Делаю это полным перебором, что получается очень долго, ввиду огромного числа элементов в массивве. ...

В C# это делается просто:

Find (x=>x.method()==value)

И даже не важно сортирован список или нет. ...

А в C# значит это лямба-выражение с помощью некой магии, отработает прям-таки быстро? 

Если method() возвращает одно и тоже значение - ищите через словарь. Если значения каждый раз разные - только полным перебором каждый раз.

 
Vasiliy Sokolov:

А в C# значит это лямба-выражение с помощью некой магии, отработает прям-таки быстро? 

Если method() возвращает одно и тоже значение - ищите через словарь. Если значения каждый раз разные - только полным перебором каждый раз.

Ну да, там же Linq. Одинаковые значения. Да что-то вот креш ловлю на одной из машин. Код везде один.

На добавлении m_dict.AddObject(str_array[0],field);

GN      2       18:25:19.855    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00   Access violation at 0x00007FF7EA6B79CF read to 0x000001EA0000006E
IO      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B7940 48895C2408        mov        [rsp+0x8], rbx
JN      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B7945 57                push       rdi
FQ      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B7946 4883EC20          sub        rsp, 0x20
MK      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B794A 488B4108          mov        rax, [rcx+0x8]
NG      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B794E 33DB              xor        ebx, ebx
NF      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B7950 488BF9            mov        rdi, rcx
FF      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B7953 4885C0            test       rax, rax
OM      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B7956 740E              jz         0x7ff7ea6b7966
LS      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00   
LF      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B7958 48395808          cmp        [rax+0x8], rbx
GK      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B795C 7568              jnz        0x7ff7ea6b79c6
MQ      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00   
FK      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B795E 488B00            mov        rax, [rax]
LF      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B7961 4885C0            test       rax, rax
MG      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B7964 75F2              jnz        0x7ff7ea6b7958
OQ      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00   
EH      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B7966 488D15932A1800    lea        rdx, [rip+0x182a93]
HE      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B796D B918000400        mov        ecx, 0x40018
HK      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B7972 E8919CE8FF        call       0x7ff7ea541608  ; #12238 (metatester64.exe)
DQ      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B7977 4885C0            test       rax, rax
RM      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B797A 750B              jnz        0x7ff7ea6b7987
QE      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00   
ML      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B797C 488B5C2430        mov        rbx, [rsp+0x30]
NO      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B7981 4883C420          add        rsp, 0x20
OR      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B7985 5F                pop        rdi
OD      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B7986 C3                ret        
GH      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00   
OR      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B7987 895810            mov        [rax+0x10], ebx
KN      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B798A 4C8D4014          lea        r8, [rax+0x14]
GJ      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B798E 488B4F08          mov        rcx, [rdi+0x8]
KF      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B7992 8BD3              mov        edx, ebx
FD      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B7994 488908            mov        [rax], rcx
NK      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B7997 48894708          mov        [rdi+0x8], rax
IO      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B799B 0F1F440000        nop        [rax+rax+0x0]
DQ      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B79A0 498918            mov        [r8], rbx
DO      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B79A3 4D8D8000010000    lea        r8, [r8+0x100]
QO      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B79AA 4863CA            movsxd     rcx, edx
IF      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B79AD 488D5814          lea        rbx, [rax+0x14]
KJ      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B79B1 48C1E108          shl        rcx, 0x8
KF      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B79B5 FFC2              inc        edx
EH      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B79B7 4803D9            add        rbx, rcx
KS      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B79BA 81FA00040000      cmp        edx, 0x400
IM      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B79C0 72DE              jb         0x7ff7ea6b79a0
RM      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00   
PE      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B79C2 48895808          mov        [rax+0x8], rbx
GL      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B79C6 488B5008          mov        rdx, [rax+0x8]
OS      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B79CA 488B5C2430        mov        rbx, [rsp+0x30]
KS      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00      crash -->  00007FF7EA6B79CF 488B0A            mov        rcx, [rdx]
CL      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B79D2 48894808          mov        [rax+0x8], rcx
JJ      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B79D6 488902            mov        [rdx], rax
ND      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B79D9 FF4010            inc        dword [rax+0x10]
JK      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B79DC 488D4208          lea        rax, [rdx+0x8]
QQ      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B79E0 4883C420          add        rsp, 0x20
LL      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00                 00007FF7EA6B79E4 5F                pop        rdi
MR      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00   
CK      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00   00: 0x00007FF7EA6B79CF
FH      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00   01: 0x000001EA99EB0478
KL      2       18:25:19.862    CandleTypeStrategy (GBPUSD,M30) 2016.01.01 00:00:00   02: 0x0000000000000001
Причина обращения: