CB可轉債要抓到期的天數資料該怎麼抓

  •   99 
  • 最後發表   XIEPEIHENG  2026 五月 26
XIEPEIHENG 發文於   2026/05/17

 

 GetSymbolInfo-請問是使用這個函數去抓交易所的資料嗎

排序方式: 標準 | 最新
虎科大許教授 發文於   2026/05/17

可使用GetSymbolInfo抓到期日,再用DateDiff計算距離到期日的天數。

value1 = getsymbolInfo("到期日");
value2 = dateDiff(value1, Date);
print(value1, value2); 

XIEPEIHENG 發文於   2026/05/26

截圖圖片 // {@type:indicator}

 input:

     cb_id("", "選擇CB商品(正股圖用)", InputKind:=SymbolGroup("CB"), quickedit:=true),

     _mode(1, "柱圖內容", inputkind:=Dict(

         ["CB溢價率", 1],

         ["CB剩餘張數", 2],

         ["轉換比例(%)", 3],

         ["天數", 4]

     ), quickedit:=true),

     cbMaturity(0, "輸入CB到期日(正股圖用,YYYYMMDD)", quickedit:=true); // 正股圖時唯一需要手動輸入

 

 Vars:

     stockClose(0),

     cbClose(0),

     convPrice(0),

     convRatio(0),

     convValue(0),

     premiumRate(0),

     remainLots(0),

     autoCbDate(0),

     finalCbDate(0),

     daysLeft(0),

     barValue(0);

 

 // 1) 嘗試抓取「主圖」的到期日

 autoCbDate = GetSymbolInfo("到期日");

 

 if autoCbDate > 0 then begin

     // 【情境 A】主圖是 CB (例如 24642) -> 全自動模式

     finalCbDate = autoCbDate;

     cbClose = Close;

     stockClose = GetSymbolField("Underlying", "收盤價"); // 自動反查正股

     convPrice = GetField("轉換價格");

     if BarFreq = "D" then

         remainLots = GetField("CB剩餘張數", "W")

     else

         remainLots = GetField("CB剩餘張數");

 end

 else begin

     // 【情境 B】主圖是正股 (例如 2464) -> 報價可跨抓, 屬性(到期日)不可跨抓

     if cb_id = "" then 

         RaiseRunTimeError("主圖為正股時,請由下拉選單選擇CB商品");

 

     // 到期日: 只能改由手動輸入一次

     finalCbDate = cbMaturity; 

 

     // 報價欄位: 皆可跨商品自動抓

     stockClose = Close;

     cbClose = GetSymbolField(cb_id, "收盤價");

     convPrice = GetSymbolField(cb_id, "轉換價格");

     if BarFreq = "D" then

         remainLots = GetSymbolField(cb_id, "CB剩餘張數", "W")

     else

         remainLots = GetSymbolField(cb_id, "CB剩餘張數");

 end;

 

 // 2) 計算天數

 if finalCbDate > 0 then begin

     daysLeft = DateDiff(finalCbDate, Date);

     if daysLeft < 0 then 

         daysLeft = 0;

 end

 else begin

     daysLeft = 0;

 end;

 

 // 3) 計算轉換比例與溢價率

 if convPrice > 0 then begin

     convRatio = 100 / convPrice;

     convValue = convRatio * stockClose;

 end

 else begin

     convRatio = 0;

     convValue = 0;

 end;

 

 if convValue > 0 then

     premiumRate = (cbClose - convValue) / convValue * 100

 else

     premiumRate = 0;

 

 // 4) 柱圖內容切換

 switch (_mode)

 begin

     case 2:

     begin

         barValue = remainLots;

         SetPlotLabel(1, "主柱圖-CB剩餘張數");

     end;

     case 3:

     begin

         barValue = convRatio;

         SetPlotLabel(1, "主柱圖-轉換比例(%)");

     end;

     case 4:

     begin

         barValue = daysLeft;

         SetPlotLabel(1, "主柱圖-天數");

     end;

     default:

     begin

         barValue = premiumRate;

         SetPlotLabel(1, "主柱圖-CB溢價率");

     end;

 end;

 

 // 5) 圖層輸出

 SetPlotLabel(2, "CB溢價率");

 SetPlotLabel(3, "CB剩餘張數");

 SetPlotLabel(4, "轉換比例(%)");

 SetPlotLabel(5, "天數");

 

 Plot1(barValue, "主柱圖", checkbox:=0, axis:=1);

 Plot2(premiumRate, "CB溢價率", checkbox:=1, axis:=2);

 Plot3(remainLots, "CB剩餘張數", checkbox:=1, axis:=11);

 Plot4(convRatio, "轉換比例(%)", checkbox:=0, axis:=12);

 Plot5(daysLeft, "天數", checkbox:=0, axis:=13);

(請教教授那這樣該如何去修正我還是抓不到checkbox的下拉式選單資料然後計算天數QQ)

虎科大許教授 發文於   2026/05/26

目前看起來input結合InputKind:=SymbolGroup("CB")似乎抓不到清單。待產品部門了解情況。

虎科大許教授 發文於   2026/05/26

你的程式之所以無法顯示清單,是因為指標腳本的執行商品沒有發行CB造成。你若指定執行商品是8299群聯,指標就可正常顯示。

XIEPEIHENG 發文於   2026/05/26

好的了解~

發表回覆
Close