我們很多專業(yè)投資者及一些投資機構(gòu)都喜歡使用C++直接編寫交易策略,C++語言無論是靈活性和安全性都是要比傳統(tǒng)的一般意義上的腳本語言要強大許多,這也是大家所普遍采用的一個主要理由。但是直接使用C++開發(fā)需要3個主要組件,主要包括:
1、歷史行情數(shù)據(jù)的管理和接收
2、交易策略的評估與實現(xiàn)
3、下單交易具體實施
實際上上述3點其實已經(jīng)包含了一個程序化交易軟件所具有的主要特點了,如果是全部都要重新開發(fā)一套這樣的產(chǎn)品,我們的投資公司最后都要變成名副其實軟件公司了,將耗費很大的精力與財力來組織和管理整個軟件開發(fā)團隊。
如果使用金字塔平臺進行C++的策略編寫,那么上述的多個難點就可以很好的得到解決,主要如下:
1、金字塔為C++接口提供了豐富完善的歷史數(shù)據(jù),包括盤中即時數(shù)據(jù),1分,5分,15,30,日線等等多大十幾種周期數(shù)據(jù),這些數(shù)據(jù)都是金字塔軟件統(tǒng)一管理,模型的開發(fā)者不必再來操心歷史數(shù)據(jù)如何管理。
2、我們的交易策略在前期模型階段可以利用金字塔平臺PEL語言快速的進行評估,評估結(jié)束后,再集中精力來變成C++的具體交易算法,節(jié)省了大量的時間。
3、可以利用金字塔平臺進行全球市場交易;雖然現(xiàn)在CTP平臺開放了交易接口,但畢竟是只有這一個接口,如果交易者要對其他的交易接口例如金仕達、恒生接口等等時,都必須要去重新開發(fā)接口,同樣是要花費很大的精力。但如果使用金字塔平臺,開發(fā)者就不必再去關(guān)心不同的交易接口到底有哪些不同,我們都已經(jīng)為客戶封裝好了統(tǒng)一的交易接口規(guī)范,你只要交易策略編寫完畢后,就可以在金字塔所支持的國內(nèi)期貨公司,證券公司,外盤期貨外匯等等平臺上進行交易。
綜上所述,實際上很多底層的服務(wù)模塊金字塔都已經(jīng)為客戶開發(fā)好了,客戶在金字塔上只需要關(guān)心如何用C++編寫策略就可以,極大的加快了投資者的開發(fā)周期,并節(jié)省了大量的研發(fā)費用。
如何在金字塔上進行C++策略的開發(fā)呢
有關(guān)插件接口更詳細的描述,在金字塔的安裝目錄AddinDemo.rar 壓縮文件內(nèi)包含了完整插件接口的接口示例以及在.H頭文件里的接口使用信息描述。
客戶也可以點擊 http://www.weistock.com/download/addindemo.rar 下載到本地進行學(xué)習(xí)。
最后說明一點,金字塔的進程是不允許被調(diào)試加載的,這對C++開發(fā)者來說增加調(diào)試難度,但是可以通過附加進程調(diào)試的方法來解決問題,比如VS2008等都有很好的這種支持,詳情請GOOGLE搜索。(http://www.tumamayizhan.com )
其中主要的部分都在.H頭文件中,我們這里貼出來給大家
[此貼子已經(jīng)被作者于2012-5-13 9:28:36編輯過]
#if !defined(__ADDININTERFACE_H__)
#define __ADDININTERFACE_H__
#define STKLABEL_LEN 10 // 股號數(shù)據(jù)長度,國內(nèi)市場股號編碼兼容錢龍
#define STKNAME_LEN 32 // 股名長度
#pragma pack (push ,1)
/* time_t在金字塔的定義是32位,對于使用VS2005等高版本Visual C++,time_t是64位,直接使用將導(dǎo)致數(shù)據(jù)結(jié)構(gòu)紊亂
請在stdafx.h文件里加上如下這個定義即可。#define _USE_32BIT_TIME_T */
//動態(tài)行情數(shù)據(jù)結(jié)構(gòu)
typedef struct
{
time_t m_time; // 成交時間
float m_fLastClose; // 昨收
float m_fOpen; // 今開
float m_fHigh; // 最高
float m_fLow; // 最低
float m_fNewPrice; // 最新
float m_fOI; //open interest
float m_fLastOI;
float m_fVolume; // 成交量
float m_fAmount; // 成交額
float m_fLastOpen; //前開
float m_fLastHigh; //前高
float m_fLastLow; //前底
float m_fBuyPrice[3]; // 申買價1,2,3
float m_fBuyVolume[3]; // 申買量1,2,3
float m_fSellPrice[3]; // 申賣價1,2,3
float m_fSellVolume[3]; // 申賣量1,2,3
float m_fBuyPrice4; // 申買價4
float m_fBuyVolume4; // 申買量4
float m_fSellPrice4; // 申賣價4
float m_fSellVolume4; // 申賣量4
float m_fBuyPrice5; // 申買價5
float m_fBuyVolume5; // 申買量5
float m_fSellPrice5; // 申賣價5
float m_fSellVolume5; // 申賣量5
float m_fVolumeNow; //現(xiàn)手
float m_fBuyVol; //外盤量
float m_fSellVol; //內(nèi)盤量
char m_szName[32]; // 股票名稱,以'\0'結(jié)尾
char m_szNamePY[16];
char m_szLabel[10]; // 股票代碼,以'\0'結(jié)尾
float m_f5DayAverage; //5日均量
float m_fNext5DayVol; //下一個5日均量
time_t m_timeHardenSpeed; //漲速前比較時間
float m_fHardenSpeed; //漲速用變量,記錄前5分鐘價格
WORD m_wMarket; //品種所屬市場比如上海'HS',深圳'ZS'
}REPORT_STRUCT;
//日線數(shù)據(jù)
typedef struct
{
DATE m_timeDate; //UCT
float m_fOpen; //開盤
float m_fHigh; //最高
float m_fLow; //最低
float m_fClose; //收盤
float m_fOI; //open interest
float m_fVolume; //量
float m_fAmount; //額
WORD m_wAdvance; //漲數(shù),僅大盤有效
WORD m_wDecline; //跌數(shù),僅大盤有效
WORD m_wQT; //成交筆數(shù)
float m_fOpenVolume; //開盤量
float m_fOpenAmount; //開盤額
}HISTORY_STRUCTEx;
//分筆成交數(shù)據(jù)結(jié)構(gòu)
typedef struct{
time_t m_time; // UCT
float m_fNewPrice;
float m_fOI; //open interest
float m_fVolume;
float m_fAmount;
unsigned m_bOrder : 1; //成交方向 1買盤 0賣盤
}SUBSECTION_REPORT;
//除權(quán)信息
typedef struct
{
DATE m_timeDate; // UCT
double m_fGive; // 每10股送
double m_fPei; // 每10股配
float m_fGiveStock; // 實際送股
float m_fPeiStock; // 實際配股
float m_fPeiPrice; // 配股價,僅當(dāng) m_fPei!=0.0f 時有效
float m_fProfit; // 每10股紅利
float m_fZhiJieStock; // 直接上市(萬股)
}POWER_STRUCTEx;
typedef struct {
WORD m_nMarket;
char m_szLable[10];
}BLOCK_STRUCT;
////////////////////////////////////////////////////
//分析周期
////////////////////////////////////////////////////
enum CYC_DATA_TYPE
{
MIN1_DATA=0, //1分鐘線
MIN5_DATA, //5分鐘線
MIN15_DATA, //15分鐘線
MIN30_DATA, //30分鐘線
MIN60_DATA, //60分鐘線
DAY_DATA, //日線
WEEK_DATA, //周線
MONTH_DATA, //月線
YEAR_DATA, //年線
MULTIDAY_DATA, //多日線
TICK_DATA, //分筆成交
MULTIHOUR_DATA, //多小時線
MULTISEC_DATA, //多秒線
MULTIMIN_DATA, //多分鐘線
QUARTER_DATA, //季度線
SEMIYEAR_DATA, //半年線
SOLARTERM_DATA, //節(jié)氣線
MIN3_DATA, //3分鐘線
MIN10_DATA, //10分鐘線
MULTITICK_DATA //多筆
};
typedef struct
{
//////////////////////////////////////////////////////////////////////////
//調(diào)用數(shù)據(jù)信息
DWORD m_dwVersion; //調(diào)用軟件版本(V2.10 : 0x210)
DWORD m_dwSerial; //調(diào)用軟件序列號
char m_szLabel[10]; //調(diào)用的品種代碼
WORD m_wMarket; //調(diào)用的品種市場,比如上海為'HS'
CYC_DATA_TYPE m_dataType; //調(diào)用數(shù)據(jù)類型
BOOL m_bIsPow; //是否復(fù)權(quán)
int m_nPowType; //復(fù)權(quán)類別 0向前復(fù)權(quán) 1向后復(fù)權(quán)
BOOL m_bIsReversePrice; //是否反轉(zhuǎn)價格
//////////////////////////////////////////////////////////////////////////
//以下為返回的數(shù)據(jù)信息
int m_nNumData; //數(shù)據(jù)數(shù)量
HISTORY_STRUCTEx * m_pMainData; //主數(shù)據(jù)緩沖區(qū)
SUBSECTION_REPORT * m_pSubsection; //當(dāng)日分筆成交明細
int m_nNumSubData; //分筆數(shù)據(jù)量
REPORT_STRUCT* m_pReport; //動態(tài)實時行情結(jié)構(gòu)
float* m_pfFinData; //財務(wù)數(shù)據(jù)
POWER_STRUCTEx* m_pSplitData; //除權(quán)數(shù)據(jù)
int m_nNumSplitData; //除權(quán)次數(shù)
}PCALCINFO;
typedef struct tagRCV_REPORT_STRUCTExV3
{
WORD m_cbSize; // 結(jié)構(gòu)大小
time_t m_time; // 成交時間
WORD m_wMarket; // 股票市場類型
char m_szLabel[STKLABEL_LEN]; // 股票代碼,以'\0'結(jié)尾
char m_szName[STKNAME_LEN]; // 股票名稱,以'\0'結(jié)尾
float m_fLastClose; // 昨收
float m_fOpen; // 今開
float m_fHigh; // 最高
float m_fLow; // 最低
float m_fNewPrice; // 最新
float m_fVolume; // 成交量
float m_fAmount; // 成交額
float m_fBuyPrice[3]; // 申買價1,2,3
float m_fBuyVolume[3]; // 申買量1,2,3
float m_fSellPrice[3]; // 申賣價1,2,3
float m_fSellVolume[3]; // 申賣量1,2,3
float m_fBuyPrice4; // 申買價4
float m_fBuyVolume4; // 申買量4
float m_fSellPrice4; // 申賣價4
float m_fSellVolume4; // 申賣量4
float m_fBuyPrice5; // 申買價5
float m_fBuyVolume5; // 申買量5
float m_fSellPrice5; // 申賣價5
float m_fSellVolume5; // 申賣量5
} RCV_REPORT_STRUCTExV3;
typedef struct {
BLOCK_STRUCT m_stStock; //單品種合約
BYTE m_nBuySell; //0 買入方向 1賣出方向
WORD m_nVol; //下單數(shù)量
}TAOLI_INFO;
//成交回報消息結(jié)構(gòu) cxh99.com
typedef struct {
long m_nOrderID; //訂單ID
CString m_strStatus; //狀態(tài)(詳見.CPP文件描述)
long m_nFilled; //已成交數(shù)量
long m_nRemaining; //剩余數(shù)量
float m_fPrice; //成交價格
CString m_strCode; //品種
CString m_strMarket; //市場
BYTE m_nKaiping; //開平倉 0開倉 1平倉
BYTE m_nType; //訂單類型 0限價 1市價 2停損 3限價停損
BYTE m_nAspect; //買賣方向 0買入 1賣出
CString m_strAccount; //操作賬戶
BYTE m_nAccountType; //賬戶類型 0IB 1CTP 2金仕達
}BARGAIN_NOTIFY_KSI;
//////////////////////////////////////////////////////////////////////////
//消息包結(jié)構(gòu) www.tumamayizhan.com
//////////////////////////////////////////////////////////////////////////
typedef struct {
RCV_REPORT_STRUCTExV3 * m_pData;
int m_nDataCount;
}REPORT_UPDATE1;
typedef struct {
RCV_REPORT_STRUCTExQH * m_pData;
int m_nDataCount;
}REPORT_UPDATE2;
#pragma pack (pop)
//主程序暴露給插件的接口
interface IMainFramework
{
public:
IMainFramework(){};
virtual ~IMainFramework(){};
//取得主窗口句柄
virtual HWND GetMainWindow() = 0;
//取主程序版本號
virtual DWORD GetVersion() = 0;
//取指定品種數(shù)據(jù),成功取得數(shù)據(jù)返回TRUE,否則為FALSE
virtual BOOL GetDataInfo(PCALCINFO * pInfo) = 0;
//取指定品種的動態(tài)及時報表
virtual REPORT_STRUCT * GetReportData(char * szLabel, WORD wMarket) = 0;
//取指定分類板塊的品種數(shù)組
//szName為分類或者板塊名稱,如"上海A股"等,nMode為類別,0市場分組,1分類板塊,2系統(tǒng)板塊(品種欄對應(yīng))
virtual void GetReportData(CArray<BLOCK_STRUCT, BLOCK_STRUCT&> &arBlcok, char * szName, int nMode) = 0;
//注冊品種到數(shù)據(jù)通知,例如RegReportNotify("CL05",'MN');將合約注冊到數(shù)據(jù)通知,當(dāng)CL05有最新數(shù)據(jù)到達時觸發(fā)ReportNotify事件。
virtual BOOL RegReportNotify(char * szLabel, WORD wMarket) = 0;
//取消品種數(shù)據(jù)注冊,例如UnRegReportNotify("CL05",'MN'),CL05數(shù)據(jù)到達時不會再收到通知。
virtual void UnRegReportNotify(char * szLabel, WORD wMarket) = 0;
//下單委托交易
// nType 下單類型 0限價 1市價 2停損 3限價停損
// fLmtPrice 委托限價
virtual long PlaceOrder(BYTE nType, float fLmtPrice, float fStopLmtPrice, UINT nVol, BYTE nAspact, LPCSTR lpszLabel, WORD wMarket,
BOOL bMustOK, LPCSTR lpszAccount, BYTE nKaiPing, BYTE nTouBao, BYTE bOrderQueue) = 0;
//撤單 cxh99.com
virtual void OrderCancel(long nOrderID, BYTE bOrderQueue) = 0;
//注冊WINDOWS窗口消息,金字塔將以事件方式通知各種
virtual void RegisterMsg(HWND hMsgWnd, DWORD dwMsg) = 0;
//得到套利合約信息
//返回TRUE表示成功 ,返回套利指數(shù)內(nèi)定義的套利品種信息
virtual BOOL GetTaoliInfo(char * szTaoliLabel, CArray<TAOLI_INFO,TAOLI_INFO&> &m_arTaoliInfo) = 0;
//得到IB品種持倉數(shù)量
virtual int GetHolding() = 0;
//得到國內(nèi)期貨的持倉數(shù)量
virtual int GetHolding2(char * szAccount) = 0;
//到所有IB帳戶當(dāng)前有效的未成交合約品種數(shù)量
virtual int GetOrderNum() = 0;
//得到所有國內(nèi)期貨當(dāng)前有效的未成交合約品種數(shù)量
virtual int GetOrderNum2() = 0;
//得到IB帳戶的成交明細數(shù)量
virtual int GetTradeCount() = 0;
//得到指定帳戶的國內(nèi)期貨帳戶的成交明細數(shù)量
virtual int GetTradeCount2(CString Account) = 0;
//當(dāng)前已經(jīng)登陸IB顧問帳戶子帳戶數(shù)量,若登陸的是IB普通帳戶此屬性為1
virtual int GetIBACCount() = 0;
//當(dāng)前已經(jīng)登陸國內(nèi)期貨帳戶數(shù)量(包含無效登陸等情況在內(nèi)的)
virtual int GetCTPAcCount() = 0;
//得到當(dāng)前默認(rèn)帳戶信息
virtual VARIANT GetAccount(short nType) = 0;
//得到指定的國內(nèi)期貨帳戶信息
virtual VARIANT GetAccount2(short nType, char * szAccount) = 0;
/*取指定索引的持倉IB合約信息
Index 輸入?yún)?shù),指定基于0索引的持倉和約信息,持倉和約總量參見 Holding 屬性。
Hold 輸出參數(shù),該該持倉品種持倉量,若空倉返回負(fù)數(shù)
MktPrice 輸出參數(shù),該持倉品種市價
AvgPrice 輸出參數(shù),該持倉品種均價
MktValue 輸出參數(shù),該持倉品種市值
AgeCost 輸出參數(shù),該持倉品種成本
PNL 輸出參數(shù),該持倉品種浮動盈虧
Code 輸出參數(shù),該持倉品種代碼
Market 輸出參數(shù),該持倉品種市場
返回值: 成功返回1,失敗返回0 */
virtual BOOL HoldingInfo(UINT Index, int &Hold, double &MktPrice, double &AvgPrice, double &MktValue, double &AgeCost, double &PNL, CString &Code, WORD &Market) = 0;
/*取指定索引的指定CTP帳戶的合約持倉信息
Index 輸入?yún)?shù),指定基于0索引的持倉和約信息,持倉和約總量參見 Holding2 屬性。
BuyHoding 輸出參數(shù),該該持倉品種買入持倉總量
BuyCost 輸出參數(shù),該持倉品種持倉成本
BuyTodayHoding 輸出參數(shù),該持倉品種今買持總量
SellHoding 輸出參數(shù),該持倉品種賣出持倉總量
SellCost 輸出參數(shù),該持倉品種賣出持倉成本
SellTodayHoding 輸出參數(shù),該持倉品種的今賣出持倉總量
PNL 輸出參數(shù),該持倉品種浮動盈虧
UseMargin 輸出參數(shù),該持倉品種的保證金占用
Code 輸出參數(shù),該持倉品種代碼
Market 輸出參數(shù),該持倉品種市場
Account 輸入?yún)?shù),可缺省,登陸CTP的帳戶名稱,若不填寫則表示當(dāng)前默認(rèn)的帳戶
返回值: 成功返回1,失敗返回0 */
virtual BOOL HoldingInfo2(UINT Index, int &BuyHoding, double &BuyCost, int &BuyTodayHoding, int &SellHoding, double &SellCost, int &SellTodayHoding, double &PNL, double &UseMargin, CString &Code, WORD &Market, CString Account) = 0;
/*
* 取指定基于0索引的未成交IB合約信息
Index 輸入?yún)?shù),指定基于0索引的持倉和約信息,持倉和約總量參見 OrderNum 屬性。
OrderID 輸出參數(shù), 未成交訂單ID
ConSign 輸出參數(shù),本次委托數(shù)量
Filled 輸出參數(shù),已成交數(shù)量
Remaining 輸出參數(shù),未成交數(shù)量
Action 輸出參數(shù),動作類型 0買入 1賣出
OrderType 輸出參數(shù),訂單類型 0限價 1市價 2停損 3市價停損
LmtPrice 輸出參數(shù),當(dāng)OrderType等于0時為限價,為3時為停損限價
auxPrice 輸出參數(shù),停損價格
Account 輸出參數(shù),帳戶信息
Code 輸出參數(shù),該持倉品種代碼
Market 輸出參數(shù),該持倉品種市場
返回值: 成功返回1,失敗返回0
*/
virtual BOOL OrderInfo(UINT Index, int &OrderID, int &ConSign, int &Filled, int &Remaining, int &Action, int &OrderType, double &LmtPrice, double &auxPrice, CString &Account, CString &Code, WORD &Market) = 0;
/*取指定基于0索引的未成交CTP合約信息
Index 輸入?yún)?shù),指定基于0索引的持倉和約信息,持倉和約總量參見 OrderNum2 屬性。
OrderID 輸出參數(shù), 未成交訂單ID
ConSign 輸出參數(shù),本次委托數(shù)量
Filled 輸出參數(shù),已成交數(shù)量
Remaining 輸出參數(shù),未成交數(shù)量
Action 輸出參數(shù),動作類型 0買入 1賣出
OrderType 輸出參數(shù),訂單類型 0限價 1市價 2停損 3市價停損
LmtPrice 輸出參數(shù),當(dāng)OrderType等于0時為限價,為3時為停損限價
Account 輸出參數(shù),帳戶信息
Kaiping 輸出參數(shù),開平倉類型 0開倉 1平倉
Code 輸出參數(shù),該持倉品種代碼
Market 輸出參數(shù),該持倉品種市場
返回值: 成功返回1,失敗返回0 */
virtual BOOL OrderInfo2(UINT Index, int &OrderID, int &ConSign, int &Filled, int &Remaining, int &Action, int &OrderType, double &LmtPrice, CString &Account, int &Kaiping, CString &Code, WORD &Market) = 0;
/*獲取指定品種的合約種類 www.tumamayizhan.com
Code 輸入?yún)?shù),指定的品種代碼
Market 輸入?yún)?shù),指定的品種市場
返回值:是可以交易的國內(nèi)期貨接口品種返回1,IB接口返回0*/
virtual int StockType(char * szCode, WORD wMarket) = 0;
/*取指定品種的和約信息
Code 輸入?yún)?shù),指定的品種代碼
Market 輸入?yún)?shù),指定的品種市場
Multipliter 輸出參數(shù),該品種的乘數(shù)/單位
MinTick 輸出參數(shù),該品種的最小變動單位
ShortPercent 輸出參數(shù),該品種的空頭保證金
LongPercent 輸出參數(shù),該品種的多頭保證金
返回值:成功返回1否則返回0
*/
virtual int GetContract(char *szCode, WORD wMarket, float &Multipliter, float &MinTick, float &ShortPercent, float &LongPercent) = 0;
/*計算指定品種的本次交易手續(xù)費用。請用戶在交易費率設(shè)置上預(yù)先設(shè)置好不同品種的各種交易費率情況,這樣才能通過此方法得到正確的結(jié)果。
Code 指定的品種代碼
Market 指定的品種市場
lmtPrice 指定的限價
Volume 委托數(shù)量
Type 成交方向 0買入 1賣出
返回值: 返回計算后的手續(xù)費用*/
virtual float GetChargeByNum(char * szCode, WORD wMarket, float lmtPrice, int Volume, int Type) = 0;
/*取指定基于0索引序號的IB帳戶成交明細
Index 輸入?yún)?shù),基于0索引的成交明細
Date 輸出參數(shù),成交時間
Code 輸出參數(shù),品種代碼
Market 輸出參數(shù),品種市場
OrderType 輸出參數(shù),成交單類型,0限價 1市價 2停損 3限價停損
Action 輸出參數(shù),成交方向 0買入 1賣出
Price 輸出參數(shù),成交價格
Volume 輸出參數(shù),成交量
Account 輸出參數(shù),成交帳戶
返回值: 成功返回1,失敗返回0*/
virtual int TradeDetalied(int Index, DATE &Date, CString &Code, WORD &Market, int &OrderType, int &Action, float &Price, int &Volume, CString &Account) = 0;
/*取指定基于0索引序號的CTP帳戶成交明細
Index 輸入?yún)?shù),基于0索引的成交明細
Date 輸出參數(shù),成交時間
Code 輸出參數(shù),品種代碼
Market 輸出參數(shù),品種市場
OrderType 輸出參數(shù),成交單類型,0限價 1市價 2停損 3限價停損
Action 輸出參數(shù),成交方向 0買入 1賣出
Price 輸出參數(shù),成交價格
Volume 輸出參數(shù),成交量
Kaiping 輸出參數(shù),開平倉類型,0開倉 1平倉
Account 輸入?yún)?shù),成交帳戶,可省略,若省略則表示當(dāng)前默認(rèn)激活帳戶
返回值: 成功返回1,失敗返回0*/
virtual int TradeDetalied2(int Index, DATE &Date, CString &Code, WORD &Market, int &OrderType, int &Action, float &Price, int &Volume, int &Kaiping, CString &Account) = 0;
//得到指定基于0索引的IB帳戶名稱,例如IBAccountName(0)表示取第一個登陸的IB帳戶
virtual CString GetIBAccountName(int nIndex) = 0;
//得到指定基于0索引的CTP帳戶名稱(包含登陸未成功的),例如 CTPAccountName(0)表示取第一個登陸的CTP用戶名稱
virtual CString GetCTPAccountName(int nIndex) = 0;
//判斷指定帳號是否是當(dāng)前已登錄有效帳號,例如 Order.IsAccount("351579"),如果該賬戶已登錄則返回1,否則返回0
virtual int IsAccount(CString strAccount) = 0;
};
#endif
最后請大家注意的就是金字塔下C++插件的擴展名是 *.ADI 文件名,實際上就是DLL程序改了擴展名放到金字塔的工作目錄下,這么設(shè)計主要是為了與金字塔已有的DLL模塊沖突,放倒金字塔工作目錄后,重新啟動金字塔軟件,就會在 工具菜單-》擴展 里看到我們所開發(fā)出來的C++插件了。