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

 
Alexey Kozitsyn:

А нажатием на колесико?

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

 

Тоже периодически возникает ошибка 4401 при получение в индикаторе данных цен закрытия.

Брокер "Открытие"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1

#property indicator_label1  "sign"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  clrBlack
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1


input int            inp_ma_period = 10;

string inp_Symbol   = _Symbol; // "Si Splice";
double sign[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0,sign,INDICATOR_DATA);

   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[])
  {
   if(Bars(_Symbol,_Period)<rates_total) return(prev_calculated);
   if(Bars(inp_Symbol,_Period)<rates_total) return(prev_calculated);

  
 int i=(int)MathMax(prev_calculated-1,1); for(; i<rates_total && !_StopFlag; i++)
     {
         CalcSpred(i,time[i]);
      
     }
   return (i);
  }
//==========================================================================
bool CalcSpred(int pos, datetime time_current)
{
   double  price[];
   ArraySetAsSeries(price,true); 

   sign[pos]= EMPTY_VALUE;
   
   ResetLastError();

    // получим цены закрытия
    if(CopyClose(inp_Symbol,_Period,time_current,inp_ma_period,price)<=0) 
     { 
        Print("_Symbol=",inp_Symbol);
        Print("Ошибка ",GetLastError()," получения цен по ",inp_Symbol," время ",time_current  );  return (false); 
     }       
     
   sign[pos]= price[0];
   return(true);   
   
}

в версии 1940 все работало.

 

и работает не стабильно. Включаю на м1 = все показывает.

Переключаю на Д1 = ошибка

m1d1

 
fxsaber:

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

2033 - ALT+G работает теперь, как и колесико. Но с методом в другом файле не срабатывает.

 
fxsaber:

2033 - поведение изменилось, но проблемным осталось. Невозможно использовать этот режим оптимизации.

Можно подробности?
 
Slava:
Можно подробности?

