按照自己的交易思想來開發(fā)相應(yīng)的程序最大的一個(gè)宗旨就是簡單化,系統(tǒng)不能搞得太復(fù)雜,免得某個(gè)環(huán)節(jié)出現(xiàn)問題導(dǎo)致錯(cuò)過交易機(jī)會。
作為一個(gè)測試,將自己預(yù)定義好的預(yù)埋單保存到一個(gè)標(biāo)準(zhǔn)的文本文件里面(這個(gè)預(yù)埋單的期限不僅僅是今天,也可能到未來的三個(gè)月或者一個(gè)月)。事實(shí)上,我們使用數(shù)據(jù)庫來保存這些記錄,但是一個(gè)數(shù)據(jù)庫文件過于龐大,而且還有安裝引擎等東西,麻煩,如果異地在異機(jī)上操作(本人還有工作),還要再次安裝這些數(shù)據(jù)庫(可能除了ACESS之外等小型文件之外)。最好的方法就是使用文本文件,也好編輯。文本編輯器很多。編輯的格式也簡單。
下面幾個(gè)例子:
假設(shè) 我的預(yù)埋單的記錄保存在標(biāo)準(zhǔn)化的文件內(nèi) test.csv (逗號或者TAB或者自定義的符號作為隔離符)。
假設(shè)所在文件夾子 d:\jameszyj 下 完整的路徑為 d:\jameszyj\test.csv
1、建立文件型或者跟系統(tǒng)性的的ODBC (控制面板 管理工具 下 的ODBC管理器)
dsn= jameszyj
很簡單就可以設(shè)置了,只要設(shè)定好目錄就可以了, 即 d:\jameszyj
那么該文件子底下每個(gè)文本文件就是一個(gè)表。
該文件夾下還有 一個(gè)文件 schema.ini 這里面保存本目錄下每個(gè)文本文件的信息。
其中有個(gè) key :ColNameHeader=false 默認(rèn)值是false ,可以改成true 相當(dāng)于表結(jié)構(gòu)的名字
2、完成之后在金字塔做以下工作
新建一個(gè)FORM對象,然后在vba控件欄(工具箱)增加一個(gè)一個(gè)數(shù)據(jù)庫控件 這個(gè)數(shù)據(jù)庫控件在金字塔的主目錄下
名字為:EDITGRIDCTRLLIB.OCX 金字塔安裝之后就注冊好了
在工具箱右鍵點(diǎn)擊"添加控件"的時(shí)候 彈開一個(gè)窗口 在窗口的最下面 會看到"可以編輯的網(wǎng)格控件" 在其左邊的checkbox 點(diǎn)擊之后確定 就成功將該控件添加到面板上,就可以像使用MS FORMS 2.0 控件那樣使用了。
如果找不到這個(gè)控件,可以把這個(gè)文件拷貝到c:\windows\system32下
然后使用以下命令就可以注冊了:
regsvr32 editgridctrllib.ocx
3、實(shí)現(xiàn)部分
將該網(wǎng)格控件拖到 FORM上 右鍵點(diǎn)擊 然后在窗口內(nèi) 將名字命為 fg
Sub test_Load()
set lnv_sqlca = createobject("adodb.connection")
lnv_sqlca.c
lnv_sqlca.open
if lnv_sqlca.state <> 1 then
msgbox "不能打開交易記錄",0,"Warning Tip"
exit sub
end if
set lnv_rs = createobject("adodb.recordset")
lnv_rs.open "select * from test.csv",lnv_sqlca ' 每個(gè)文本文件就是一個(gè)表
set test_fg.datasource = lnv_rs
lnv_sqlca.close
End Sub
然后啟動(dòng)VBA 執(zhí)行該窗口,窗口打開之后,該網(wǎng)格數(shù)據(jù)控件就顯示出文本文件的內(nèi)容了。
作為例子,僅供參考。
這樣子信息的保存通過這個(gè)思路就可以實(shí)現(xiàn)了。我們完全可以借助金字塔的VBA功能可以開發(fā)出自己的交易系統(tǒng),套利系統(tǒng),程序交易模型,太棒了。
但有一個(gè)關(guān)鍵的問題是,金字塔的多線程處理可能要加強(qiáng),少用循環(huán)語句,特別是循環(huán)語句內(nèi)需要執(zhí)行較多時(shí)間的時(shí)候,系統(tǒng)就會被這個(gè)循環(huán)獨(dú)占,導(dǎo)致金字塔內(nèi)的其他任務(wù)會在擱置。特別是這個(gè)任務(wù)最佳的觸發(fā)條件正好處于循環(huán)之內(nèi)的時(shí)候。
'上面的代碼粘貼過來的時(shí)候有點(diǎn)不對
Sub test_Load()
set lnv_sqlca = createobject("adodb.connection")
lnv_sqlca.c
lnv_sqlca.open
if lnv_sqlca.state <> 1 then
msgbox "不能打開交易記錄",0,"Warning Tip"
exit sub
end if
set lnv_rs = createobject("adodb.recordset")
lnv_rs.open "select * from test.txt",lnv_sqlca
set test_fg.datasource = lnv_rs
lnv_sqlca.close
End Sub
新版已經(jīng)增加 application.PeekAndPump 方法,可以實(shí)現(xiàn)異步操作。
但是提醒用戶,異步操作對編程能力要求很高,稍有補(bǔ)注意就會導(dǎo)致程序崩潰