我有以下返回单个值的函数。
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循环将值分别分配给数组。有没有更有效,更优雅的方法来重写该函数?
答案 0 :(得分: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)