помогите передавать значения (rates[0].high и rates[0].low) текущего бара не каждый тик ,а через определённое время или через определённое кол-во тиков.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Evgeny Raspaev
985
Evgeny Raspaev  

Помогите передавать значения (rates[0].high и rates[0].low) текущего бара  не каждый тик ,а через определённое время или через определённое кол-во тиков.

Уже вторые сутки сижу,  при открытии свечи, в функцию надо передать значения high текущей формирующей свечи, но не каждый тик, а например каждые  60 с  или через каждые 20 пунктов.Если не набралось заданное время то оставлять значения high = предыдущему по времени или значению.

Andrey Khatimlianskii
56024
Andrey Khatimlianskii  
Evgeny Raspaev:

Помогите передавать значения (rates[0].high и rates[0].low) текущего бара  не каждый тик ,а через определённое время или через определённое кол-во тиков.

Уже вторые сутки сижу,  при открытии свечи, в функцию надо передать значения high текущей формирующей свечи, но не каждый тик, а например каждые  60 с  или через каждые 20 пунктов.Если не набралось заданное время то оставлять значения high = предыдущему по времени или значению.

Сформулируйте задачу полностью.

Просто "фильтровать" работу 60-секундным таймером или 20-пунктовым фильтром можно, но не понятно — зачем это делать.

igrok333
2005
igrok333  
Andrey Khatimlianskii:

Сформулируйте задачу полностью.

Просто "фильтровать" работу 60-секундным таймером или 20-пунктовым фильтром можно, но не понятно — зачем это делать.


Как определить начало очередного бара? (Это бывает необходимо, чтобы узнать, что предыдущий бар только что сформировался.) Существует несколько способов.


Первый способ основан на проверке количества баров:

static int prevbars = 0;
...
if(prevbars == Bars) return(0);
prevbars = Bars;
...

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

Следующий способ основан на том, что значение "Volume" формируется на основе количества тиков, пришедших для каждого бара, и первый тик означает, что у вновь формирующегося бара значение "Volume" равно 1:

if( Volume[0] > 1) return(0);
...

Этот способ может не сработать при слишком интенсивном поступлении ценовых тиков. Дело в том, что обработка приходящих ценовых тиков производится в отдельном потоке. И если этот поток занят во время поступления очередного тика, то во избежание излишней загрузки вычислительных ресурсов этот пришедший тик не обрабатывается! В этом случае можно также усложнить проверку, используя сохранение предыдущего значения "Volume".

Третий способ основан на времени открытия бара:

static datetime prevtime=0;
...
if(prevtime == Time[0]) return(0);
prevtime = Time[0];
...

Это - самый надежный способ. Он сработает при любых обстоятельствах.

Evgeny Raspaev
985
Evgeny Raspaev  
Andrey Khatimlianskii:

Сформулируйте задачу полностью.

Просто "фильтровать" работу 60-секундным таймером или 20-пунктовым фильтром можно, но не понятно — зачем это делать.


задача такая есть алгоритм в него подаю текущее значение high(свечи) алгоритм по ней определяет предположительную цену закрытия этой свечи. Все хорошо до той поры пока хай не изменяться. Но если цена выросла еще больше предыдущего значения хая (этой же свечи) начинаеться не разбериха, особенно в тот самый момент пока он растет с каждым тиком изменяя значения хая. Задача отфильтровать это, то есть подавать  в алгоритм не изменения хая на каждом тике а например через 20п пример текущая цена хая 114.456 со временем хай вырос пока рос он проходил через точки 114.457,114.459,114.460,114.463 - это все отправляется в алгоритм и он в этот момент алгоритм говорит не определенный прогноз и открывает сделки то шорт то лонг. Хотелось бы хай подавался "порциями" 114.456 затем к примеру +20п 114.476 (без промежуточных значений)

Как то так...

Maksim Neimerik
30613
Maksim Neimerik  
Evgeny Raspaev:

