下面的代码将计算事件发生时某些条形图中的高-低范围,并计算高-低范围的平均值。
event_up = get_event_up();
event_down = get_event_low();
num_events_in_range = get_num_events_in_range();
sum_pct_updown_dist = 0;
for (i=1;i<num_events_in_range; i++) //for cannot accept array type
{
event_up_high_i = ValueWhen(event_up, High, i);
event_down_low_i = ValueWhen(event_down, Low, i);
pct_updown_dist_i = (event_up_high_i-event_down_low_i)/event_up_high_i*100;
sum_pct_updown_dist = sum_pct_updown_dist + pct_updown_dist_i;
}
avg_pct_updown_dist = sum_pct_updown_dist/num_events_in_range;由于(i=1;i<num_events_in_range; i++)的这一行代码违反了Amibroker语法,所以代码在Amibroker中无法工作。For循环不接受数组类型。num_events_in_range是一个数组。
如何修改此代码以解决此问题?
发布于 2020-02-20 15:39:35
for循环的语法是
for ( init-expression ; cond-expression ; loop-expression )在您的代码中,i < num_events_in_range是一个无效的条件,因为i是一个整数,num_events_in_range是一个数组。
代替num_events_in_range,使用num_events_in_range的长度
发布于 2020-02-21 21:03:45
尝尝这个
event_up = get_event_up();
event_down = get_event_low();
num_events_in_range = get_num_events_in_range();
sum_pct_updown_dist = 0;
for (var i=1;i<num_events_in_range.length; i++) //for cannot accept array type
{
event_up_high_i = ValueWhen(event_up, High, i);
event_down_low_i = ValueWhen(event_down, Low, i);
pct_updown_dist_i = (event_up_high_i-event_down_low_i)/event_up_high_i*100;
sum_pct_updown_dist = sum_pct_updown_dist + pct_updown_dist_i;
}
avg_pct_updown_dist = sum_pct_updown_dist/num_events_in_range;您需要更新计算平均值的最后一行。
avg_pct_updown_dist = sum_pct_updown_dist/num_events_in_range;在这里,num_events_in_range会产生错误。根据for循环的语法,您需要一个表达式,它可以是真的,也可以是假的。正如@Shylajhaa所解释的那样,不能在单个整数值和数组之间进行比较。
发布于 2020-02-22 04:44:36
这很简单,因为它归结为for循环的基本结构。以下是您的错误:
由于这一行(i=1;i< num_events_in_range;i++)违反了Amibroker语法,所以代码在Amibroker中无法工作。For循环不接受数组类型。num_events_in_range是一个数组。
正如您的错误所暗示的,这就是问题所在:
for (i=1;i<num_events_in_range; i++)
where, ^^^^^^^^^^^^^^^^^^^ this is the problem在for循环的结构中:
首先,将索引(i)声明为:
let i = [your starting point, usually 0 because is the first item in the array, in this case 1)
然后,当您希望索引停止时,必须告诉for循环。为此,您可以将索引与数字类型值进行比较。当我等于或大于这个数字时,它将按指示停止。
引起错误的原因是:数组不是数字类型。
因此,不能将索引与数组进行比较。
您必须将索引与数字进行比较,如果您希望在给定数组持续的时间内运行for循环,那么在这里使用.length。
考虑这个问题的最好方法是,for循环将迭代给定数组上的每个项。
为此,我们使用数组的.length属性。它返回数组中有多少项的数目值。
在这种情况下:
num_events_in_range.length给出了一个数字,即num_events_in_range数组中的项数。
最后但并非最不重要的是,您必须告诉for循环其迭代的因素。虽然i++ (索引每次自己添加一个索引来运行每个项目,无一例外)是此特性最常用的用法,但您可以将其更改为i+2或i+3,索引将在2s和3s中计算。
例如: By 2s,(假设起点为0):0,2,4,6,8,10,12,14,16,18.直到索引达到相同或高于其比较数的点为止。
https://stackoverflow.com/questions/57715230
复制相似问题