利用金字塔的VBA與C++的混合編程來實現(xiàn)復(fù)雜的二次開發(fā)及交易功能 [金字塔]
- 咨詢內(nèi)容:
金字塔的除了提供基礎(chǔ)的PEL語言外,基于VBA和C++二次開發(fā)功能無疑是所有程序化交易軟件中最強的一個了,VBA金字塔完全兼容OFFICE的VBA開發(fā)習(xí)慣,C++也是很多專業(yè)用戶的開發(fā)語言,能將這2點融合成一體,無疑是金字塔用戶的最高境界了。
金字塔幾乎將所有內(nèi)部的對象接口都暴露給了VBA對象,包括數(shù)據(jù),界面操作,下單管理等,用戶可以用VBA做大部分的事情,但是VBA也有其不完美的一面,包括不能向C++那樣使用指針,金字塔VBA對網(wǎng)絡(luò)的操作支持力度有限,及VBA是解析性的語言腳本系統(tǒng),對安全性沒有C++哪種編譯性的高等等,因此很多專業(yè)的程序化大都會選擇C++語言做為編寫對象,但是C++除了給我們的編程便利性帶來好處外,也帶來了學(xué)習(xí)困難,編寫專業(yè)要求程度高等缺點,由于金字塔未能將所有內(nèi)部操作接口對象完全暴露給C++接口,因此做為用戶來說,使用VBA與C++進行混合編程無疑是很好的一種解決方案。利用系統(tǒng)暴露給VBA的接口進行通訊,VBA再將其參數(shù)傳遞給C++接口,內(nèi)部的復(fù)雜運算通過C++來實現(xiàn),最后將計算結(jié)果返回給VBA進行界面上的處理。
金字塔暴露給VBA主要有下面幾個對象
Application 對象
代表 金字塔證券分析系統(tǒng) 應(yīng)用程序。整個應(yīng)用程序運行過程中,只有一個Application對象存在。利用該對象可以對整個金字塔程序進行控制。
ReportData 對象
證券行情數(shù)據(jù)對象,該對象用于表示該證券最新行情數(shù)據(jù)。
MarketData 對象
該對象描述了市場行情數(shù)據(jù)。可以通過這個對象來訪問指定的品種的各種數(shù)據(jù),也可以維護接收數(shù)據(jù)的設(shè)置。
Frame 對象
表示一個“框架”對像。每個框架都有一個這樣的對象與之相對應(yīng)。
你可以橫向或者縱向切分一個窗格,還可以在當(dāng)前窗格位置處添加一個窗格,此時兩個窗格將會自動分頁顯示。
Order 對象
Order 對象負(fù)責(zé)定單管理和查詢等操作,接收委托服務(wù)器發(fā)送來的各種帳戶持倉信息。該Order對象還支持多帳戶的下單模式,用戶可以在閃電下單時截獲該事件,并處理成自己的操作方式以達(dá)到可以實現(xiàn)比如贏損下單的目的。除此之外,該對象還支持多帳戶操作。
事件處理
上述對象除了可以直接控制金字塔軟件外,還可以被動的接收來自軟件的各種事件,比如用戶下單后,Order 對象 就可以接收來自這個對象的事件,有了事件功能后,用戶可以就可以不用總是去不斷查詢是否有最新行情數(shù)據(jù)過來,是否下單了等等,完全可以在程序中設(shè)立條件來主動接收事件,提高了軟件的運行效率。
使用VISUAL C++開發(fā)ACTIVEX自動化接口,與VBA進行通信
我們要寫一個能與VBA通信的接口程序,通過ACTIVEX無疑是最好的方案,使用VISUAL C++開發(fā)ACTIVEX是件非常簡單的事情,本教程就以此為范例制作一個可以與VBA交互使用的ACTIVEX,步驟如下:
我們以VC6.0為例。
第一步我們需要用VISUAL C++創(chuàng)建一個DLL工程,工程名稱為MyActiveXDemo
此主題相關(guān)圖片如下:qq截圖未命名1.jpg第二步我們需要選擇是MFC標(biāo)準(zhǔn)DLL程序,并要勾選“Automation” 也就是ACTIVEX自動化的接口選項。
此主題相關(guān)圖片如下:qq截圖未命名2.jpg
然后我們點“Finish” 按鈕后完成項目的初建
項目框架創(chuàng)建完畢后,我們就要建立一個可以與VBA通信的ACTIVEX接口,步驟如下:
Inster -> New Class 彈出新建類窗口,我們選擇MFC接口
此主題相關(guān)圖片如下:qq截圖未命名3.jpg
我們將接口類起名為VBSAddin,并指定基類是CCmdTarget,并在下方選擇類接口的創(chuàng)建方式為 type id 方式接口類創(chuàng)建好了后,剩下的就是我們通過 Class Wizard類添加屬性和方法了
比如我們創(chuàng)建一個方法函數(shù),名稱為“MyTest”,返回值可以根據(jù)項目的要求來任意指定,參數(shù)我們輸入一個數(shù)值參數(shù),并且在ActiveX中通過MSG打印出來
此主題相關(guān)圖片如下:qq截圖未命名5.jpg項目創(chuàng)建完畢后,系統(tǒng)會自動為我們添加代碼,加上我們的打印輸出后代碼如下:
float VBSAddin::MyTest(double Value)
{
CString strValue;
strValue.Format("%f",Value);
AfxMessageBox(strValue);return 0.0f;
}最后編譯我們的ActiveX,編譯完畢后一定注意需要注冊這個ActiveX我們才能在本地電腦中使用,比如我們將其拷貝到C盤根目錄后,通過命令行做如下注冊即可: regsvr32 c:\MyActiveXDemo.dll
最后,我們在VBA中來調(diào)用我們剛才所建立的ActiveX控件
例如我們在Test宏中輸入如下代碼
Sub Test()
Dim MyAddin '創(chuàng)建一個變量Set MyAddin = CreateObject("MyActiveXDemo.VBSAddin")
MyAddin.MyTest(400)End Sub
注意MyActiveXDemo.VBSAddin是我們在剛才創(chuàng)建時所指定的標(biāo)識符,通過這個標(biāo)識符系統(tǒng)才能找到我們所建立的Activex
指定宏后,看看效果吧。
附帶C++演示示例工程
[此貼子已經(jīng)被作者于2012-5-6 23:08:36編輯過] - 金字塔客服:
最后說明一點,金字塔的進程是不允許被調(diào)試加載的,這對C++開發(fā)者來說增加調(diào)試難度,但是可以通過附加進程調(diào)試的方法來解決問題,比如VS2008等都有很好的這種支持,詳情請GOOGLE搜索。
[此貼子已經(jīng)被作者于2012-5-13 9:28:11編輯過] - 用戶回復(fù): 占位
- 網(wǎng)友回復(fù):
完全贊同樓主的意見,這是金字塔區(qū)別于其他交易軟件的最強大的武器。
- 網(wǎng)友回復(fù): 哈哈,我就是這樣做的。
有思路,想編寫各種指標(biāo)公式,程序化交易模型,選股公式,預(yù)警公式的朋友
可聯(lián)系技術(shù)人員 QQ: 262069696 進行 有償 編寫!(不貴!點擊查看價格!)
相關(guān)文章
-
沒有相關(guān)內(nèi)容