По глобализации переменных чтоли...умы...

 

Ребят, может кто сможет подсказать?

У меня в эксперте функция старт начинается с проверки наличия нового бара, запускается функция HowNewBar.

Работает ночью и на работе...так вот утром заметил что некоторые позиции открывались и закрывались не вполне закономерно...видимо инет вылетал...то есть разрыв мог составлять буквально пару секунд...но при включении терминала советник срабатывал как на новый бар.

Как бы мне поправиться так чтоб значения сохранялись после реконнекта? Глобализировать NewTime? С ф-ей init не дружу. Может она как то влияет?

Сама функция выглядит вот так:

bool HowNewBar() //Функция проверяющая текущее время
{static datetime NewTime=0; //Объявляется статистическая переменная NewTime(время открытия последнего бара)
bool NewBar=false; //Переменной NewBar присваивается значение false.Нового бара нет
if(NewTime!=Time[0]) //Сравнение последнего времени открытия бара и времени открытия текущего бара
{ //Если время последнего открытия не равно времени открытия текущего бара то...
NewTime=Time[0]; //Переменной NewTime присваивается значение времени открытия последнего бара
NewBar=true; //Переменная NewBar получает значение true => последний бар новый!
}
return(NewBar);
}

Вызов функции происходит вот так:

if (HowNewBar()==false) //Если бар не новый то...
return; //Выход из функции

Заранее спасиб

 
У нового бара Volume всегда меньше чем предыдущее запомненное значение. Код должен быть примерно такой:
static int VolumePrev; 
...
RefreshRates();  
if(VolumePrev>Volume[0]) // пришел новый бар - обработаем....
{
  ....
}
VolumePrev=Volume[0]; // запомним для последующего сравнения

 
ForexTools писал(а) >>
У нового бара Volume всегда меньше чем предыдущее запомненное значение. Код должен быть примерно такой:

А разница между Volume и Time? А если будет на каком то тике объем 0 в уже 50 минут существующем баре?

 
AYuBelov >>:

А разница между Volume и Time? А если будет на каком то тике объем 0 в уже 50 минут существующем баре?

Бара нет пока нет хотя бы одного тика в нём.

 
ForexTools >>:
У нового бара Volume всегда меньше чем предыдущее запомненное значение. Код должен быть примерно такой:

Теоретически не факт, пусть и верятность этого доли процента.

Кроме того, это не решает проблемы топикстартера. Потому как VolumePrev тоже надо где-то хранить.


AYuBelov >>:

Как бы мне поправиться так чтоб значения сохранялись после реконнекта? Глобализировать NewTime? С ф-ей init не дружу. Может она как то влияет?

Как вариант да. Или хранить состояние в файле.

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

 

проще всего проверить значение переменной Bars

static int tmp;
if(tmp!=Bars)
 {
 //new bar
 }
tmp=Bars;
 
а вообще с init лучше подружиться т.к. после вылета терминала теряются все переменные глобального уровня и необходимо их состояние восстанавливать, лучше всего через файл
 
space_cowboy писал(а) >>
а вообще с init лучше подружиться т.к. после вылета терминала теряются все переменные глобального уровня и необходимо их состояние восстанавливать, лучше всего через файл

Ээээ, спасибо

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