取不到group組裡面的股票本人

  •   102 
  • 最後發表   mina2310  2026 二月 22
mina2310 發文於   2026/02/17

不好意思 我又上來詢問了

實在想不透 我在一開始的時候就把stockID設成字串變數

為什麼跑出來的錯誤還會是GetSymbolField:第 1 個參數應該是 String/Input/Group。

 

Inputs: 

    cbgroup(group,"可轉債本人");

SetFirstBarDate(20200101);

Vars:

cbsize(0),

i(0),

cbClose(0),

change_Price(0),

change_Value(0),

stockID(""),

stockClose(0),

priceGAP(0),

average_priceGAP(0),

validCount(0);

 

cbsize = GroupSize(cbgroup);

 

average_priceGAP = 0;

validCount = 0;

 

For i = 1 to cbsize 

Begin

 

    cbClose   = GetSymbolField(cbgroup[i],"Close",default:=0); 

    change_Price = GetSymbolField(cbgroup[i],"轉換價格",default:=0);

 

    stockID   = GetSymbolInfo(cbgroup[i],"標的物");

 

    stockClose = GetSymbolField(stockID,"Close",default:=0);

 

    If change_Price > 0 and stockClose > 0 and cbClose > 0 Then 

    Begin

 

        change_Value = stockClose / change_Price * 100;

 

        priceGAP = (cbClose - change_Value) / change_Value * 100;

 

        average_priceGAP = average_priceGAP + priceGAP;

        validCount = validCount + 1;

 

    End;

 

End;

 

If validCount > 0 Then

    Plot1(average_priceGAP / validCount, "平均折溢價%");

 

 

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

GetSymbolField的第一個參數是商品代號字串,只能是一般字串,不接受字串變數。

mina2310 發文於   2026/02/17

不好意思 那我該怎麼解這個?

該怎麼去計算市場的cb折溢價平均? 該怎麼 讓他們在group裡面得到相對應的現股價格?

🙏可以給個方向嗎?

虎科大許教授 發文於   2026/02/17

目前我能想到的是用Switch Case結構,逐一根據CB代號,賦予現貨代號,以擷取現貨價格。不過,這樣做的話,你需要輸入三百多檔的資料。

Switch(cbgroup[i])

begin

case "11011.TW":

stockClose=GetSymbolField("1101.TW","Close",default:=0);

case "25483.TW":

stockClose=GetSymbolField("2548.TW","Close",default:=0);

case "82993.TW":

stockClose=GetSymbolField("8299.TW","Close",default:=0);

end;

 

mina2310 發文於   2026/02/19

好的  謝謝教授   

希望xq團隊可以提供可轉債的折溢價   和或是理論價值 

虎科大許教授 發文於   2026/02/20

Hi, mina2310,

我後來想到可以用群組中跑群組的方式解決這個問題。不過由於使用雙迴圈,需要運算的時間較長,建議你各建立一個商品組合,例如「我的可轉債清單」「我的可轉債現貨清單」,事先將可轉債及其現貨分別加入商品組合,再執行指標腳本,這樣效率會高很多。當然,若你想所有的CB都計算,且現貨由系統的上市櫃組合抓,這樣也可以,只是運算的指標時間會相當長。程式碼如下:

Inputs: 
    cbGroup(group,"可轉債清單"),
    stockGroup(group,"現貨清單");
SetFirstBarDate(20200101);
Vars:
cb_size(0), stock_size(0),
i(0), j(0),
cbClose(0), change_Price(0), change_Value(0),
stockID(""), stockClose(0),
priceGAP(0), average_priceGAP(0), validCount(0);

average_priceGAP = 0;
validCount = 0;
cb_size = GroupSize(cbGroup);
stock_size = GroupSize(stockGroup);

For i = 1 to cb_size 
    Begin
        cbClose   = GetSymbolField(cbGroup[i],"Close",default:=0); 
        change_Price = GetSymbolField(cbGroup[i],"轉換價格",default:=0);
        stockID   = GetSymbolInfo(cbGroup[i],"標的物");
        for j = 1 to stock_size
            begin
                if stockGroup[j] = stockID then
                    begin
                        stockClose = GetSymbolField(stockGroup[j],"Close",default:=0);
                        break;
                    end;
            end;
        If change_Price > 0 and stockClose > 0 and cbClose > 0 Then 
            Begin
                change_Value = stockClose / change_Price * 100;
                priceGAP = (cbClose - change_Value) / change_Value * 100;
                average_priceGAP = average_priceGAP + priceGAP;
                validCount = validCount + 1;
            End;
    End;
If validCount > 0 Then
    Plot1(average_priceGAP / validCount, "平均折溢價%");

以下是使用成交量最大的5檔CB,算出來的平均折溢價指標。

 

mina2310 發文於   2026/02/22

超級無敵感謝 

沒有教授我實在解決不了這世紀大難題

 

 

發表回覆
Close