Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Julia Sharipova
1184
Julia Sharipova  

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

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

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

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

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

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

скажем типичный спред для пары  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, торговля разрешена

 

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

Dmitry Fedoseev
45338
Dmitry Fedoseev  

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

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

static datetime lasttime=0;

static bool CanTrade=false; 

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

   lasttime=TimeCurrent(); 

   CanTrade=false; 

}

else{

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

                CanTrade=true;

        }

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

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

Alexey Viktorov
11327
Alexey Viktorov  

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

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

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


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

Julia Sharipova
1184
Julia Sharipova  
AlexeyVik:

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

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

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


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

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

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

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

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

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