...
2019.05.09 08:49:24.765 Core 1  connecting to 127.0.0.1:3000
2019.05.09 08:49:24.765 Core 1  connected
2019.05.09 08:49:24.775 Core 5  connecting to 127.0.0.1:3004
2019.05.09 08:49:24.775 Core 5  connected
2019.05.09 08:49:24.776 Core 7  connection closed
2019.05.09 08:49:24.795 Core 7  connecting to 127.0.0.1:3006
2019.05.09 08:49:24.795 Core 7  connected
2019.05.09 08:49:24.836 Core 4  connection closed
2019.05.09 08:49:24.836 Core 6  connection closed
2019.05.09 08:49:24.839 Core 2  connection closed
2019.05.09 08:49:24.855 Core 2  connecting to 127.0.0.1:3001
2019.05.09 08:49:24.855 Core 2  connected
2019.05.09 08:49:24.855 Core 4  connecting to 127.0.0.1:3003
2019.05.09 08:49:24.855 Core 6  connecting to 127.0.0.1:3005
2019.05.09 08:49:24.855 Core 4  connected
2019.05.09 08:49:24.855 Core 6  connected
2019.05.09 08:49:24.856 Core 1  connection closed
2019.05.09 08:49:24.860 Core 2  authorized (agent build 2033)
2019.05.09 08:49:24.860 Tester  FILTER0_XBRUSD.rann_RannForex: history data begins from 2018.02.26 00:00
2019.05.09 08:49:24.860 Core 2  pass 78 started on FILTER0_XBRUSD.rann_RannForex
2019.05.09 08:49:24.863 Core 2  common synchronization completed
2019.05.09 08:49:24.869 Core 5  connection closed
2019.05.09 08:49:24.870 Core 1  connecting to 127.0.0.1:3000
2019.05.09 08:49:24.870 Core 1  connected
2019.05.09 08:49:24.880 Core 5  connecting to 127.0.0.1:3004
2019.05.09 08:49:24.880 Core 5  connected
2019.05.09 08:49:24.882 Core 7  connection closed
2019.05.09 08:49:24.890 Core 1  authorized (agent build 2033)
2019.05.09 08:49:24.891 Tester  FILTER0_XNGUSD.rann_RannForex: history data begins from 2018.02.26 00:00
2019.05.09 08:49:24.891 Core 1  pass 79 started on FILTER0_XNGUSD.rann_RannForex
2019.05.09 08:49:24.893 Core 1  common synchronization completed
2019.05.09 08:49:24.896 Core 2  FILTER0_XBRUSD.rann_RannForex: history for 2018 year synchronized
2019.05.09 08:49:24.896 Core 2  FILTER0_XBRUSD.rann_RannForex: history for 2019 year synchronized
2019.05.09 08:49:24.896 Core 2  FILTER0_XBRUSD.rann_RannForex: history synchronization completed [0 Kb]
2019.05.09 08:49:24.896 Core 2  FILTER0_XBRUSD.rann_RannForex: 0.20 Kb of history processed in 0:00.000
2019.05.09 08:49:24.901 Core 7  connecting to 127.0.0.1:3006
2019.05.09 08:49:24.901 Core 7  connected
2019.05.09 08:49:24.903 Core 5  authorized (agent build 2033)
2019.05.09 08:49:24.903 Tester  FILTER0_XRPUSD.rann_RannForex: history data begins from 2018.02.26 00:00
2019.05.09 08:49:24.903 Core 5  pass 80 started on FILTER0_XRPUSD.rann_RannForex
2019.05.09 08:49:24.905 Core 5  common synchronization completed
2019.05.09 08:49:24.911 Core 2  FILTER0_XBRUSD.rann_RannForex: ticks synchronized already [89 bytes]
2019.05.09 08:49:24.918 Core 1  FILTER0_XNGUSD.rann_RannForex: history for 2018 year synchronized
2019.05.09 08:49:24.919 Core 1  FILTER0_XNGUSD.rann_RannForex: history for 2019 year synchronized
2019.05.09 08:49:24.919 Core 1  FILTER0_XNGUSD.rann_RannForex: history synchronization completed [0 Kb]
2019.05.09 08:49:24.919 Core 1  FILTER0_XNGUSD.rann_RannForex: 0.20 Kb of history processed in 0:00.000
2019.05.09 08:49:24.924 Core 1  FILTER0_XNGUSD.rann_RannForex: ticks synchronized already [89 bytes]
2019.05.09 08:49:24.934 Core 5  FILTER0_XRPUSD.rann_RannForex: history for 2018 year synchronized
2019.05.09 08:49:24.934 Core 5  FILTER0_XRPUSD.rann_RannForex: history for 2019 year synchronized
2019.05.09 08:49:24.934 Core 5  FILTER0_XRPUSD.rann_RannForex: history synchronization completed [0 Kb]
2019.05.09 08:49:24.934 Core 5  FILTER0_XRPUSD.rann_RannForex: 0.20 Kb of history processed in 0:00.016
2019.05.09 08:49:24.941 Core 5  FILTER0_XRPUSD.rann_RannForex: ticks synchronized already [89 bytes]
2019.05.09 08:49:24.942 Core 4  connection closed
2019.05.09 08:49:24.943 Core 6  connection closed
2019.05.09 08:49:24.953 Core 4  connecting to 127.0.0.1:3003
2019.05.09 08:49:24.953 Core 4  connected
2019.05.09 08:49:24.963 Core 6  connecting to 127.0.0.1:3005
2019.05.09 08:49:24.963 Core 6  connected
2019.05.09 08:49:24.968 Core 6  authorized (agent build 2033)
2019.05.09 08:49:24.969 Tester  FILTER0_XTIUSD.rann_RannForex: history data begins from 2018.02.26 00:00
2019.05.09 08:49:24.969 Core 6  pass 81 started on FILTER0_XTIUSD.rann_RannForex
2019.05.09 08:49:24.971 Core 6  common synchronization completed
2019.05.09 08:49:24.976 Core 4  authorized (agent build 2033)
2019.05.09 08:49:24.977 Tester  TESTER_EURUSD: history data begins from 2019.04.22 00:00
2019.05.09 08:49:24.977 Core 4  pass 82 started on TESTER_EURUSD
2019.05.09 08:49:24.979 Core 4  common synchronization completed
2019.05.09 08:49:24.988 Core 7  connection closed
2019.05.09 08:49:25.005 Core 6  FILTER0_XTIUSD.rann_RannForex: history for 2018 year synchronized
2019.05.09 08:49:25.005 Core 6  FILTER0_XTIUSD.rann_RannForex: history for 2019 year synchronized
2019.05.09 08:49:25.005 Core 6  FILTER0_XTIUSD.rann_RannForex: history synchronization completed [0 Kb]
2019.05.09 08:49:25.005 Core 6  FILTER0_XTIUSD.rann_RannForex: 0.20 Kb of history processed in 0:00.000
2019.05.09 08:49:25.011 Core 6  FILTER0_XTIUSD.rann_RannForex: ticks synchronized already [89 bytes]
2019.05.09 08:49:25.021 Core 4  TESTER_EURUSD: history for 2019 year synchronized
2019.05.09 08:49:25.021 Core 4  TESTER_EURUSD: history synchronization completed [35 Kb]
2019.05.09 08:49:25.021 Core 4  TESTER_EURUSD: 35.34 Kb of history processed in 0:00.000
2019.05.09 08:49:25.026 Core 4  TESTER_EURUSD: ticks synchronized already [57 bytes]
2019.05.09 08:49:25.050 Core 1  pass 79 on FILTER0_XNGUSD.rann_RannForex returned result 10000.00 in 0:00:00.152
2019.05.09 08:49:25.131 Core 5  pass 80 on FILTER0_XRPUSD.rann_RannForex returned result 10000.00 in 0:00:00.216
2019.05.09 08:49:25.146 Core 4  pass 82 on TESTER_EURUSD returned result 10000.00 in 0:00:00.153
2019.05.09 08:49:25.149 Core 2  pass 78 on FILTER0_XBRUSD.rann_RannForex returned result 10000.00 in 0:00:00.270
2019.05.09 08:49:25.194 Core 6  pass 81 on FILTER0_XTIUSD.rann_RannForex returned result 10000.00 in 0:00:00.216
2019.05.09 08:49:25.217 Core 3  pass 77 on FILTER0_XAUUSD.rann_RannForex returned result 10000.00 in 0:00:00.558
2019.05.09 08:49:25.227 Tester  testing on MarketWatch symbols finished, total passes 83
2019.05.09 08:49:25.237 Statistics      optimization done in 1 minutes 15 seconds
2019.05.09 08:49:25.237 Statistics      shortest pass 0:00:00.000, longest pass 0:00:00.000, average pass 0:00:00.000
2019.05.09 08:49:25.237 Statistics      local 83 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

