|
01 — 引言 有網(wǎng)友反饋,使用通達(dá)信板塊統(tǒng)計(jì)函數(shù)INSORT和INSUM時(shí),奇慢無比,甚至有時(shí)候可能還會(huì)死機(jī)。 這是沒辦法的事情,因?yàn)檫@兩個(gè)函數(shù)需要同時(shí)獲取同一板塊各個(gè)股票的最新狀態(tài)信息,計(jì)算量大。有時(shí)候不可避免的也會(huì)造成假死現(xiàn)象。 這里首先簡(jiǎn)要介紹一下這兩個(gè)指標(biāo): 1)、INSORT:板塊排序選股 INSORT.橫向統(tǒng)計(jì) 用法:INSORT(板塊名稱,指標(biāo)名稱,指標(biāo)線,升降序), 返回該股在板塊中的排序序號(hào) 例如:INSORT('房地產(chǎn)','KDJ',3,0)表示該股的KDJ指標(biāo)第三個(gè)輸出即J之值在房地產(chǎn)板塊中的排名, 最后一個(gè)參數(shù):0表示降序排名,1表示升序排名 2)、INSUM:板塊指標(biāo)統(tǒng)計(jì) INSUM.橫向統(tǒng)計(jì) 用法:INSUM(板塊名稱,指標(biāo)名稱,指標(biāo)線,計(jì)算類型), 返回板塊各成分該指標(biāo)相應(yīng)輸出按照計(jì)算類型得到的計(jì)算值。 計(jì)算類型可選擇:0-累加,1-平均數(shù),2-最大值,3-最小值. 例如:INSUM('房地產(chǎn)','KDJ',3,0)表示房地產(chǎn)板塊中所有股票的KDJ指標(biāo)第三個(gè)輸出即J之值的累加值。 那么,就沒有辦法解決板塊統(tǒng)計(jì)太慢這個(gè)問題嗎? 也不一定,我這里就使用DLL部分的解決了這一難題。 這里我設(shè)計(jì)了tkxBKInfo.dll,這個(gè)DLL就可以下載板塊信息以及一個(gè)指標(biāo),還可以對(duì)某個(gè)板塊的數(shù)據(jù)進(jìn)行排序(通達(dá)信insort函數(shù)功能)和統(tǒng)計(jì)(通達(dá)信insum函數(shù)功能)
02 — 板塊數(shù)據(jù)下載 下面,我用下面的函數(shù),來對(duì)板塊數(shù)據(jù)和指標(biāo)信息進(jìn)行下載:
FLINE:=TDXDLL10(1, SETCODE, CODE,GNBLOCK);指標(biāo):=EMA(C,20);FLINE2:=TDXDLL10(2, 指標(biāo),'BKDATA.BIN', DATE);這里,我把個(gè)股所屬的概念板塊(GNBLOCK)都下載出來,同時(shí)還把一個(gè)對(duì)應(yīng)的指標(biāo)(這里是20天expma均線)也同時(shí)下載出來, 這兩個(gè)信號(hào),我保存在一個(gè)叫做'BKDATA.BIN'的二進(jìn)制文件里面。 把'BKDATA.BIN'文件解析,可以還原為下面這樣的文件, 熟悉通達(dá)信“自定義外部數(shù)據(jù)”格式的朋友們肯定能夠看出,這就是通用的,滿足自定義外部數(shù)據(jù)的數(shù)據(jù)文件,包含了標(biāo)準(zhǔn)的文字信息以及數(shù)據(jù)信息。(不了解通達(dá)信自定義外部數(shù)據(jù)的處理和介紹可以參考:通達(dá)信自定義外部數(shù)據(jù)的入門與騷操作)
當(dāng)然,你可以把GNBLOCK替換成其他任何字符串,這樣下載出來的就是你自己寫入的字符了,比如,你可以把這一行: 替換成為: FLINE:=TDXDLL10(1, SETCODE, CODE,’自己定義的字符串’);這時(shí)候,下載出來的字符就是’自己定義的字符串’這一行話了。 這樣,你就可以完全定制你想要的字符串輸出了。 同時(shí)對(duì)應(yīng)的指標(biāo),你也可以隨意更換為其他公式: 比如,替換成為: 指標(biāo):= MACD;只要是通達(dá)信公式能夠表達(dá)的指標(biāo),都能夠下載。 03 — 板塊數(shù)據(jù)統(tǒng)計(jì) 現(xiàn)在,就可以利用下載的數(shù)據(jù)進(jìn)行板塊數(shù)據(jù)統(tǒng)計(jì)了
比如,這上面的兩個(gè)F1命令,就分別表示代替了通達(dá)信INSORT和INSUM。 F1:=TDXDLL10(11, SETCODE,1, 0); 表示按照insort函數(shù)的0降序排名 F1:=TDXDLL10(11, SETCODE,1, 1); 表示按照insort函數(shù)的1升序排名 同樣的: F1:=TDXDLL10(11, SETCODE,2, 0); 表示按照insum函數(shù)的0-累加 F1:=TDXDLL10(11, SETCODE,2, 1); 表示按照insum函數(shù)的1-求平均數(shù) F1:=TDXDLL10(11, SETCODE,2, 2); 表示按照insum函數(shù)的2-求最大值 F1:=TDXDLL10(11, SETCODE,2, 3); 表示按照insum函數(shù)的3-求最小值. 上面,我匹配的板塊名為“血氧儀”,你可以輸入其他任何感興趣的對(duì)應(yīng)的概念板塊字符串。 這樣,我就用DLL代替了實(shí)盤的數(shù)據(jù)統(tǒng)計(jì)。 計(jì)算性能大大提升,無論是用這個(gè)DLL來看盤還是選股,都不會(huì)卡了。 看文章仔細(xì)的朋友可能注意到我之前說的是“部分代替”通達(dá)信的統(tǒng)計(jì)函數(shù)。 那為什么我會(huì)說部分代替呢? 1)有可能選股統(tǒng)計(jì)不全 我用“血氧儀”,選出的全部相關(guān)的股票只有下面的28個(gè),
但是,查詢之后,發(fā)現(xiàn)通達(dá)信自己的“血氧儀”板塊,一共有29個(gè),
也就是,遺漏了一個(gè)。 經(jīng)過我的查詢,發(fā)現(xiàn)遺漏了下面的這個(gè)“四川長(zhǎng)虹”:
查詢四川長(zhǎng)虹的副圖輸出的GNBLOCK字符串,發(fā)現(xiàn)就是下面這些子概念: 國(guó)防軍工 軍民融合 大飛機(jī) 物聯(lián)網(wǎng) 鋰電池概念 釩電池 衛(wèi)星導(dǎo)航 蘋果概念 小米概念 百度概念 華為海思 華為算力 消費(fèi)電子概念 邊緣計(jì)算 數(shù)據(jù)中心 芯片 養(yǎng)老概念 智能家居 智慧城市 機(jī)器人概念 虛擬現(xiàn)實(shí) 無人機(jī) 跨境電商 OLED概念 超清視頻 區(qū)塊鏈 人工智能 工業(yè)互聯(lián) 儲(chǔ)能 從上面,的確發(fā)現(xiàn),沒有出現(xiàn)“血氧儀”這個(gè)詞。 原來通達(dá)信GNBLOCK字符串長(zhǎng)度有限,超過副圖一整個(gè)屏幕能夠顯示的長(zhǎng)度之后,板塊字符串就截?cái)嗔?/span>,其它的板塊字符數(shù)據(jù)就被隱藏了。 所以,我下載得到的數(shù)據(jù)中缺少了四川長(zhǎng)虹的“血氧儀”概念。這個(gè)股票的概念太多,“血氧儀”顯示不出來,被遺漏了。 因此,DLL進(jìn)行板塊數(shù)據(jù)統(tǒng)計(jì)的時(shí)候,就出現(xiàn)了遺漏。 現(xiàn)在問題清楚了,如果一個(gè)板塊的字符串太長(zhǎng),所屬的真實(shí)板塊就有可能會(huì)丟失,就有可能造成后續(xù)板塊統(tǒng)計(jì)的遺漏。 所以,這個(gè)DLL不適合強(qiáng)迫癥。 2)不適合實(shí)時(shí)指標(biāo) 從前面的分析,還可以看出,DLL是把指標(biāo)信息下載到外部文件中,之后才能夠排序、統(tǒng)計(jì)。 也就是,現(xiàn)有下載,才有后續(xù)的統(tǒng)計(jì)。 如果,你需要高速動(dòng)態(tài)響應(yīng),那就不能用。 這個(gè)DLL只能是現(xiàn)下載指標(biāo),再能夠進(jìn)行后續(xù)的操作。 你一旦發(fā)現(xiàn)數(shù)據(jù)過時(shí)了,就需要重新下載數(shù)據(jù)。 以上就是我理解的這個(gè)DLL只能部分替代通達(dá)信insort和insum函數(shù)的原因。 04 — 板塊數(shù)據(jù)統(tǒng)計(jì) 現(xiàn)在,利用這個(gè)DLL,就避免了通達(dá)信兩個(gè)板塊函數(shù)insort和insum統(tǒng)計(jì)奇慢,甚至可能死機(jī)的缺點(diǎn)。 這個(gè)DLL也不完美,因?yàn)榘鍓K概念字符串長(zhǎng)度有限,有可能造成遺漏。當(dāng)然這個(gè)問題,可以通過你自己去定義輸入的字符串來解決。比如你通過自定義某個(gè)“張三李四王五”板塊,這肯定不會(huì)超過通達(dá)信內(nèi)部定義的字符串長(zhǎng)度。 另外對(duì)于指標(biāo)實(shí)時(shí)性有要求的,DLL處理起來也不完美。 如果你能夠忍受上面的兩個(gè)小bug,那這個(gè)DLL就完全能夠替代通達(dá)信板塊統(tǒng)計(jì)函數(shù)了。 |
|
|