利用InputKind函數製作跨頻率週期的選取介面
選擇單元...
XS語法進階應用
單元目錄
單元目錄
進階功能介紹
1-1 SetTotalBar資料讀取範圍與腳本執行的關係
1-2 SetBackBar指定頻率設定資料筆數
1-3 探討變數序列的觀念:幾天前黃金交叉商品為例
1-4 如何運用Print指令來抓程式的臭蟲
1-5 談OutputField跟GetFieldDate這兩個函數
1-6 計算區間漲跌幅的自訂函數
1-7 盤中即時資料欄位的應用
1-8 Tick欄位的應用
1-9 台股逐筆撮合的連續成交Tick序列
1-10 選股中心創掛牌新高與大單欄位的應用
1-11 集保相關欄位調整
1-12 如何使用函數取得商品的實際庫存數量
1-13 XS在可轉債的應用
1-14 XS函數「isfirstcall」說明
1-15 XScript 編輯器已支援 *.xs 副檔名的檔案
使用XS撰寫完成策略後,在介面上輸入參數可能會輸入錯誤的數值,雖然執行後會秀出錯誤訊息告知,但時常會造成困擾,所以我們提供InputKind函數讓使用者可以在腳本內控制介面的行為,讓大家能在介面選擇輸入值,就能避免輸入錯誤的狀況發生。我們以KD指標的跨頻率語法為例。打開xfMin_stochastic函數我們可以看到,在計算有支援跨分鐘頻率的KD指標時我們會需要以下資訊:
- 頻率
- 資料期數
- K值平滑期數
- D值平滑期數
- 輸出RSV值
- 輸出K值
- 輸出D值
// 跨頻率KD指標,預設跨頻率為30分 // 不支援大頻率跨小頻率,例如: // 不支援主頻率60分鐘,跨頻率計算30分鐘KD技術指標。 // input: Length(9, "天數"), RSVt(3, "RSVt權數"), Kt(3, "Kt權數"), FreqType("30", "跨頻率週期", inputkind:=dict(["1分鐘","1"],["5分鐘","5"],["10分鐘","10"],["15分鐘","15"],["30分鐘","30"],["60分鐘","60"],["日","D"],["還原日","AD"])); variable: rsv(0), k(0), _d(0); if barfreq <> "Tick" and barfreq <> "Min" and barfreq <> "D" and barfreq <> "AD" then raiseruntimeerror("此範例僅支援分鐘、日與還原日頻率"); xfMin_stochastic(FreqType, Length, RSVt, Kt, rsv, k, _d); Plot1(k, "分鐘與日K(%)"); Plot2(_d, "分鐘與日D(%)"); // 防呆,大頻率跨小頻率時,在線圖秀不支援 // switch (FreqType) begin case "1": if barfreq <> "Tick" and barfreq <> "Min" then raiseruntimeerror("不支援大頻率跨小頻率:主頻率大於1分鐘"); if barinterval <> 1 then raiseruntimeerror("不支援大頻率跨小頻率:主頻率大於1分鐘"); setplotlabel(1, "1分K(%)"); setplotlabel(2, "1分D(%)"); case "5": if barfreq <> "Tick" and barfreq <> "Min" then raiseruntimeerror("不支援大頻率跨小頻率:主頻率大於5分鐘"); if barinterval <> 1 and barinterval <> 2 and barinterval <> 3 and barinterval <> 5 then raiseruntimeerror("不支援大頻率跨小頻率:主頻率大於5分鐘"); setplotlabel(1, "5分K(%)"); setplotlabel(2, "5分D(%)"); case "10": if barfreq <> "Tick" and barfreq <> "Min" then raiseruntimeerror("不支援大頻率跨小頻率:主頻率大於10分鐘"); if barinterval <> 1 and barinterval <> 2 and barinterval <> 3 and barinterval <> 5 and barinterval <> 10 then raiseruntimeerror("不支援大頻率跨小頻率:主頻率大於10分鐘"); setplotlabel(1, "10分K(%)"); setplotlabel(2, "10分D(%)"); case "15": if barfreq <> "Tick" and barfreq <> "Min" then raiseruntimeerror("不支援大頻率跨小頻率:主頻率大於15分鐘"); if barinterval <> 1 and barinterval <> 2 and barinterval <> 3 and barinterval <> 5 and barinterval <> 10 and barinterval <> 15 then raiseruntimeerror("不支援大頻率跨小頻率:主頻率大於15分鐘"); setplotlabel(1, "15分K(%)"); setplotlabel(2, "15分D(%)"); case "30": if barfreq <> "Tick" and barfreq <> "Min" then raiseruntimeerror("不支援大頻率跨小頻率:主頻率大於30分鐘"); if barinterval <> 1 and barinterval <> 2 and barinterval <> 3 and barinterval <> 5 and barinterval <> 10 and barinterval <> 15 and barinterval <> 20 and barinterval <> 30 then raiseruntimeerror("不支援大頻率跨小頻率:主頻率大於30分鐘"); setplotlabel(1, "30分K(%)"); setplotlabel(2, "30分D(%)"); case "60": if barfreq <> "Tick" and barfreq <> "Min" then raiseruntimeerror("不支援大頻率跨小頻率:主頻率大於60分鐘"); if barinterval <> 1 and barinterval <> 2 and barinterval <> 3 and barinterval <> 5 and barinterval <> 10 and barinterval <> 15 and barinterval <> 20 and barinterval <> 30 and barinterval <> 45 and barinterval <> 60 then raiseruntimeerror("不支援大頻率跨小頻率:主頻率大於60分鐘"); setplotlabel(1, "60分K(%)"); setplotlabel(2, "60分D(%)"); case "D": if barfreq <> "Tick" and barfreq <> "Min" and barfreq <> "D" and barfreq <> "AD" then raiseruntimeerror("不支援大頻率跨小頻率:主頻率大於日"); setplotlabel(1, "日K(%)"); setplotlabel(2, "日D(%)"); case "AD": if barfreq <> "Tick" and barfreq <> "Min" and barfreq <> "D" and barfreq <> "AD" then raiseruntimeerror("不支援大頻率跨小頻率:主頻率大於還原日"); setplotlabel(1, "還原日K(%)"); setplotlabel(2, "還原日D(%)"); end;