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

 
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;
};

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

 
Alexey Viktorov #:

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

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

Не всегда там будет именно пополам заявок, и не всегда там будет полный стакан.

Поэтому делим пополам, а уже оттуда ищем, если вдруг сразу не попали.

 
JRandomTrader #:

Не всегда там будет именно пополам заявок, и не всегда там будет полный стакан.

Поэтому делим пополам, а уже оттуда ищем, если вдруг сразу не попали.

Убедительно. Понял. Спасибо.

 
Denis Kirichenko #:

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

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

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

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

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

Ошибся компилятор, код не должен компилироваться.
Спасибо, исправлено.

 
Файл MetaTrader 5\logs\metaeditor.log в режиме дозаписи, поэтому может занимать сотни мегабайтов с действиями, датируемыми много лет назад.
 

Есть ли ограничение на запись в файл.

Пока не могу разобраться почему запись в файл в функции

void OnTesterDeinit()

ограничивается ровно в файл в 12 кб


В остальных местах пишется нормально. а тут запись прямо прерывается уже в 4-ый раз, или стартуем вручную рестартом терминала снова и бац, файл уже в 22 кб.

 
Здравствуйте! Создаю эксперта, который отправляет сигналы. Поиск торговой ситуации прописан в функции OnTick. Для того, чтобы сигналы не повторялись я использовал следующую проверку:
   datetime Curr_bar = iTime(SymbolName(i,true),periods[x],0);     
   static datetime SignalTime = Curr_bar;   

if(//code search signal && SignalTime != Curr_bar){
Print("Signal buy");
SignalTime = Curr_bar;
}
Сегодня данная проверка перестала работать. Стали появляться сбои(повтор сигналов в огромном количестве) 
Позже у другого программиста подсмотрел код с немного другой проверкой:
   int currBars = iBars(SymbolName(i,true),periods[x]);
   static int prevBars = currBars;
   if (prevBars == currBars) return;
   prevBars = currBars;
Проблема осталась та же. Есть ли возможность какими-то другими способами сделать эту проверку& 
Суть проверки заключается в том, чтобы эксперт один раз проанализировал ситуацию - отправил сигнал в фнукцию Print или Alert и более ее не трогал 
 
Igor168 #:
Здравствуйте! Создаю эксперта, который отправляет сигналы. Поиск торговой ситуации прописан в функции OnTick. Для того, чтобы сигналы не повторялись я использовал следующую проверку:
Сегодня данная проверка перестала работать. Стали появляться сбои(повтор сигналов в огромном количестве) 
Позже у другого программиста подсмотрел код с немного другой проверкой:
Проблема осталась та же. Есть ли возможность какими-то другими способами сделать эту проверку& 
Суть проверки заключается в том, чтобы эксперт один раз проанализировал ситуацию - отправил сигнал в фнукцию Print или Alert и более ее не трогал 
   static datetime nextTime = 0;
   
   if(TimeCurrent() >= nextTime) // новый бар
     {
      int perSec = PeriodSeconds(PERIOD_CURRENT);
      nextTime = TimeCurrent() - TimeCurrent() % perSec + perSec;
     }

Функцию iTime() нужно обязательно проверять, так как она может вернуть ноль.

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