7 Агентов на 83 задания по тикам за две недели. Все тики уже лежат в Tester\bases.

Советник - пустышка. Каждый проход - сотни миллисекунд. Однако, все заняло 75 секунд. При этом статистика по длительности проходов показывает нули.


Логи Агентов все в таких записях

RP      3       08:49:24.540    Network additional connect from 127.0.0.1
LF      3       08:49:24.640    Network previous connect context not freed
PN      2       08:49:24.640    127.0.0.1       cannot accept connect, agent is busy
RH      3       08:49:24.645    Network additional connect from 127.0.0.1
JN      3       08:49:24.745    Network previous connect context not freed
FQ      2       08:49:24.745    127.0.0.1       cannot accept connect, agent is busy
CP      3       08:49:24.750    Network additional connect from 127.0.0.1
EQ      3       08:49:24.850    Network previous connect context not freed
QI      2       08:49:24.850    127.0.0.1       cannot accept connect, agent is busy
JO      3       08:49:24.856    Network additional connect from 127.0.0.1
PE      0       08:49:24.878    127.0.0.1       prepare for shutdown
 
Запускаю этот советник

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

Библиотеки: Symbol

fxsaber, 2019.03.02 13:23

// Пример создания "живого" символа.

#include <Symbol.mqh> // https://www.mql5.com/ru/code/18855

const bool Init = EventSetMillisecondTimer(20); // С такой частотой будем пробрасывать тики

