請問一下小幫手語法

  •   205 
  • 最後發表   clanDX  2022 二月 24
clanDX 發文於   2022/02/22

不好意思~想請教一下小幫手

如果在陣列的狀況下要取得前一天的最高價或平均價
程式要如何撰寫呢?
以下是我測試的寫法,但結果好像有誤

array:T50[5](0);
t50[1]=GetSymbolField("2347.tw","high");
t50[2]=GetSymbolField("2330.tw","high");
t50[3]=GetSymbolField("2317.tw","high");
t50[4]=GetSymbolField("2498.tw","high");
t50[5]=GetSymbolField("2454.tw","high");

variable:count(0),i(0);
count=0;
for i=1 to 5
begin
if  t50[i] > highest(t50[i],5)[1]   /////或是  if  t50[i] > average(t50[i],5)[1]
then count=count+1;
end;

plot1(count);

再麻煩小手幫了,謝謝您!

XQ小幫手 發文於   2022/02/24

Hello clanDX,

 

您的寫法主要是會碰上迴圈內呼叫函數且取前期值的問題。

主要是因為迴圈第一次執行時取函數前期值,所以倒回去前一根Bar作運算。

接下來幾次的運算中,因為已經有第一次運算的值,所以會直接抓取。

但這樣就全都抓到第一個執行的商品的值,因此出錯。

您可以實際print出來就可以了解。

 

小幫手建議您可以修改成不要使用迴圈:

if t50[1] > highest(t50[1],5)[1] then count += 1;

if t50[2] > highest(t50[2],5)[1] then count += 1;

if t50[3] > highest(t50[3],5)[1] then count += 1;

if t50[4] > highest(t50[4],5)[1] then count += 1;

if t50[5] > highest(t50[5],5)[1] then count += 1;

或是直接使用前期值:

for i=1 to 5

begin

if  t50[i] >= simplehighest(t50[i][1],5);

then count=count+1;

end;

這兩種都不會出錯。

  • 按讚來自於
  • clanDX
發表回覆
Close