Новая версия платформы MetaTrader 5 build 2360: Расширение интеграции с SQLite - страница 10

 
Artyom Trishkin:

У него отработало всё точно так же:

Вопрос был в другом: почему в журнал пишется "ENUM_ORDER_TYPE::-1", а не "WRONG_VALUE".

Ответ я уже дал.

А если посмотреть внимательно:

GBPUSD 2020.04 . 02 19 : 40 : 00 2020.04 . 02 18 : 40 : 10 SigTrend: ENUM_ORDER_TYPE ::- 1 SigAdd: ORDER_TYPE_BUY SigClose: ENUM_ORDER_TYPE ::- 1 
Я ожидаю WRONG_VALUE, но не -1

Для SigTrend вернуло -1, а SigAdd почему-то ORDER_TYPE_BUY. Поэтому я спросил - где весь полный код. Так как SigAdd инициализирована значением '-1', а выдало ORDER_TYPE_BUY

 
Carl Schreiber:

С точки зрения программиста, я понимаю это, но с точки зрения пользователя, я бы этого не ожидал. WRONG_VALUE также является допустимым значением перечисления.

From the programmer's point of view, I understand that, but from the user's point of view, I would not expect that. WRONG_VALUE is also a valid value of the enumeration.

Только в том случае, если в перечислении объявлена константа со значением -1.

Если в перечислении нет константы с таким значением, то в журнал выводится ваша попытка преобразования WRONG_VALUE в значение перечисления ENUM_ORDER_TYPE.

 
Vladimir Karputov:

А если посмотреть внимательно:

Для SigTrend вернуло -1, а SigAdd почему-то ORDER_TYPE_BUY. Поэтому я спросил - где весь полный код. Так как SigAdd инициализирована значением '-1', а выдало ORDER_TYPE_BUY

Это не относится к его вопросу "Я ожидаю WRONG_VALUE, но не -1":

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

Новая версия платформы MetaTrader 5 build 2360: Расширение интеграции с SQLite

Carl Schreiber, 2020.04.02 18:46

Нет WRONG_VALUE?

Эта:

 static ENUM_ORDER_TYPE SigTrend = WRONG_VALUE , 
                       SigAdd   = WRONG_VALUE , 
                       SigClose = WRONG_VALUE ;
...
 Print ( _Symbol , " " , TimeCurrent (), " " , TimeLocal (), " SigTrend: " , EnumToString (SigTrend), " SigAdd: " , EnumToString (SigAdd), " SigClose: " , EnumToString (SigClose));

Создает это в журнале экспертов:

CS       0        18 : 40 : 10.062     exp_HalfTrend v04 (GBPUSD,H1)   GBPUSD 2020.04 . 02 19 : 40 : 00 2020.04 . 02 18 : 40 : 10 SigTrend: ENUM_ORDER_TYPE ::- 1 SigAdd: ORDER_TYPE_BUY SigClose: ENUM_ORDER_TYPE ::- 1 

Я ожидаю WRONG_VALUE, но не -1

Вполне вероятно, что код предоставлен не полный. Но я ответил на заданный вопрос, а не на то, почему он не предоставил полный код - может он до распечатки в журнал уже присвоил значение 0 переменной SigAdd. Это не относится к его вопросу же.

В общем - не суть важно :)

 

Переменные соответственно инициализируются.

Позже в коде, если условия выполняются, им присваиваются ORDER_TYPE_BUY или ORDER_TYPE_SELL (только эти два!) - если ни одно из условий не выполняется, значения остаются такими же, как в WRONG_VALUE:

The variables are initialized accordingly.

Later in the code, if the conditions are met, they are assigned ORDER_TYPE_BUY or ORDER_TYPE_SELL (only those two!) - if neither of the conditions is true, the values remain as they are at WRONG_VALUE:

 static ENUM_ORDER_TYPE SigTrend = WRONG_VALUE, 
                        SigAdd   = WRONG_VALUE, 
                        SigClose = WRONG_VALUE;
...
 If ( /* Trend changes to up   */ ) { SigTrend = ORDER_TYPE_BUY;  SigClose = ORDER_TYPE_SELL; }
 If ( /* Trend changes to down */ ) { SigTrend = ORDER_TYPE_SELL; SigClose = ORDER_TYPE_BUY; }
