GetSymbolInfo-請問是使用這個函數去抓交易所的資料嗎
CB可轉債要抓到期的天數資料該怎麼抓
- 99
- 最後發表 XIEPEIHENG 2026 五月 26
可使用GetSymbolInfo抓到期日,再用DateDiff計算距離到期日的天數。
value1 = getsymbolInfo("到期日");
value2 = dateDiff(value1, Date);
print(value1, value2);
// {@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)
目前看起來input結合InputKind:=SymbolGroup("CB")似乎抓不到清單。待產品部門了解情況。
你的程式之所以無法顯示清單,是因為指標腳本的執行商品沒有發行CB造成。你若指定執行商品是8299群聯,指標就可正常顯示。
好的了解~
5 評論