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

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

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 для индивидуального присвоения значения массиву. Есть ли более эффективный и элегантный способ переписать функцию?


person user1315789    schedule 06.04.2019    source источник


Ответы (1)


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

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_exclude_up равнялся объему все время, либо равнялся условно, ваш код сначала говорит, что равняется условно, а затем меняет свое мнение и говорит, что равен все время. Таким образом, решите, хотите ли вы

volume_high = hhv(volume_exclude_up, period)

or

volume_high = hhv(v, period)
person Sethmo011    schedule 11.04.2019