void OnTimer()
{
  static bool FirstRun = true;

  static const SYMBOL Symb("CUSTOM_" + _Symbol); // Создали символ
  
  static MqlTick Ticks[];
  static int Pos = 0;
    
  if (FirstRun)
  {
    Symb.DeleteHistory();       // Мало ли что-то было в истории - грохнули
    Symb.Delete(true);          // Символ тоже прибьем, чтобы исключить наличие тика в Обзоре рынка
    Symb.Create(NULL, _Symbol); // Воскресили девственно чистым.
    
    if (Symb.IsExist() && Symb.On())   // Если все отлично
    {     
      ChartOpen(Symb.Name, PERIOD_M1); // Открыли чарт
      CopyTicksRange(_Symbol, Ticks, COPY_TICKS_INFO, (ulong)D'2019.05.01' * 1000); // Взяли тики для проброса
    }
      
    FirstRun = false;
  }
  else if (Pos < ArraySize(Ticks))
    Symb += Ticks[Pos++]; // Пробрасываем по тику
}

жму F8 и наблюдаю такое дерганье.


График иногда уходит на несколько секунд в режим "Ожидание обновления".

 

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

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

Alain Verleyen, 2019.04.30 20:33

Согласно документации , я использую ChartSetSymbolPeriod (), чтобы обновить индикатор (пересчитать).

Для воспроизведения используйте прикрепленный код на 2 графиках, один и тот же символ. Затем нажмите на ярлык «Обновить».

   bool ret=ChartSetSymbolPeriod(0,NULL,0);

2019.04.30 14:25:46.001    ChartSetSymbolPeriod (EURUSD,M15)    132011220927585854: OnCalculate prev_calculated=0
2019.04.30 14:25:52.103    ChartSetSymbolPeriod (EURUSD,H1)    132011222733257293: OnCalculate prev_calculated=0
2019.04.30 14:25:55.436    ChartSetSymbolPeriod (EURUSD,H1)    132011222733257293: OnChartEvent start
2019.04.30 14:25:55.437    ChartSetSymbolPeriod (EURUSD,H1)    132011222733257293: ChartRefresh start
2019.04.30 14:25:55.437    ChartSetSymbolPeriod (EURUSD,H1)    132011222733257293: ChartRefresh end
2019.04.30 14:25:55.437    ChartSetSymbolPeriod (EURUSD,H1)    132011222733257293: OnChartEvent end
2019.04.30 14:25:56.666    ChartSetSymbolPeriod (EURUSD,M15)    132011220927585854: OnCalculate prev_calculated=0
2019.04.30 14:25:57.703    ChartSetSymbolPeriod (EURUSD,H1)    132011222733257293: OnCalculate prev_calculated=0

Я нажал на график H1, но график M15 тоже обновился.

Build 2007/2025.


@Slava

Сборка 2033. Это поведение не исправлено.

 

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

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

Alain Verleyen, 2019.04.30 20:42

Все еще используя ChartSetSymbolPeriod (). Я знаю, что это асинхронно, но почему для вызова OnCalculate () требуется 2.5 секунды? Это очень долго.

2019.04.30 14:35:53.349    ChartSetSymbolPeriod (EURUSD,H1)    132011222733257293: OnChartEvent start
2019.04.30 14:35:53.349    ChartSetSymbolPeriod (EURUSD,H1)    132011222733257293: ChartRefresh start
2019.04.30 14:35:53.349    ChartSetSymbolPeriod (EURUSD,H1)    132011222733257293: ChartRefresh end
2019.04.30 14:35:53.349    ChartSetSymbolPeriod (EURUSD,H1)    132011222733257293: OnChartEvent end (ChartSetSymbolPeriod() call).
2019.04.30 14:35:54.809    ChartSetSymbolPeriod (EURUSD,M15)    132011220927585854: OnCalculate prev_calculated=0
2019.04.30 14:35:55.974    ChartSetSymbolPeriod (EURUSD,H1)    132011222733257293: OnCalculate prev_calculated=0

В Market Watch есть только EURUSD, 2 графика открыты и 1 индикатор на каждом графике (этот индикатор ничего не делает, кроме обновления и регистрации). См. Выше сообщение для кода.

Можно ли его улучшить или предоставить нам способ обновить график / индикатор без задержки?

Build 2007/2025.

@Slava

Сборка 2033. Все та же задержка. Кажется, пересчет не является обязательным, но просто ждать нового тика с prev_calculated = 0?

Почему эта задержка?