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

 
x572intraday:

Результат:

 Что за странное незаданное число? В Справке не нашёл и не гуглится. На EMPTY_VALUE не похоже.

Какой-то мусор

Установите значение

int Arr[1]={0};
 
Vitaly Muzichenko:

Какой-то мусор

Установите значение

 Да мне не для практики, а чисто из теоретического любопытства. На мусор было скорее похоже другое число (9xxx — не запомнил точно) и появлялось оно только раз и к тому же больше воспроизвести не удалось, а вот вышеприведённое число было постоянным и повторялось из раза в раз. (Интересно, у Вас и у других оно такое же?) Мне на него параллельно, главное, чтобы другие программисты об него не споткнулись больно.

 
x572intraday:

 Да мне не для практики, а чисто из теоретического любопытства. На мусор было скорее похоже другое число (9xxx — не запомнил точно) и появлялось оно только раз и к тому же больше воспроизвести не удалось, а вот вышеприведённое число было постоянным и повторялось из раза в раз. (Интересно, у Вас и у других оно такое же?) Мне на него параллельно, главное, чтобы другие программисты об него не споткнулись больно.

У меня "0", проверял несколько раз

 
Vitaly Muzichenko:

У меня "0", проверял несколько раз

 Хм... Не знаю как одно обстоятельство связано с другим, но запускал в виде индикатора на разных валютных парах — числа лезут разные (на каждом инструменте повторяется с каждым тиком одно и то же число), был даже ноль. Странно. Но похоже на то, что без инициализации своим числом это действительно мусор.

 
x572intraday:

 Хм... Не знаю как одно обстоятельство связано с другим, но запускал в виде индикатора на разных валютных парах — числа лезут разные (на каждом инструменте повторяется с каждым тиком одно и то же число), был даже ноль. Странно. Но похоже на то, что без инициализации своим числом это действительно мусор.

Перепроверил снова, вставив код по тикам

в мт4 постоянно 0

в мт5 да, то 0-крайне редко, то число 511026368

 
x572intraday:

 Хм... Не знаю как одно обстоятельство связано с другим, но запускал в виде индикатора на разных валютных парах — числа лезут разные (на каждом инструменте повторяется с каждым тиком одно и то же число), был даже ноль. Странно. Но похоже на то, что без инициализации своим числом это действительно мусор.

Под массив (и все другие переменные) при его создании выделена память. Если массив не инициализирован, то в этой памяти то что там осталось с прошлых использований=мусор.

Если вы не меняете значения из программы, то ничего с этой памятью и не происходит, мусор сохраняет своё значение.

в МТ4 принудительно инициализируются нулём все переменные и массивы.

 

Не вызывается CExpert.TradeEventOrderTriggered()

При работе с рынком FORTS, сервер BCS-Demo, обнаружилась нестабильность вызова CExpert.TradeEventOrderTriggered() при срабатывании отложенных ордеров.
В код метода CExpert::CheckTradeState стандартной библиотеки MQL5 не учитывает возможную асинхронность получения информации о позициях, ордерах, сделках и истории.

1446://--- check triggering of a pending order
1447:   if(hist_ord_tot==m_hist_ord_tot+1 && ord_tot==m_ord_tot-1)
1448:     {
1449:      //--- triggering of a pending order
1450:      if(deal_tot==m_deal_tot+1)

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

Лог вызовов метода bool CExpert::CheckTradeState(void). Одному вызову CheckTradeState() соответствуют 2 строчки " CheckTradeState: ....."

//Сработал отложенный ордер открытия позиции
CheckTradeState: hist_ord_tot = 613 ord_tot = 0 deal_tot = 544 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 613 m_ord_tot = 1 m_deal_tot = 543 m_pos_tot = 0
CheckTradeState: hist_ord_tot = 614 ord_tot = 1 deal_tot = 544 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 614 m_ord_tot = 1 m_deal_tot = 544 m_pos_tot = 1

//Сработал отложенный ордер открытия позиции 
CheckTradeState: hist_ord_tot = 615 ord_tot = 1 deal_tot = 546 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 615 m_ord_tot = 1 m_deal_tot = 545 m_pos_tot = 0
CheckTradeState: hist_ord_tot = 615 ord_tot = 0 deal_tot = 546 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 615 m_ord_tot = 1 m_deal_tot = 546 m_pos_tot = 1
CheckTradeState: hist_ord_tot = 616 ord_tot = 0 deal_tot = 546 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 616 m_ord_tot = 0 m_deal_tot = 546 m_pos_tot = 1

Из лога видно:
1. После срабатывания отложенных ордеров, длина истории обновляется позднее чем информация о сделках, ордерах и позициях, что приводит к невозможности выполнения 1-го условия в коде.
2. Возможна рассинхронизация получения информации об изменении числа ордеров, сделок и позиций, что приводит к невозможности выполнения 2-го условия в коде (если каким-либо образом обойти первую проблему и выполнить первый if). Возможно, эта рассинхронизация возникла выполнения ордера в 2 этапа (по частям: 1лот+1лот), но в таком случае, почему число сделок +1, а не +2.

Закостылил, таким кодом:

//--- establishment of the checkpoint history of the trade
   bool isSyncMode = MQLInfoInteger(MQL_TESTER) || MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_VISUAL_MODE);
   if(!isSyncMode)
      HistorySelect(m_beg_date,TimeCurrent());
   else
      HistoryPoint(true);
//---
   return(res);

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

P.S. Создаётся впечатление, что данная часть стандартной библиотеки недоработана. Особенно, смущает кусок кода, написанный 3 раза подряд.

1458: res=TradeEventOrderTriggered();
1459: //--- establishment of the checkpoint history of the trade
1460: HistoryPoint(true);
1461: return(res);

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

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Посмотрел размеры EX5-файлов советников в Маркете. Все, что смотрел, меньше 200 Кб. За счет чего получается достигать таких малых размеров? Простой код?
 
fxsaber:
Посмотрел размеры EX5-файлов советников в Маркете. Все, что смотрел, меньше 200 Кб. За счет чего получается достигать таких малых размеров? Простой код?

думаю, что авторы просто гении, у 90% топовых продавцов, вообще отсутствуют вопросы по платформе - соответственно и коды  пишут обладая прирождённым знанием )))


такой вот вопрос:

подключаю ресурсом данные:

#resource "Common\\Files\\EURUSD_tick.bin" as const MqlTick HistoryData[]

получаю ошибку:

resource file 'Common\Files\EURUSD_tick.bin' not found

cannot open resource file .....\\MQL5\Experts\Virtual\Common\Files\EURUSD_tick.bin' (3)

если файл располагаю в папке ЕА или в папке Files, то все ОК


получается, что нельзя из папки Common подключить ресурс? -или нужно путь еще как прописать?

 
Igor Makanu:

думаю, что авторы просто гении, у 90% топовых продавцов, вообще отсутствуют вопросы по платформе - соответственно и коды  пишут обладая прирождённым знанием )))

Для вопросов другие учетки.

нельзя из папки Common подключить ресурс? -или нужно путь еще как прописать?

Не в курсе.