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

 

мне кажется беда с подгрузкой истории. 

вчера ждал минут 30, потом сменил счет, сегодня решил перепроверить:


  1. Открываю рублевый счет RUR
  2. в тестере запускают тест на паре EURUSD 
  3. терминал пытается подгрузить котировки EURRUR
  4. Котировок нет, тестер завис



чего то помучался, потом опять решил скачать историю, которой нет

2018.02.21 15:58:48.244 Tester  EURRUR: history data begins from 2018.02.21 00:00
2018.02.21 15:58:48.344 Tester  USDRUR: preliminary downloading of M1 history started
2018.02.21 15:58:49.244 Tester  USDRUR: 20% history downloaded
2018.02.21 15:58:49.544 Tester  USDRUR: 30% history downloaded
2018.02.21 15:58:49.844 Tester  USDRUR: 40% history downloaded
2018.02.21 15:58:50.144 Tester  USDRUR: 51% history downloaded
2018.02.21 15:58:50.444 Tester  USDRUR: 61% history downloaded
2018.02.21 15:58:50.657 Tester  USDRUR: 71% history downloaded
2018.02.21 15:58:51.057 Tester  USDRUR: 81% history downloaded
2018.02.21 15:58:51.357 Tester  USDRUR: 91% history downloaded
2018.02.21 15:58:51.657 Tester  USDRUR: preliminary downloading of M1 history completed in 0:03.417
2018.02.21 15:58:51.657 Tester  USDRUR: history data begins from 2016.12.26 00:00
2018.02.21 15:58:51.661 Core 1  agent process started
2018.02.21 15:58:52.095 Core 1  connecting to 127.0.0.1:3000
2018.02.21 15:58:52.095 Core 1  connected
2018.02.21 15:58:52.103 Core 1  authorized (agent build 1755)
2018.02.21 15:58:52.105 Tester  EURUSD,H1 (Alpari-MT5-Demo): testing of Experts\Exp - TickSniper PRO FULL v36 20180220.ex5 from 2018.01.01 00:00 to 2018.02.10 00:00
2018.02.21 15:58:52.891 Core 1  common synchronization completed
2018.02.21 15:58:53.064 Tester  quality of analyzed history is 100%
2018.02.21 15:58:54.393 Core 1  EURRUR: history synchronization started



на USDJPY все нормально

 

Получается глупая ситуация с барами кастомных символов. Записать в историю (CustomRatesReplace) могу сколько угодно баров, а прочитать их (CopyRates) тут же - нет (TERMINAL_MAXBARS).

Надо как-то решать эту неправильную ситуацию. Отлично видно начало локальной Истории через

SeriesInfoInteger(_Symbol, PERIOD_M1, SERIES_SERVER_FIRSTDATE);

Но добраться до нее

Может, дать возможно менять TERMINAL_MAXBARS через MQL? Или сделать перегрузку CopyRates без ограничения MaxBars?

 

Давно отметил такое поведение MT5, но сейчас решил написать.

Работаю в ME и MT5+тестер. Иногда не подключиться к Агенту и требуется перезагрузка Терминала. К этому багу привык, поэтому речь не о нем.

Итак, закрываю Терминал, а в ME жму F4 - открыть Терминал. И вот здесь начинается какая-то ерунда.

ME несколько раз погружается в состояние "Не отвечает". Терминал не запускается. Через несколько секунд жму повторно F4 - реакция, как и до этого.

По итогу секунд через 20 (минимум) на не слабой машине (куча памяти, SSD, 95% CPU свободно) Терминал все же запускается.

Если сравнивать с MT4 - небо и земля. MT4 почти мгновенно запускается по F4 из ME. MT5 - как какое-то супер-сырое приложение стартует.

 
fxsaber:

Получается глупая ситуация с барами кастомных символов. Записать в историю (CustomRatesReplace) могу сколько угодно баров, а прочитать их (CopyRates) тут же - нет (TERMINAL_MAXBARS).

Надо как-то решать эту неправильную ситуацию. Отлично видно начало локальной Истории через

Но добраться до нее

Может, дать возможно менять TERMINAL_MAXBARS через MQL? Или сделать перегрузку CopyRates без ограничения MaxBars?

В СД считают, что нет проблемы в том, когда нельзя получить историю котировок дальше, чем MaxBars. Такой пример (один из МНОГИХ сценариев, где нужная история, которая уже ЕСТЬ на локальной машине)

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

Представим себе Маркет-продукт, который призван рассчитать стат. данные эквити-линии.

Получается, что пользователь, перед тем, как применить этот продукт, вынужден будет делать UnlimitBars. А после применения - возвращать обратно.

не впечатлил. Костылище остается жить!

 

При запуске терминала индикаторы не всегда возвращают ACCOUNT_LOGIN

0 11:00:01.880 Custom indicator tester EURUSD,H1: loaded successfully
0 11:00:01.887 tester EURUSD,H1: OnInit 0            < ----  AccountInfoInteger(ACCOUNT_LOGIN)  вернула 0
0 11:00:01.887 tester EURUSD,H1: initialized
0 11:00:01.887 tester EURUSD,H1: OnCalculate 0  < ----  AccountInfoInteger(ACCOUNT_LOGIN)  вернула 0
0 11:00:05.980 tester EURUSD,H1: OnCalculate 0  < ----  AccountInfoInteger(ACCOUNT_LOGIN)  вернула 0
0 11:00:06.654 tester EURUSD,H1: OnCalculate 0  < ----  AccountInfoInteger(ACCOUNT_LOGIN)  вернула 0
0 11:00:07.030 tester EURUSD,H1: OnCalculate 442394  < ----  AccountInfoInteger(ACCOUNT_LOGIN)  вернула номер счета
0 11:00:07.040 tester EURUSD,H1: OnCalculate 442394  < ----  AccountInfoInteger(ACCOUNT_LOGIN)  вернула номер счета

Исходный код

//+------------------------------------------------------------------+
//|                                                       tester.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   string text=IntegerToString(AccountInfoInteger(ACCOUNT_LOGIN));
   Print("OnInit "+text);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   string text=IntegerToString(AccountInfoInteger(ACCOUNT_LOGIN));
   Print("OnCalculate "+text);
   return(rates_total);
  }
//+------------------------------------------------------------------+

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

 
Vladimir Pastushak:

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

Номер счета никогда не использую в советниках и индикаторах, за исключение Report-дел.

Но согласен, что даже в оффлайне номер счета (последнего коннекта до выключения терминала) должен быть всегда доступен.

 
fxsaber:

Номер счета никогда не использую в советниках и индикаторах, за исключение Report-дел.

Но согласен, что даже в оффлайне номер счета (последнего коннекта до выключения терминала) должен быть всегда доступен.

В онлайне то же. Нужно всегда знать и понимать под каким аккаунтом что произошло и в какой момент.

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

Это не "шараш монташ", тут у людей миллионы на счетах могут быть....

 
Vladimir Pastushak:

В онлайне то же. Нужно всегда знать и понимать под каким аккаунтом что произошло и в какой момент.

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

Это не "шараш монташ", тут у людей миллионы на счетах могут быть....

99% советников не анализируют номер счета.

 
fxsaber:

99% советников не анализируют номер счета.

потому что 99,99% советников "шараш монташ" ....

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

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

 
Vladimir Pastushak:

потому что 99,99% советников "шараш монташ" ....

Пишу именно такие советники.

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