Привел простую структуру. Поэтому нужен вектор определенной длины, чтобы структура оставалась простой - без сложных объектов (подходит для union и т.д.).
Похоже, что никак не сделать.
struct DATA_VECTOR
{
vector<double> Vector;
};
union UNION
{
DATA_VECTOR d1; // 'DATA_VECTOR' has objects and cannot be used as union memberdouble d2;
};
fxsaber #: struct DATA_VECTOR { vector<double> Vector; }; union UNION { DATA_VECTOR d1; // 'DATA_VECTOR' has objects and cannot be used as union memberdouble d2; };
Вот любите Вы всё усложнять, коллега ))
Я пошёл немного другим путём:
//+------------------------------------------------------------------+//| UNION |//+------------------------------------------------------------------+union UNION
{
vector vc;
double double_value;
//void UNION()
{
vc.Resize(1);
}
};
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
UNION un_obj;
un_obj.double_value = 3.14;
::Print(un_obj.vc);
}
//+------------------------------------------------------------------+
Компилятор такое пропустил. Но в run-time получилось так:
Компилятор такое пропустил. Но в run-time получилось так:
И в итоге ошибки посыпались в журнале:
Честно, не знаю, ошибся компилятор или run-time.
Компилятор не должен был пропустить.
union UNION
{
vector<double> vc; // OKdouble double_value;
};
union UNION2
{
string Str; // string cannot be used as union memberdouble double_value;
};
Видимо, разработчикам нужно проверять и другие типы на эту уязвимость.
Максимальное количество показываемых заявок в стакане. По моим наблюдениям и как правило это чётное количество. Следовательно SYMBOL_TICKS_BOOKDEPTH/2 это заявки BUY и SYMBOL_TICKS_BOOKDEPTH/2-1 будут заявки SELL. Те самые которые вы назвали ценами Bid и Ask
Не всегда там будет именно пополам заявок, и не всегда там будет полный стакан.
Поэтому делим пополам, а уже оттуда ищем, если вдруг сразу не попали.
Пока не могу разобраться почему запись в файл в функции
void OnTesterDeinit()
ограничивается ровно в файл в 12 кб
В остальных местах пишется нормально. а тут запись прямо прерывается уже в 4-ый раз, или стартуем вручную рестартом терминала снова и бац, файл уже в 22 кб.
Здравствуйте! Создаю эксперта, который отправляет сигналы. Поиск торговой ситуации прописан в функции OnTick. Для того, чтобы сигналы не повторялись я использовал следующую проверку:
Сегодня данная проверка перестала работать. Стали появляться сбои(повтор сигналов в огромном количестве) Позже у другого программиста подсмотрел код с немного другой проверкой:
int currBars = iBars(SymbolName(i,true),periods[x]);
staticint prevBars = currBars;
if (prevBars == currBars) return;
prevBars = currBars;
Проблема осталась та же. Есть ли возможность какими-то другими способами сделать эту проверку& Суть проверки заключается в том, чтобы эксперт один раз проанализировал ситуацию - отправил сигнал в фнукцию Print или Alert и более ее не трогал
Igor168 #: Здравствуйте! Создаю эксперта, который отправляет сигналы. Поиск торговой ситуации прописан в функции OnTick. Для того, чтобы сигналы не повторялись я использовал следующую проверку: Сегодня данная проверка перестала работать. Стали появляться сбои(повтор сигналов в огромном количестве) Позже у другого программиста подсмотрел код с немного другой проверкой: Проблема осталась та же. Есть ли возможность какими-то другими способами сделать эту проверку& Суть проверки заключается в том, чтобы эксперт один раз проанализировал ситуацию - отправил сигнал в фнукцию Print или Alert и более ее не трогал
staticdatetime nextTime = 0;
if(TimeCurrent() >= nextTime) // новый бар
{
int perSec = PeriodSeconds(PERIOD_CURRENT);
nextTime = TimeCurrent() - TimeCurrent() % perSec + perSec;
}
Функцию iTime() нужно обязательно проверять, так как она может вернуть ноль.
Лучше использовать время последней котировки, оно всегда какое нибудь да есть.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Не понял, нужен вектор или массив векторов.
Привел простую структуру. Поэтому нужен вектор определенной длины, чтобы структура оставалась простой - без сложных объектов (подходит для 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; };
Вот любите Вы всё усложнять, коллега ))
Я пошёл немного другим путём:
Компилятор такое пропустил. Но в run-time получилось так:
И в итоге ошибки посыпались в журнале:
Честно, не знаю, ошибся компилятор или run-time.
Вот любите Вы всё усложнять, коллега ))
Отлично, нашли уязвимость.
Компилятор такое пропустил. Но в run-time получилось так:
И в итоге ошибки посыпались в журнале:
Честно, не знаю, ошибся компилятор или run-time.
Компилятор не должен был пропустить.
Видимо, разработчикам нужно проверять и другие типы на эту уязвимость.
Всё гораздо проще.
Максимальное количество показываемых заявок в стакане. По моим наблюдениям и как правило это чётное количество. Следовательно SYMBOL_TICKS_BOOKDEPTH/2 это заявки BUY и SYMBOL_TICKS_BOOKDEPTH/2-1 будут заявки SELL. Те самые которые вы назвали ценами Bid и Ask
Не всегда там будет именно пополам заявок, и не всегда там будет полный стакан.
Поэтому делим пополам, а уже оттуда ищем, если вдруг сразу не попали.
Не всегда там будет именно пополам заявок, и не всегда там будет полный стакан.
Поэтому делим пополам, а уже оттуда ищем, если вдруг сразу не попали.
Убедительно. Понял. Спасибо.
Вот любите Вы всё усложнять, коллега ))
Я пошёл немного другим путём:
Компилятор такое пропустил. Но в run-time получилось так:
И в итоге ошибки посыпались в журнале:
Честно, не знаю, ошибся компилятор или run-time.
Ошибся компилятор, код не должен компилироваться.
Спасибо, исправлено.
Есть ли ограничение на запись в файл.
Пока не могу разобраться почему запись в файл в функции
void OnTesterDeinit()
ограничивается ровно в файл в 12 кб
В остальных местах пишется нормально. а тут запись прямо прерывается уже в 4-ый раз, или стартуем вручную рестартом терминала снова и бац, файл уже в 22 кб.
Сегодня данная проверка перестала работать. Стали появляться сбои(повтор сигналов в огромном количестве)
Позже у другого программиста подсмотрел код с немного другой проверкой:
Проблема осталась та же. Есть ли возможность какими-то другими способами сделать эту проверку&
Суть проверки заключается в том, чтобы эксперт один раз проанализировал ситуацию - отправил сигнал в фнукцию Print или Alert и более ее не трогал
Здравствуйте! Создаю эксперта, который отправляет сигналы. Поиск торговой ситуации прописан в функции OnTick. Для того, чтобы сигналы не повторялись я использовал следующую проверку:
Сегодня данная проверка перестала работать. Стали появляться сбои(повтор сигналов в огромном количестве)
Позже у другого программиста подсмотрел код с немного другой проверкой:
Проблема осталась та же. Есть ли возможность какими-то другими способами сделать эту проверку&
Суть проверки заключается в том, чтобы эксперт один раз проанализировал ситуацию - отправил сигнал в фнукцию Print или Alert и более ее не трогал
Функцию iTime() нужно обязательно проверять, так как она может вернуть ноль.
Лучше использовать время последней котировки, оно всегда какое нибудь да есть.