задача такая есть алгоритм в него подаю текущее значение high(свечи) алгоритм по ней определяет предположительную цену закрытия этой свечи. Все хорошо до той поры пока хай не изменяться. Но если цена выросла еще больше предыдущего значения хая (этой же свечи) начинаеться не разбериха, особенно в тот самый момент пока он растет с каждым тиком изменяя значения хая. Задача отфильтровать это, то есть подавать  в алгоритм не изменения хая на каждом тике а например через 20п пример текущая цена хая 114.456 со временем хай вырос пока рос он проходил через точки 114.457,114.459,114.460,114.463 - это все отправляется в алгоритм и он в этот момент алгоритм говорит не определенный прогноз и открывает сделки то шорт то лонг. Хотелось бы хай подавался "порциями" 114.456 затем к примеру +20п 114.476 (без промежуточных значений)

Как то так...

Если через определенное время то можно использовать OnTimer(), там задаете интервал и вперед...

Andrey Khatimlianskii
56024
Andrey Khatimlianskii  
Evgeny Raspaev:

задача такая есть алгоритм в него подаю текущее значение high(свечи) алгоритм по ней определяет предположительную цену закрытия этой свечи. Все хорошо до той поры пока хай не изменяться. Но если цена выросла еще больше предыдущего значения хая (этой же свечи) начинаеться не разбериха, особенно в тот самый момент пока он растет с каждым тиком изменяя значения хая. Задача отфильтровать это, то есть подавать  в алгоритм не изменения хая на каждом тике а например через 20п пример текущая цена хая 114.456 со временем хай вырос пока рос он проходил через точки 114.457,114.459,114.460,114.463 - это все отправляется в алгоритм и он в этот момент алгоритм говорит не определенный прогноз и открывает сделки то шорт то лонг. Хотелось бы хай подавался "порциями" 114.456 затем к примеру +20п 114.476 (без промежуточных значений)

Как то так...

Сомнительный подход.

Решение будет примерно таким:

static double last_h = 0.0;
static datetime last_t = 0;

if ( Time[0] > last_t )
{
   last_t = Time[0];
   last_h = High[0];
   CallMainTradeAlgo();  // ваш торговый алгоритм
}

if ( High[0] - last_h >= 20*_Point )
{
   last_h = High[0];
   CallMainTradeAlgo();  // ваш торговый алгоритм
}
Alexey Viktorov
25926
Alexey Viktorov  
Evgeny Raspaev:

задача такая есть алгоритм в него подаю текущее значение high(свечи) алгоритм по ней определяет предположительную цену закрытия этой свечи. Все хорошо до той поры пока хай не изменяться. Но если цена выросла еще больше предыдущего значения хая (этой же свечи) начинаеться не разбериха, особенно в тот самый момент пока он растет с каждым тиком изменяя значения хая. Задача отфильтровать это, то есть подавать  в алгоритм не изменения хая на каждом тике а например через 20п пример текущая цена хая 114.456 со временем хай вырос пока рос он проходил через точки 114.457,114.459,114.460,114.463 - это все отправляется в алгоритм и он в этот момент алгоритм говорит не определенный прогноз и открывает сделки то шорт то лонг. Хотелось бы хай подавался "порциями" 114.456 затем к примеру +20п 114.476 (без промежуточных значений)

Как то так...

Достаточно поставить условие

if(high[0] > prevHigh)
 {
  prevHigh = high[0];
  return;
 }
Konstantin Erin
2164
Konstantin Erin  
Evgeny Raspaev:   Уже вторые сутки сижу

Тут уже много лет сижу, язык хорошо знаю - а результат только ожидаю

Arkadii Zagorulko
49398
Arkadii Zagorulko  


Первый способ основан на проверке количества баров:



Плохой способ. Количество баров может быть ограничено в настройках, Из-за этого количество баров всегда одно и тоже, если достигло максимума. 

Советник будет ждать нового бара но никогда его не дождется. 

igrok333
2005
igrok333  
Evgeny Raspaev:

Хотелось бы хай подавался "порциями" 114.456 затем к примеру +20п 114.476 (без промежуточных значений)


if( MathAbs(High[0]-prevHigh) < 0.020 ) return; 
prevHigh = High[0];  
 
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий