Более элегантный способ преобразовать эту функцию в массив вместо единственного значения в Amibroker - PullRequest
0 голосов
/ 06 апреля 2019

У меня есть следующая функция, которая возвращает одно значение.

function getVolumeHigh_excludeUpBars(period)
{
    volume_exclude_up = IIf( ROC(CLOSE,1) < 0, Volume, 0);

    SELECTED_BAR = SelectedValue( BarIndex() );
    volume_exclude_up[SELECTED_BAR] = Volume[SELECTED_BAR]; 

    volume_High = hhv(volume_exclude_up, period);
    return volume_High;
}

Я хочу преобразовать вышеуказанную функцию, чтобы она возвращала массив вместо одного значения. Я переписал функцию. Вот оно;

function getArray_VolumeHigh_excludeUpBars(period)
{
    volume_exclude_up = IIf( ROC(CLOSE,1) < 0, Volume, 0);

    for (i=(BAR_COUNT-1);i>=0;i--)
    {
        volume_exclude_up[i] = Volume[i];   
        volume_High[i] = hhv(volume_exclude_up, period);
    }   

    return volume_High;
}

Переписанная функция неэффективна, поскольку она использует цикл for-do для индивидуального присвоения значения массиву. Есть ли более эффективный и элегантный способ переписать функцию?

1 Ответ

1 голос
/ 11 апреля 2019

Для того, что вы пытаетесь достичь, похоже, все должно быть в порядке

volume_exclude_up = IIf( ROC(CLOSE,1) < 0, Volume, 0);
volume_High = hhv(volume_exclude_up, period);

С

volume_exclude_up[SELECTED_BAR] = Volume[SELECTED_BAR]; 

и

volume_exclude_up[i] = Volume[i]; 

выизменяя исходную переменную volume_exclude_up с условного на объемныйум и говорит, все равно.Таким образом, решите, хотите ли вы

volume_high = hhv(volume_exclude_up, period)

или

volume_high = hhv(v, period)
...