Привел простую структуру. Поэтому нужен вектор определенной длины, чтобы структура оставалась простой - без сложных объектов (подходит для 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() нужно обязательно проверять, так как она может вернуть ноль.
Лучше использовать время последней котировки, оно всегда какое нибудь да есть.
Не понял, нужен вектор или массив векторов.
Привел простую структуру. Поэтому нужен вектор определенной длины, чтобы структура оставалась простой - без сложных объектов (подходит для 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() нужно обязательно проверять, так как она может вернуть ноль.
Лучше использовать время последней котировки, оно всегда какое нибудь да есть.