Как написать функцию расчета среднего спреда, за единицу времени, использую массивы

 

Привет форумчане, помогите написать функцию расчета среднего спреда, за единицу времени, используя массивы (ранее я не когда не пользовался ими, в большей степени данная функция нужна в ознакомительных целях)

задача такая, вычислить средний спред за последние 10 минут,

думаю использовать массивы, в которые записывать спред на каждом тике, далее находить среднее значение этого массива, далее найти среднее значение всех объявленных массивов  

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

 
А не проще определить минимальный и максимальный за период и вычислить среднее арифметическое? Я думаю расхождение если и будет, то такое незначительное, что и обращать внимание не стоит.
 

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

скажем типичный спред для пары  30 пипсов, в ночное время иногда спред раздвигается до 40-60 пипсов, но бывает и сужается, , мне нужно поставить ограничение на торговлю роботу, такое, что б средний спред считался за 10 минут, к примеру.

если использовать мин макс и делить пополам, то получиться вот что, к примеру спред это каждый тик в течении минуты: 45,45,46,46,48,45,0,11,98,45,47 

мин = 0 

макс = 98, средний спред, по вашему предложению 49 (0+98/2=49)

а мне нужно так : 45+45+46+46+48+45+0+11+98+45+47/11= 43,27 

то есть уже отличие, а если мониторить 10 -15 минут то данные будут весьма не объективны (я так предполагаю :)  , хотя ....) 

и если создать условие, что типичный спред за последниее 10 минут <= 44, торговля разрешена

 

вот что то в этом роде нужно

 

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

Проще и разумней так:

static datetime lasttime=0;

static bool CanTrade=false; 

if(спред>допустимыйСпред){

   lasttime=TimeCurrent(); 

   CanTrade=false; 

}

else{

        if(TimeCurrent()>lasttime+Пауза) {

                CanTrade=true;

        }

} 
Смысл в том, что если спред зашкалил, торговля запрещена, а когда вернулся в норму еще выжидаем некоторое время, прежде чем торговля будет разрешена.
 

Точно!!!! огромное спасибо, главное упрощает работу эксперта, поставим паузу 5-8 минут, и если будет продолжать шкалить, значит не врем для торгов :)

 

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

А в общем это пустая затея. Если увеличение произошло в последние секунды контрольного времени, соответственно средний спред будет не выше допустимого, а потом в течении всех 5ти минут будет выше и только по истечении этого времени будет произведён перерасчёт.

Так-что не мудрствуя лучше поставить запрет на время при увеличении текущего спреда, а не среднего. А потом по истечении этого времени опять проконтролировать и принять решение. ИМХО.


ps: ой как долго я писал...

 
AlexeyVik:

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

А в общем это пустая затея. Если увеличение произошло в последние секунды контрольного времени, соответственно средний спред будет не выше допустимого, а потом в течении всех 5ти минут будет выше и только по истечении этого времени будет произведён перерасчёт.

Так-что не мудрствуя лучше поставить запрет на время при увеличении текущего спреда, а не среднего. А потом по истечении этого времени опять проконтролировать и принять решение. ИМХО.


ps: ой как долго я писал...

:)
 
ex_kalibur:

...задача такая, вычислить средний спред за последние 10 минут...

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

Производная любого скользящего среднего равна (X0-Xn) /n, поэтому в init считаете начальное значение, а в start добавляете к нему значение производной и получаете новое значение скользящего среднего на каждом тике. 

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