0

我有以下返回单个值的函数。

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 循环将值单独分配到数组中。是否有更高效、更优雅的方式来重写函数?

4

1 回答 1

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)

或者

volume_high = hhv(v, period)
于 2019-04-11T10:43:25.913 回答