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

 
Slava:

Вы сказали, что доступ идёт к своему символу. В качестве периода выступает 0. То есть, доступ к своему символу-периоду. Как же Вы в этом случае 4401-то получили?

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

А про 4401 на своём символе-периоде я не верю

PS https://youtu.be/GJS73dgL-QE

Может, я что то не понимаю?

Не так делаю? Откуда сомнения?

А может дело в том, что символ неверно определяется периодически (проверю и это)?

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

Вообще же, периодически стали наблюдаться мерцания чартов. Может это быть связано с дозагрузкой\синхронизацией тиков?
 
Aleksey Vyazmikin:

Вообще же, периодически стали наблюдаться мерцания чартов. Может это быть связано с дозагрузкой\синхронизацией тиков?

Особенно если DRAW_SECTION - вообще беда - частенько пропадают эти линии. Мышкой график подвинуть - появляются снова.

После обновления до 2025 терминал виснет после нескольких (3..5) последовательных смен входных параметров индикаторов. Я сначала на свой код грешил, но потом несколько раз с индикаторами из папки Examples такое было.



Тестер в визуальном режиме линии ордеров в пустоту ведёт. Опять же, часть верно, часть в никуда.


 
Igor Zakharov:

Особенно если DRAW_SECTION - вообще беда - частенько пропадают эти линии. Мышкой график подвинуть - появляются снова.

После обновления до 2025 терминал виснет после нескольких (3..5) последовательных смен входных параметров индикаторов. Я сначала на свой код грешил, но потом несколько раз с индикаторами из папки Examples такое было.



Тестер в визуальном режиме линии ордеров в пустоту ведёт. Опять же, часть верно, часть в никуда.

Про визуализацию в тестере - у меня напротив, часто нет этой линии, хотя есть стрелочки.

Правда билд у меня 2007.
 
Почему в выходные дни (сегодня биржа не работает) происходит срабатывание индикаторов? А в результате ошибка, что я писал ранее 4401.
 
Краш
Access violation at 0x00000001407951B4 read to 0xFFFFFFFFFFFFFFFF
   crash -->  00000001407951B4 486370FC          movsxd     rsi, dword [rax-0x4]
              00000001407951B8 85F6              test       esi, esi
              00000001407951BA 750B              jnz        0x1407951c7

              00000001407951BC 48837A0400        cmp        qword [rdx+0x4], 0x0
              00000001407951C1 0F8587000000      jnz        dword 0x14079524e

              00000001407951C7 488B4204          mov        rax, [rdx+0x4]
              00000001407951CB 48896C2440        mov        [rsp+0x40], rbp

00: 0x00000001407951B4
01: 0x0000000006E50231
02: 0x00000000197DEBE4


Воспроизведение

string f( const string Str1, const string Str2 = "" )
{
  return(Str1 + Str2);
}

void OnStart()
{
  int i = 0;
  
  f(i);
}
 
Slava:

Вы сказали, что доступ идёт к своему символу. В качестве периода выступает 0. То есть, доступ к своему символу-периоду. Как же Вы в этом случае 4401-то получили?

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

А про 4401 на своём символе-периоде я не верю

PS https://youtu.be/GJS73dgL-QE

Сейчас, когда биржа открыта, индикатор почему то дергается и ловится ошибка 4401

Вот урезанный код - возможно можно убрать и больше для воспроизведения, но я оставил подобие структуры, что и в основном индикаторе

#property indicator_chart_window
#property indicator_buffers   1
#property indicator_plots     1
#property indicator_type1     DRAW_LINE
#property indicator_color1    clrGold
#property indicator_label1    "top"   


input int Nbar=2000;//Количество баров для отображения индикатора.
input int shift=5;//Прогноз, баров

//--- indicator buffers
double sqh_buffer[];


double Coef;

//+------------------degre------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,sqh_buffer,INDICATOR_DATA);
        
   
//--- setting values of the indicator that won't be visible on a chart
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---
   PlotIndexSetInteger(0,PLOT_SHIFT,shift);
//---
   ArraySetAsSeries(sqh_buffer,true);   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+     
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|  OnCalculate 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[])
  {

   ArraySetAsSeries(time,true);

   int limit;
   if(prev_calculated==0 || prev_calculated<0 || prev_calculated>rates_total)
      limit=Nbar;
   else
      limit=rates_total-prev_calculated;

   for(int i=limit;i>=0;i--)
     {
         Coef=SKO(_Symbol);
     }

   return(rates_total);
  }
//------------------------------------------------------------------------------------------------
double SKO(string symb)
  {

   datetime Arr[],time1;
   if(CopyTime(symb,0,0,1,Arr)<=0)
   {
   Print("_Symbol=",symb);
   PrintFormat("Failed to CopyTime, error code %d",GetLastError());
   return(0);
   }
  
   time1=Arr[0];
   return(0);
  }

Добавлю лог

2019.05.02 03:15:23.889 Test_CopyTime (Si-6.19,M1)      _Symbol=Si-6.19
2019.05.02 03:15:23.889 Test_CopyTime (Si-6.19,M1)      Failed to CopyTime, error code 4401
 
fxsaber:
Краш


Воспроизведение

ошибка говорит о нарушении прав доступа и вероятно связана с константностью первого входного параметра в функции

str1 объединяется с str2 и затем производится возврат из функции результата, видимо в string перегрузка по , именно так и реализована, измени первый параметр в сигнатуре функции на не константный, если ошибка исчезнет, значит моя догадка верна и тогда выход через использование функции конкатенации строк или костылить результат в отдельный не константный string ))

 
Konstantin:

ошибка говорит о нарушении прав доступа и вероятно связана с константностью первого входного параметра в функции

str1 объединяется с str2 и затем производится возврат из функции результата, видимо в string перегрузка по , именно так и реализована, измени первый параметр в сигнатуре функции на не константный, если ошибка исчезнет, значит моя догадка верна

Ошибка исчезла, но Вашего объяснения не понял.

и тогда выход через использование функции конкатенации строк или костылить результат в отдельный не константный string ))

Мягко говоря, не понимаю использующих эту функцию.

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

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

fxsaber, 2019.05.02 01:22

По исходнику хорошо видно, во что выливается использование авторами StringConcatenate в своих кодах. Это просто глупо!

 
Aleksey Vyazmikin:

Сейчас, когда биржа открыта, индикатор почему то дергается и ловится ошибка 4401

Вот урезанный код - возможно можно убрать и больше для воспроизведения, но я оставил подобие структуры, что и в основном индикаторе

Добавлю лог

Спасибо. Разберёмся
 

Я только что проверил: если я нажимаю F1 в терминале (b 2015), ничего не происходит, даже когда я нажимаю на Help => Help: ничего не происходит?

I just tested it: if I press F1 in the terminal (b 2015) nothing happens, even when I click on Help => Help: nothing happens?

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