我使用交易腳本想抓8032這檔的處置開始日期
settotalBar(1);
//setbarback(20);
print(getBackBar);
print(GetField("處置開始日期"));
沒加入setbarback預設是20,抓不到資料
加入setbarback(20)卻抓的到
明明barback是一樣的結果卻不同,想問原理是什麼?
我使用交易腳本想抓8032這檔的處置開始日期
settotalBar(1);
//setbarback(20);
print(getBackBar);
print(GetField("處置開始日期"));
沒加入setbarback預設是20,抓不到資料
加入setbarback(20)卻抓的到
明明barback是一樣的結果卻不同,想問原理是什麼?
你只準備一筆資料,當然抓不到之前的數據。透過setBackBar或setBarBack,就可抓到之前的數據。
但是沒加入setbarback預設就是20應該也可以抓到數據吧
沒加入setBarBack,就沒有準備前置資料,亦即預設為0,而非20。
但是沒有設setbarback時,print出的getbarback是20
我使用選股腳本,卻發現加不加setBackBar,getBackBar都是0,這個有點奇怪。
setBackBar(20);
if symbol="8032.TW" then ret=1;
outputField1(GetField("處置開始日期"),"處置開始日期");
outputField2(getBackBar,"引用筆數");
教授誤會了,我使用的是交易腳本
測試結果與你的結果相同。這個很奇怪。
再麻煩教授解惑了
查詢問題中,有結果會立即回覆。
XQ的資料大致分為固定頻率的資料,例如開高低收、成交量等等固定頻率的資料,每月、每週、每日或每分鐘都有的資料,以及不固定頻率(單一頻率)的資料,這些偶爾會出現且出現頻率不固定的資料,例如庫藏股開始日期、除權日期、除息日期、現增繳款日期、處置開始日期、法說會日期...。當使用者沒有使用setBackBar設定引用資料筆數,則就固定頻率資料而言,系統會準備20筆,但不固定頻率的資料,由於預設20筆,可能實際引用的固定頻率資料的筆數會非常多。例如,除權日期若準備20筆,則可能會使用20年以上的資料,因此系統在設計的時候,對於這種不固定頻率的資料會用一個公式計算要準備多少筆。不幸的是8032這檔股票過去只有一筆處置開始日期的資料,公式算出來應該引用的資料筆數是0,亦即預設引用筆數是0,所以會找不到資料。若使用者使用setBackBar(20),則系統會準備僅有的1筆,因此會抓到資料。至於getBackBar函數會傳回引用的資料筆數,若是固定頻率資料,且沒預設setBackBar,則會傳回預設的20。碰到不固定頻率資料,系統會由公式另行計算,取代原本預設的20筆。getBackBar指向的是固定頻率的預設引用筆數,在你的例子並不是真正準備的引用筆數。
一般而言,我會建議使用者主動控制setTotalBar及setBackBar。不主動控制的話,可能會有因為預設筆數太少而沒抓到足夠的資料,造成技術指標數值計算錯誤(選股使用MACD指標,用預設的10筆算出來的技術指標數值是不對的),或是預設的資料太多,造成沒有效率的問題(抓今天外資買賣超,只需要讀取1筆,但選股腳本預設10筆,前面9筆是不需要的,不過,程式一樣會跑這9筆,這樣是沒有效率的)。你只想抓最近一次的處置開始日期,其實只要setBackBar(1)即可抓到資料。
10 評論