Функция, возвращающая текущий TimeFrame - страница 2

 

Во извращенцы-то.

В принципе функция hrenfx по замыслу вполне логична - если бы не было штатной. Если выбрать Depth достаточно большой, то вероятность косяка действительно крайне мала: рано или поздно найдутся два бара без пропусков между ними, даже на М1 и на крайне неликвидном инструменте.

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

 
Mathemat:

Во извращенцы-то.

В принципе функция hrenfx по замыслу вполне логична - если бы не было штатной. Если выбрать Depth достаточно большой, то вероятность косяка действительно крайне мала: рано или поздно найдутся два бара без пропусков между ними, даже на М1 и на крайне неликвидном инструменте.

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

ИМХО - не совсем логична:

1. Определяет только штатные периоды.

2. Основное : Не возвращает ошибку. Возможна ситуация, когда период не определяется на заданном интервале, но все-равно функция возвращает результат.

Я б написал так :

#define INITMX 100000000000000
int GetPeriod( int bCnt=30, bool InMin = true )
{
int strtBarN=0;
    while(strtBarN<Bars)
    {
        datetime Res=INITMX, sRes = 0;
        int J=0,i=strtBarN,k=strtBarN+1;
        for (; J < bCnt; J++)
        {
            datetime dT = Time[i] - Time[k];
            if (Res>dT) Res = dT;
            sRes+=dT;
            i++;
            k++;
        }
        int sP = sRes/bCnt;
        if(Res==sP)
        {
            if(InMin) 
                return (Res/60);
            else 
                return(Res);
        }
        strtBarN++;
    }//while((strtBarN<<Bars)&&(Res!=sRes))
    return(-1);// Error !
}


Удачи.

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