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

 

Ошибки при отправке уведомлений из терминала MT5 и МТ4. 

В журнале MT5:

2024.10.04 15:46:00.232 Notifications send request failed (raw - read failed, 0 error, 1 bytes needed)

В журнале MT4:

2024.10.04 15:53:42.219 Notifications: 'Test message from  ......  not sent to .......

2024.10.04 15:53:42.219 Notifications: failed send request [0] notify.mql5.net:443 failed


 
Alexey Viktorov #:

Зачем вы второй раз указываете на то, что в тестере не работает???

OnChartEvent  в тестере работать не может в принципе. И ЧТО???

1. Потому, что стартовый вопрос был связан с тестером.

2.  OnChartEvent работает в тестере, но с ограничениями.

 
Как у такой структуры заменить массив на вектор?
struct DATA
{
  double Array[3]; // Здесь нужен вектор.
};
 

Господа, я вчера обновил МТ5 до 4585 и если раньше было UTC 0, то теперь один показывает UTC 0, другой - UTC +3, 3й - UTC +2 

и как мне теперь всё это безобразие вернуть к UTC 0??? Дайте функцию выбора времени в терминале; 

 
JRandomTrader #:

Поддерживаю.

Кусок кода для поиска bid и ask в стакане:

Всё гораздо проще.

SymbolInfoInteger(_Symbol, SYMBOL_TICKS_BOOKDEPTH);

Максимальное количество показываемых заявок в стакане. По моим наблюдениям и как правило это чётное количество. Следовательно SYMBOL_TICKS_BOOKDEPTH/2 это заявки BUY и SYMBOL_TICKS_BOOKDEPTH/2-1 будут заявки SELL. Те самые которые вы назвали ценами Bid и Ask

Но у меня есть другая проблема.

Подписка на стакан проходит без ошибок, а в OnBookEvent() проходят не все символы. Почему не проходят, как определить причину?

 
fxsaber #:
Как у такой структуры заменить массив на вектор?

Не понял, нужен вектор или массив векторов. Но имхо, оба варианта сделать несложно:

#define _PRINT(d) (::Print(#d," = ",d))
//+------------------------------------------------------------------+
//| Structure                                                        |
//+------------------------------------------------------------------+
struct DATA1
  {
   //double Array[3]; // Здесь нужен вектор.
   vector            Vc;
  };
//+------------------------------------------------------------------+
//| Structure                                                        |
//+------------------------------------------------------------------+
struct DATA2
  {
   // Сделаем массив векторов.
   vector            Vc[3];
  };
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   /*
     1)
     struct DATA1
       {
        vector Vc;
       };
   */
   DATA1 data1;
   data1.Vc = vector::Full(3, 1.11);
   _PRINT(data1.Vc);
   /*
      2)
      struct DATA2
        {
         vector Vc[3];
        };
   */
   DATA2 data2;
   for(int v_idx = 0; v_idx < 3; v_idx++)
      data2.Vc[v_idx] = vector::Full(3, (v_idx + 1) * 1.33);
   _PRINT( data2.Vc[0]);
   _PRINT( data2.Vc[1]);
   _PRINT( data2.Vc[2]);
  }
//+------------------------------------------------------------------+

Тогда в журнале:

2024.10.07 17:06:33.465 b1 (AFLT,H1)    data1.Vc = [1.11,1.11,1.11]
2024.10.07 17:06:33.465 b1 (AFLT,H1)    data2.Vc[0] = [1.33,1.33,1.33]
2024.10.07 17:06:33.465 b1 (AFLT,H1)    data2.Vc[1] = [2.66,2.66,2.66]
2024.10.07 17:06:33.465 b1 (AFLT,H1)    data2.Vc[2] = [3.99,3.99,3.99]
 
Периодично после выходных мт4 не соединяется с сервером. После перезагрузки мт4 соединяется. И вот если не просыпаться в начале дня, а например в 6 утра, то цены могут уйти уже далеко, а советник не закрыл вовремя так как не было связи с сервером. В итоге потери из за кого, Метаквотовцев? Как решить данную проблему?
 
Denis Kirichenko #:

Не понял, нужен вектор или массив векторов.

Привел простую структуру. Поэтому нужен вектор определенной длины, чтобы структура оставалась простой - без сложных объектов (подходит для union и т.д.).

Похоже, что никак не сделать.

struct DATA_VECTOR
{
  vector<double> Vector;
};

union UNION
{
  DATA_VECTOR d1; // 'DATA_VECTOR' has objects and cannot be used as union member
  double d2;
};
 
fxsaber #:
struct DATA_VECTOR {   vector<double> Vector; }; union UNION {   DATA_VECTOR d1; // 'DATA_VECTOR' has objects and cannot be used as union member   double d2; };

Вот любите Вы всё усложнять, коллега ))

