Как поймать время изменяемой переменной.

 

Прошу помощи знатоков.

Суть вопроса следующая.

Имеем переменную

long Index =-1;

В зависимости от условий работы алгоритма программы, данной переменной при событиях в стакане, присваивается целочисленное значение от 0 до 20

Как поймать время изменения значений в данной переменной ???

К примеру, присвоилось значение

Index = 5;

Это произошло  08.04.2020  14:45:15

в переменную

datetime timeIndex;

мы приняли это время


Index = 10;

Это произошло  08.04.2020  14:45:16

старое время сбросилось, новое записалось.


Есть красавчики кто малюсеньким кусочком кода покажет как это сделать. 
 
Записывать в переменную не прямо, а через функцию. В функции проверять, если значение меняется, то еще одной переменной присваивать время изменения.
 
Ещё вариант писать в GV, GlobalVariableTime возвращает время последнего доступа к переменной.
 
Alexey Viktorov:
Ещё вариант писать в GV, GlobalVariableTime возвращает время последнего доступа к переменной.

В том числе время чтения, так что бессмысленно в данном случае

 
Edgar Akhmadeev:

В том числе время чтения, так что бессмысленно в данном случае

Время чтения, но не чтение времени функцией GlobalVariableTime. Так-что если понимаешь что делаешь, очень даже подходит.

 
Konstantin Seredkin:

Прошу помощи знатоков.

Суть вопроса следующая.

Имеем переменную

В зависимости от условий работы алгоритма программы, данной переменной при событиях в стакане, присваивается целочисленное значение от 0 до 20

Как поймать время изменения значений в данной переменной ???

К примеру, присвоилось значение

Index = 5;

Это произошло  08.04.2020  14:45:15

в переменную

мы приняли это время


Index = 10;

Это произошло  08.04.2020  14:45:16

старое время сбросилось, новое записалось.


Есть красавчики кто малюсеньким кусочком кода покажет как это сделать. 

Мы, это кто? 

 
Dmitry Fedoseev:
Записывать в переменную не прямо, а через функцию. В функции проверять, если значение меняется, то еще одной переменной присваивать время изменения.

Я это понимаю, не могу сообразить как это правильно сделать

Алексей Тарабанов:

Мы, это кто? 

Образная аббревиатура 
 

Вот:

long Index =-1;
datetime timeIndex=0;

void set(long val){
        if(val!=Index){
                Index=val;
                timeIndex=TimeCurrent();
        }
}
 

/// просто демонстрация идеи - перегружаем метод "=" и внутри него разбираемся что и когда меняется. 

/// (писано с руки), код невалидный :-) 

long operator=(long &varRef,long newValue) {

   if (&varRef == &Index && newValue!=Index) {

//  ссылка действительно ссылается на Index и заданно новое значение

        OnIndexUpdate(varRef,newValue); // по хорошему надо вызвать обработчик такого важного события

        IndexUpdateTime=TimeLocal();      // запомнить время. (было-бы неплохо, время с высокой точностью, до микро/нано-секунд)

   }

   return varRef=newValue

}

а по доброму - пишется Сеттер, который принесёт требуемый мячик


 
Dmitry Fedoseev:

Вот:

Спасибо, ток вот так работает

long Index =-1;
datetime timeIndex=0;

datetime set_(long val){
        if(val!=Index){
                Index=val;
                timeIndex=TimeCurrent();
        }
    return timeIndex; 
}
 

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

Простая торговля, тыкается под каждую объемную заявку - 2 стопа



Фильтруемся задержкой в 3 секунды с помощью кода что выше постом. 1 стоп, входы более адекватные



Задержка в 5 секунд, видим конкретные входы системы



Димону и Максу, огромный респект за то что натыкали носом в саную тряпку и указали правильный путь и оградили от пути в котором пришлось бы испытать не очень хорошие эмоции...

Останусь пока возле камня, соблюдая самоизоляцию ))


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