...
 Print ( _Symbol , " " , TimeCurrent (), " " , TimeLocal (), " SigTrend: " , EnumToString (SigTrend), " SigAdd: " , EnumToString (SigAdd), " SigClose: " , EnumToString (SigClose));
 if ( SigTrend == ORDER_TYPE_BUY ) { //buy
...
To me it's more a cosmetic problem than a serious one.
Новая версия платформы MetaTrader 5 build 2360: Расширение интеграции с SQLite
Новая версия платформы MetaTrader 5 build 2360: Расширение интеграции с SQLite
  • 2020.04.01
  • www.mql5.com
В пятницу 6 марта 2020 года будет выпущена обновленная версия платформы MetaTrader 5...
 
Carl Schreiber:

Переменные соответственно инициализируются.

Позже в коде, если условия выполняются, им присваиваются ORDER_TYPE_BUY или ORDER_TYPE_SELL (только эти два!) - если ни одно из условий не выполняется, значения остаются такими же, как в WRONG_VALUE:

The variables are initialized accordingly.

Later in the code, if the conditions are met, they are assigned ORDER_TYPE_BUY or ORDER_TYPE_SELL (only those two!) - if neither of the conditions is true, the values remain as they are at WRONG_VALUE:

To me it's more a cosmetic problem than a serious one.

А проблема-то где?

 
Carl Schreiber:

Переменные соответственно инициализируются.

Позже в коде, если условия выполняются, им присваиваются ORDER_TYPE_BUY или ORDER_TYPE_SELL (только эти два!) - если ни одно из условий не выполняется, значения остаются такими же, как в WRONG_VALUE:

The variables are initialized accordingly.

Later in the code, if the conditions are met, they are assigned ORDER_TYPE_BUY or ORDER_TYPE_SELL (only those two!) - if neither of the conditions is true, the values remain as they are at WRONG_VALUE:

To me it's more a cosmetic problem than a serious one.

Обратите внимание на это

WRONG_VALUE

Константа может неявно приводиться к типу любого перечисления.

-1

Следовательно: Если вы присваиваете перечислениям ENUM_ORDER_TYPE значение WRONG_VALUE это не означает, что значение будет равно -1

Это означает, что будет присвоено значение 0, что означает ORDER_TYPE_BUY

 
Alexey Viktorov:

Обратите внимание на это

WRONG_VALUE

Константа может неявно приводиться к типу любого перечисления.

-1

Следовательно: Если вы присваиваете перечислениям ENUM_ORDER_TYPE значение WRONG_VALUE это не означает, что значение будет равно -1

Это означает, что будет присвоено значение 0, что означает ORDER_TYPE_BUY

Не так.

WRONG_VALUE приводится к типу ENUM_ORDER_TYPE, соответственно и выводится значение WRONG_VALUE как тип ENUM_ORDER_TYPE:

ENUM_ORDER_TYPE::-1. При этом явно указывается контекст (::) именно перечисления.

WRONG_VALUE при этом никак не становится равным нулю. Невозможно взять, и присвоить константе ORDER_TYPE_BUY какое-либо значение кроме уже имеющегося.
Равно как и константе WRONG_VALUE нельзя присвоить иное значение кроме -1.

Так как в перечислении ENUM_ORDER_TYPE нет ни одной константы со значением -1 (которое можно сравнить с константой WRONG_VALUE), поэтому и выводится в журнал запись

ENUM_ORDER_TYPE::-1, говорящая о том, что константа WRONG_VALUE была приведена к типу перечисления ENUM_ORDER_TYPE.

А человек ожидал увидеть запись "WRONG_VALUE". Для этого ему самому нужно при выводе проверить значение переменной и вывести строку "WRONG_VALUE" в случае, если переменная равна -1.

 

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

Новая версия платформы MetaTrader 5 build 2360: Расширение интеграции с SQLite

fxsaber, 2020.03.24 23:13

Терминал по какой-то причине выбрал медленную торговую точку.


Пока вручную не сделал пересканирование, ничего не менялось. После пересканирования стало так.


По какой причине такое происходит?

На другом сервере ситуация такая же.


До ручного пересканирования.


После.


По двум ситуациям видно, что по какой-то причине MT5 начинает видеть только одну точку. После пересканирования - все.

 
Сделайте возможность отключения обновления, вот как видно из поста выше надёжность превыше обновлений.
 
fxsaber:

На другом сервере ситуация такая же.


До ручного пересканирования.


После.


По двум ситуациям видно, что по какой-то причине MT5 начинает видеть только одну точку. После пересканирования - все.

Опишите предыдущее состояние терминала, пожалуйста:

  • когда он был установлен
  • Сколько  времени проработал до этого состояния под этим аккаунтом и сервером
  • Происходила ли замена/подмена или еще какое-либо манипулирование любым конфигурационным файлом
  • Менялись ли или зачищались настройки терминала в реестре
  • Что в логах писалось о ресканах с последнего нормального показа скоростей