Я пошёл немного другим путём:

//+------------------------------------------------------------------+
//| UNION                                                            |
//+------------------------------------------------------------------+
union UNION
  {
   vector vc;
   double double_value;
//
   void UNION()
     {
      vc.Resize(1);
     }
  };
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   UNION un_obj;
   un_obj.double_value = 3.14;
   ::Print(un_obj.vc);
  }
//+------------------------------------------------------------------+


Компилятор такое пропустил. Но в run-time получилось так:


И в итоге ошибки посыпались в журнале:

NJ      2       19:28:36.084    b4 (EURUSD,H1)  Access violation at 0x00007FF695B8AEE6 read to 0xFFFFFFFFFFFFFFFF
CK      2       19:28:36.084    b4 (EURUSD,H1)     crash -->  00007FF695B8AEE6 F2410F105CFD00    movsd      xmm3, qword ptr [r13+rdi*8]
IG      2       19:28:36.084    b4 (EURUSD,H1)                00007FF695B8AEED 4C8D05F48B7501    lea        r8, [0x00007FF6972E3AE8]
QM      2       19:28:36.084    b4 (EURUSD,H1)                00007FF695B8AEF4 EB0F              jmp        0x00007FF695B8AF05
IN      2       19:28:36.084    b4 (EURUSD,H1)  
EI      2       19:28:36.084    b4 (EURUSD,H1)                00007FF695B8AEF6 F3410F101E        movss      xmm3, dword ptr [r14]
NH      2       19:28:36.084    b4 (EURUSD,H1)                00007FF695B8AEFB 4C8D0566077B01    lea        r8, [0x00007FF69733B668]
GO      2       19:28:36.084    b4 (EURUSD,H1)                00007FF695B8AF02 0F5ADB            cvtps2pd   xmm3, xmm3
JM      2       19:28:36.084    b4 (EURUSD,H1)                00007FF695B8AF05 8BD6              mov        edx, esi
CR      2       19:28:36.084    b4 (EURUSD,H1)                00007FF695B8AF07 66490F7ED9        movq       r9, xmm3
EI      2       19:28:36.084    b4 (EURUSD,H1)                00007FF695B8AF0C 2BD3              sub        edx, ebx
PD      2       19:28:36.084    b4 (EURUSD,H1)                00007FF695B8AF0E E88D5AE4FF        call       0x00007FF6959D09A0
QK      2       19:28:36.084    b4 (EURUSD,H1)                00007FF695B8AF13 85C0              test       eax, eax
LR      2       19:28:36.084    b4 (EURUSD,H1)                00007FF695B8AF15 7E22              jle        0x00007FF695B8AF39
KO      2       19:28:36.084    b4 (EURUSD,H1)  
MJ      2       19:28:36.084    b4 (EURUSD,H1)                00007FF695B8AF17 BA3F000000        mov        edx, 0x3F
HM      2       19:28:36.084    b4 (EURUSD,H1)                00007FF695B8AF1C 03D8              add        ebx, eax
FM      2       19:28:36.084    b4 (EURUSD,H1)                00007FF695B8AF1E 48FFC7            inc        rdi
JK      2       19:28:36.084    b4 (EURUSD,H1)                00007FF695B8AF21 4883C510          add        rbp, 0x10
CH      2       19:28:36.084    b4 (EURUSD,H1)  
ON      2       19:28:36.084    b4 (EURUSD,H1)  00: 0x00007FF695B8AEE6
GQ      2       19:28:36.084    b4 (EURUSD,H1)  01: 0x00007FF696D783A8
PH      2       19:28:36.084    b4 (EURUSD,H1)  02: 0x00007FF696D642D9
HL      2       19:28:36.084    b4 (EURUSD,H1)  03: 0x00007FF696D61904
RJ      2       19:28:36.084    b4 (EURUSD,H1)  04: 0x00007FF696D62ABB
IR      2       19:28:36.084    b4 (EURUSD,H1)  05: 0x0000025ADF030336
PD      2       19:28:36.084    b4 (EURUSD,H1)  06: 0x00007FF69BD08DA8
OQ      2       19:28:36.084    b4 (EURUSD,H1)  


Честно, не знаю, ошибся компилятор или run-time.

 
Denis Kirichenko #:

Вот любите Вы всё усложнять, коллега ))

Отлично, нашли уязвимость.

Компилятор такое пропустил. Но в run-time получилось так:

И в итоге ошибки посыпались в журнале:

Честно, не знаю, ошибся компилятор или run-time.

Компилятор не должен был пропустить.

union UNION
{
  vector<double> vc; // OK
  double double_value;
};

union UNION2
{
  string Str; // string cannot be used as union member
  double double_value;
};

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