(已回答,未解決) 為什麼函式裡面 Input 的變數型態放置的順序,會導致函式引用錯誤?

  •   192 
  • 最後發表   Sadless  2023 三月 21
Sadless 發文於   2021/09/15

我想要將Input:(String) 傳遞進去函數,結果發現這個奇怪的問題。

我寫了一個測試指標腳本,與兩個測試函數。

兩個測試函數做一樣的事情,就是抓出2330台積電 _nDs 天前的收盤價。

關鍵問題是,在函數裡面宣告 2個 Input 如下,我發現這兩個宣告的順序,會導致指標發生錯誤。

 

 

兩個測試函數如下:

{測試函式 fn_nDs_Symbol_Close}

{Input 的 String 放在 NumericSimple 的後面,指標會印不出東西}


Input:_nDs(NumericSimple);  {NumericSimple放後面}
Input:_Symbol(String);


fn_nDs_Symbol_Close = GetSymbolField(_Symbol, "收盤價", "D")[_nDs];

{測試函式 fn_Symbol_nDs_Close}

{Input 的 String 放在 NumericSimple 的前面,指標才能印出東西}


Input:_Symbol(String);      {String 放前面}
Input:_nDs(NumericSimple);


fn_Symbol_nDs_Close = GetSymbolField(_Symbol, "收盤價", "D")[_nDs];
    

把Input 的 String 放在 NumericSimple 的後面,指標會印不出東西。

{測試指標_GetSymbolFile_String}
{函式裡面 Input 的變數型態放置的順序,會導致函式引用錯誤?}


Input:_Symbol("2330.TW");   {String}
Input:_nDs(5);              {NumericSimple}


{Input 的 String 放在 NumericSimple 的後面,指標會印不出東西}
Plot1(fn_nDs_Symbol_Close(5, _Symbol), "_nDs_Symbol_Close");


{Input 的 String 放在 NumericSimple 的前面,指標才能印出東西}
//Plot2(fn_Symbol_nDs_Close(_Symbol, 5), "_Symbol_nDs_Close");

把Input 的 String 放在 NumericSimple 的前面,指標才能印出東西

{測試指標_GetSymbolFile_String}
{函式裡面 Input 的變數型態放置的順序,會導致函式引用錯誤?}


Input:_Symbol("2330.TW");   {String}
Input:_nDs(5);              {NumericSimple}


{Input 的 String 放在 NumericSimple 的後面,指標會印不出東西}
//Plot1(fn_nDs_Symbol_Close(5, _Symbol), "_nDs_Symbol_Close");


{Input 的 String 放在 NumericSimple 的前面,指標才能印出東西}
Plot2(fn_Symbol_nDs_Close(_Symbol, 5), "_Symbol_nDs_Close");

請問這個是甚麼原因,是我腳本的哪個邏輯寫錯了,導致這個錯誤嗎?

排序方式: 標準 | 最新
XQ小幫手 發文於   2021/09/16

Hello Sadless,

 

GetSymbolField 函數目前只能從最外層的腳本中用 input 傳商品代號進去。

所以這種透過腳本傳input進函數腳本的方式一般來說是不行的。

您的第二個方法可以使用是因為剛好指標腳本與函數腳本的input位置有對上,_Symbol都在第一個參數。

您可以作個測試,如果將指標腳本的input改為:

input:aaa(10);

Input:_Symbol("2330.TW");   {String}

Input:_nDs(5);              {NumericSimple}

這樣的話,就會變得Plot1可以使用,但Plot2無法使用了。

Sadless 發文於   2021/09/24

原來如此。

所以我是運氣好試出來的。

 

請問有辦法建議開發部改設計,讓GetSymbolField 的 "ID" 能夠吃String嗎?這樣子的話,很多程式碼就能模組化。

現在這個限制實在是很難使用,都只能把GetSymbolField 程式碼硬刻在腳本裡面。

這樣子寫,很不容易維護程式碼。

XQ小幫手 發文於   2021/09/29

Hello Sadless,

 

感謝您的建議,小幫手會轉告相關人士。

此問題已有請工程師研究解決方案。

小傑 發文於   2023/03/19

這個問題滿久了,請問什麼時候會解決呢?

XQ小幫手 發文於   2023/03/21

 Hello 小傑,

 

就小幫手所知,由於這項改動會牽涉到的部份太廣,所以目前不會變更。

不過如果您只是第一層使用 input 輸入 getsymbolfield 的商品名稱的話是可以正常運作。

發表回覆
Close