Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Много подписчиков на сигнале? Задумайся о платной подписке!
Julia Sharipova
1131
Julia Sharipova 2015.02.19 17:16 

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

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

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

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

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

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

скажем типичный спред для пары  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
41262
Dmitry Fedoseev 2015.02.19 18:33  

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

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

static datetime lasttime=0;

static bool CanTrade=false; 

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

   lasttime=TimeCurrent(); 

   CanTrade=false; 

}

else{

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

                CanTrade=true;

        }

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

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

Alexey Viktorov
5197
Alexey Viktorov 2015.02.19 18:42  

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

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

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


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

Julia Sharipova
1131
Julia Sharipova 2015.02.19 19:03  
AlexeyVik:

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

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

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


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

:)
Алексей Тарабанов
7220
Алексей Тарабанов 2015.02.19 19:52  
ex_kalibur:

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

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

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

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