欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 基于金字塔平台下开发C++交易策略

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有34970人关注过本帖树形打印复制链接

主题:基于金字塔平台下开发C++交易策略

帅哥哟,离线,有人找我吗?
admin
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:7302 积分:32559 威望:1000 精华:45 注册:2003/12/30 16:34:32
基于金字塔平台下开发C++交易策略  发帖心情 Post By:2012/5/7 23:47:21 [只看该作者]

 

   使用金字塔C++ API开发策略的优势

 

    我们很多专业投资者及一些投资机构都喜欢使用C++直接编写交易策略,C++语言无论是灵活性和安全性都是要比传统的一般意义上的脚本语言要强大许多,这也是大家所普遍采用的一个主要理由。但是直接使用C++开发需要3个主要组件,主要包括:

1、历史行情数据的管理和接收

2、交易策略的评估与实现

3、下单交易具体实施

实际上上述3点其实已经包含了一个程序化交易软件所具有的主要特点了,如果是全部都要重新开发一套这样的产品,我们的投资公司最后都要变成名副其实软件公司了,将耗费很大的精力与财力来组织和管理整个软件开发团队。

如果使用金字塔平台进行C++的策略编写,那么上述的多个难点就可以很好的得到解决,主要如下:

1、金字塔为C++接口提供了丰富完善的历史数据,包括盘中即时数据,1分,5分,15,30,日线等等多大十几种周期数据,这些数据都是金字塔软件统一管理,模型的开发者不必再来操心历史数据如何管理。

2、金字塔的所有即时行情报价数据均为全推数据,包含了所有沪深股市的所有股票即时报价,所有期货、期权、外盘品种的所有数据报价,这么大量的全推数据全都由金字塔一个平台来为你完成。

3、我们的交易策略在前期模型阶段可以利用金字塔平台PEL语言快速的进行评估,评估结束后,再集中精力来变成C++的具体交易算法,节省了大量的时间。

4、可以利用金字塔平台进行全球市场交易;虽然现在CTP平台开放了交易接口,但毕竟是只有这一个接口,如果交易者要对其他的交易接口例如金仕达、恒生接口等等时,都必须要去重新开发接口,同样是要花费很大的精力。但如果使用金字塔平台,开发者就不必再去关心不同的交易接口到底有哪些不同,我们都已经为客户封装好了统一的交易接口规范,你只要交易策略编写完毕后,就可以在金字塔所支持的国内期货公司,证券公司,外盘期货外汇等等平台上进行交易。

综上所述,实际上很多底层的服务模块金字塔都已经为客户开发好了,客户在金字塔上只需要关心如何用C++编写策略就可以,极大的加快了投资者的开发周期,并节省了大量的研发费用。

 

金字塔的C++ API与主程序的组织结构

    
图片点击可在新窗口打开查看此主题相关图片如下:逻辑功能图.jpg
图片点击可在新窗口打开查看

 

金字塔的接口范例下载与简要说明

   

     使用本教程前,请用户至 http://www.weistock.com/download/addindemo.rar 下载范例DEMO,本教程的所有说明代码均以该范例模板为基础,同时也建议客户直接在本范例代码框架下开发您的策略。另外金字塔的安装目录AddinDemo.rar 压缩文件也包含了此范例代码。

     软件所有暴露的接口均封装在IMainFramework接口类中,该接口类通过软件启动后进行初始化,范例模板为标准的DLL格式架构,为了避免与金字塔的系统DLL冲突,编译后的扩展名必须为 *.ADI,编译完毕后放到金字塔的工作主目录下,通过工具菜单->扩展 子菜单项中能看到您的插件。范例中的插件名称为“下撤单演示插件”你可以通过暴露的 GetAddinName 全局API接口来修改它。

     最后提醒注意金字塔的版本,如果是x64模式的金字塔版本,请将你的DLL也编译成64位版本才可以使用。

     范例界面截图:

 
图片点击可在新窗口打开查看此主题相关图片如下:qq截图20160718205359.jpg
图片点击可在新窗口打开查看

 

API接口报价行情订阅

    

//注册沪铜行情数据
 g_pMainFormework->RegReportNotify("CU00",'QS');

 //注册上证指数行情数据
 g_pMainFormework->RegReportNotify("000001",'HS');

 

范例的第一个参数合约代码为金字塔合约代码,如果不熟悉可以在动态牌上查看,第二个参数为市场标识,'QS'上海期货市场,市场代码表示是一个WROD类型的,字符显示是 "SH", 到了WORD 就为 'HS'
  具体每个市场的代码在工具菜单->市场与板块中,查看市场的代号,设置和进行管理.

 

报价行情变化通知

 

金字塔的所有推送的事件(行情报价订阅,订单状态)变化通知都是在 范例中的 CMainWindowDlg::OnNotifyUpdate 中实现的,其中订阅行情报价代码段在下面范例中:

LRESULT CMainWindowDlg::OnNotifyUpdate(WPARAM w,LPARAM l)
{
 if(w == 2)
 {
  //注册品种报价变化通知
  ReportUpdate(l);
 }

}

当w参数为2时,l参数为REPORT_STRUCT结构体的数据结构,REPORT_STRUCT数据结构体见代码范例AddinInterface.h头文件描述。

 

获取指定市场全部合约报价

 

考虑到效率问题,金字塔对订阅的品种数量是有限制的,具体版本如下:

免费普通版3个 标准版10个 专业版及其以上版本20个

既然金字塔数据是全推数据,那么我们怎么能盘中及时得到全部品种的报价呢?答案当然是肯定可以的了,我们在API中提供了GetReportCount(WORD wMarket)函数,通过该函数我们可以得到指定市场的品种数量,然后通过GetReportData(WORD wMarket, DWORD dwIndex, char * szCode)函数遍历整个市场的品种合约,最后通过REPORT_STRUCT * GetReportData(char * szLabel, WORD wMarket)函数来获取遍历合约的行情报价数据。

 

历史数据的获取

 

历史数据接口函数为GetDataInfo(PCALCINFO * pInfo),其中PCALCINFO 结构是描述获取数据的信息,详细介绍请参考代码范例AddinInterface.h头文件描述。

部分范例如下:

//读取上海市场的600000日线数据范例
 PCALCINFO stData = {0};
 stData.m_dataType = DAY_DATA;//日线
 stData.m_bIsPow = 1; //是否复权
 stData.m_wMarket = 'HS';
 strcpy(stData.m_szLabel,"600000"); //读取600000 浦发银行数据
 
 if(g_pMainFormework->GetDataInfo(&stData))
 {
  CString strText;
  for(int i = 0; i < stData.m_nNumData; i++)
  {
   strText.Format("数据:%f",stData.m_pMainData[i].m_fClose);
   //通过日志记录文件将数据写盘
   LOG_DEBUG_INFO( "c:\\MyData.txt", "数据 %s", strText);
  }

  strText.Format("共取到%d个数据",stData.m_nNumData);
  AfxMessageBox(strText);
 }

 

 

 下单委托指令

 

通过 PlaceOrder 接口函数即可完成向金字塔主程序发送下单指令的动作,金字塔支持的所有期货、证券公司柜台只通过这一个函数下委托指令就可以了,介于该函数参数较多,建议直接参考AddinInterface.h头文件描述。

 

订单状态推送回报

 

金字塔的所有推送的事件(行情报价订阅,订单状态)变化通知都是在 范例中的 CMainWindowDlg::OnNotifyUpdate 中实现的,其中订单状态推送回报代码段在下面范例中:

 

LRESULT CMainWindowDlg::OnNotifyUpdate(WPARAM w,LPARAM l)
{

if(w == 3)
 {
  //订单状态变化通知
  BARGAIN_NOTIFY_KSI * pKsi = (BARGAIN_NOTIFY_KSI*)l;
  OrderStatus(pKsi);
 }
 else if(w == 4)
 {
  BARGAIN_NOTIFY_KSI * pKsi = (BARGAIN_NOTIFY_KSI*)l;
  if(strcmp(pKsi->m_szStatus,"Connected") == 0)
  {
   //账户已经连接
  }
  else if(strcmp(pKsi->m_szStatus,"Disconnected") == 0)
  {
   //账户断开连接
  }
 }
 return 0;
}

 

当w = 3时为订单的状态消息推送,当w=4时是交易账户的状态消息推送,其中l参数为BARGAIN_NOTIFY_KSI结构中的m_szStatus字段记录了订单和账户的状态,主要描述如下:

"Cancelled"  表示订单已经撤销

"Submitted"和"PreSubmitted"  表示订单已经提交,当只成交一部分尚未完全成交时也会出现此事件,此时已成交数量在Filled参数中显示

"Filled"    表示本地订单已经全部成交

"Tradeing"  每笔成交回报,此时Filled是本次成交数量,Remaining将始终为0

"Inactive"  表示本次委托无效,比如价格超过允许范围,委托数量超出范围等等

 

策略编写调试与跟踪

 

最后说明一点,金字塔的进程是不允许被调试加载的,这对C++开发者来说增加调试难度,因为我们没有办法对自己编写的插件程序设置断点和单步跟踪,金字塔为此提供了一个类,可以很方便的将运行状态记录到日志文件,然后用户便可以通过记录的日志分析程序的变量变化及工作流程。

范例如下:

//记录日志到文件
 LOG_DEBUG_INFO( "c:\\MyData.txt", "[回报] 挂单%d, 状态 %s", pKsi->m_nOrderID, pKsi->m_szStatus);

上述代码大家应该不难理解,第一个参数是文本文件的保存路径,第二个参数为字符串格式,与CString::Format用法一致。

 

建议客户:日志记录虽然可以解决运行您的运行情况,但是毕竟调试时还是不方便的,建议客户在研发的初级阶段,在自行的EXE工程中测试和调试你的代码程序,待自行调试完毕后,再将代码移植到金字塔的API DLL工程中。

 

API接口更多功能信息

 

有关插件接口更详细的描述,在金字塔的安装目录AddinDemo.rar 压缩文件或者用户到文章之前提到下载地址下载范例的内包含了完整插件接口的接口示例以及在.H头文件里的接口使用信息描述。

 

其他参考资料

 

利用金字塔的VBA与C++的混合编程来实现复杂的二次开发及交易功能

http://www.weistock.com/bbs/dispbbs.asp?boardid=5&Id=11505

 

 

 

[此贴子已经被作者于2016-9-12 10:50:02编辑过]

[本帖被加为精华]
 回到顶部
帅哥哟,离线,有人找我吗?
admin
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:7302 积分:32559 威望:1000 精华:45 注册:2003/12/30 16:34:32
  发帖心情 Post By:2012/5/7 23:48:08 [只看该作者]

//涉及到结构描述

 

#define  STKLABEL_LEN   10   // 股号数据长度,国内市场股号编码兼容钱龙
#define  STKNAME_LEN    32   // 股名长度

#pragma pack (push ,1)

//动态行情数据结构
typedef struct 
{
 DWORD m_time;          // 成交时间(time_t)
 
 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;        //现手
 float m_fBuyVol;         //外盘量
 float m_fSellVol;         //内盘量
 char m_szName[32];        // 股票名称,以'\0'结尾
 char m_szNamePY[16];
 char m_szLabel[10];        // 股票代码,以'\0'结尾
 float   m_f5DayAverage;        //5日均量
 float m_fNext5DayVol;        //下一个5日均量
 DWORD m_timeHardenSpeed;       //涨速前比较时间
 float m_fHardenSpeed;        //涨速用变量,记录前5分钟价格
 WORD m_wMarket;         //品种所属市场比如上海'HS',深圳'ZS'
}REPORT_STRUCT;

//扩展动态行情数据结构
typedef struct
{
 DWORD 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;        //现手
 float m_fBuyVol;         //外盘量
 float m_fSellVol;         //内盘量
 char m_szName[32];      // 股票名称,以'\0'结尾
 char m_szNamePY[16];
 char m_szLabel[10];     // 股票代码,以'\0'结尾
 float   m_f5DayAverage;        //5日均量
 float m_fNext5DayVol;        //下一个5日均量
 DWORD m_timeHardenSpeed;       //涨速前比较时间
 float m_fHardenSpeed;        //涨速用变量,记录前5分钟价格
 WORD m_wMarket;
 
 float m_fBuyAmount;        //外盘额
 float m_fSellAmount;        //内盘额
 float m_fPoweru;         //买卖劲道
 float   m_fPowerd;
 WORD    m_nBuyBi;         //主买笔数
 WORD    m_nSellBi;
 float m_fAmountNow;        //现额
 WORD m_wBorNum;         //成交买卖单数
 WORD    m_wSorNum;
 BYTE m_nOrnumType;        //成交买卖方向 1主买 0主卖
 WORD m_wTickUp0;   //上跳次数
 WORD m_wTickDown0;  //下跳次数
 WORD m_wTickEqual0;
 float m_fTickUa0;   //上跳总额
 float m_fTickDa0;
 float m_fTickEa0;
 WORD m_wTick1;   //大单次数
 WORD m_wTickUp1;   //大单上跳次数
 WORD m_wTickDown1; 
 WORD m_wTickEqual1;
 float m_fTickA1;   //大单跳动总额
 float m_fTickUa1;  
 float m_fTickDa1;
 float m_fTickEa1;
 WORD m_wTick2;   //小单次数
 WORD m_wTickUp2;  
 WORD m_wTickDown2; 
 WORD m_wTickEqual2;
 float m_fTickA2;  
 float m_fTickUa2;  
 float m_fTickDa2;
 float m_fTickEa2;
 WORD m_wTick3;   //权重股次数
 WORD m_wTickUp3;  
 WORD m_wTickDown3; 
 WORD m_wTickEqual3;
 float m_fTickA3;  
 float m_fTickUa3;  
 float m_fTickDa3;
 float m_fTickEa3;
 WORD m_wTick4;   //巨单次数
 WORD m_wTickUp4;  
 WORD m_wTickDown4; 
 WORD m_wTickEqual4;
 float m_fTickA4;  
 float m_fTickUa4;  
 float m_fTickDa4;
 float m_fTickEa4;
 WORD m_wTick5;   //中单次数
 WORD m_wTickUp5;  
 WORD m_wTickDown5; 
 WORD m_wTickEqual5;
 float m_fTickA5;  
 float m_fTickUa5;  
 float m_fTickDa5;
 float m_fTickEa5;
 WORD m_wTick6;   //散单次数
 WORD m_wTickUp6;  
 WORD m_wTickDown6; 
 WORD m_wTickEqual6;
 float m_fTickA6;  
 float m_fTickUa6;  
 float m_fTickDa6;
 float m_fTickEa6;
 float m_fPrvTickPrice;
 float m_fPrvTickVomume;
 float m_fPrvTickAmount;
 float m_fPrvPrice;  //上一笔价格
 float m_fPrvVomume;  //上一笔量
 float m_fPrvAmount;  //上一笔额
 
 DWORD m_timeCalcZhangSu;   //上一个计算点
 DWORD m_timeCalcTick;     
 
 void * m_fOther;
 unsigned m_bReciveData : 1; //第一次接收新数据状态 0未接收 1已接收
 unsigned m_bVirtualData : 1; //当前数据是否是集合竞价的数据
 unsigned m_bIsBuy    : 1;         //是否为外盘
 unsigned m_bVirtualData2 : 1;
 unsigned m_bReloadPow : 1; //指示是否下次重新装载除权数据
 unsigned m_bIsMainInstrument : 1;//是否主力和约
 unsigned m_bBufopen : 1;   ////当前缓冲区是否被打开过
 unsigned m_nReserve5 : 1;
 unsigned m_nReserve6 : 1;
 void *  m_pMainStock;   //主力合约品种
 float m_fJieSuan;    //当前结算
 float m_fLastJieSuan;   //昨计算
 float m_upperLimitPrice;       // 涨停板
 float m_lowerLimitPrice;       // 跌停板
 
 float m_fBuyPrice6;        // 申买价6
 float m_fBuyVolume6;        // 申买量6
 float m_fSellPrice6;        // 申卖价6
 float m_fSellVolume6;        // 申卖量6
 
 float m_fBuyPrice7;        // 申买价7
 float m_fBuyVolume7;        // 申买量7
 float m_fSellPrice7;        // 申卖价7
 float m_fSellVolume7;        // 申卖量7
 
 float m_fBuyPrice8;        // 申买价8
 float m_fBuyVolume8;        // 申买量8
 float m_fSellPrice8;        // 申卖价8
 float m_fSellVolume8;        // 申卖量8
 
 float m_fBuyPrice9;        // 申买价9
 float m_fBuyVolume9;        // 申买量9
 float m_fSellPrice9;        // 申卖价9
 float m_fSellVolume9;        // 申卖量9
 
 float m_fBuyPrice10;        // 申买价10
 float m_fBuyVolume10;        // 申买量10
 float m_fSellPrice10;        // 申卖价10
 float m_fSellVolume10;       // 申卖量10
 
 long m_f1VirSub;         //主行情竞价分笔
 long m_f1size;         //主行情分笔数量,m_ptrSubBlcok=NULL表示只是记录不是真实缓冲区
 WORD m_f2size;         //竞价数量
 void * m_fOther2;      //文件数据块位置
 float m_fPrvVolume;
 void * m_fOther3;   //扩展统计自定义,为空表示取公共设置
}REPORT_STRUCT_EX;


//日线数据
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;   //涨数,仅大盘有效
 WORD m_wDecline;   //跌数,仅大盘有效
 WORD m_wQT;    //成交笔数
 float m_fOpenVolume;  //开盘量
 float m_fOpenAmount;  //开盘额 
}HISTORY_STRUCTEx;

//分笔成交数据结构
typedef struct{
 WORD m_fBuyVolume;
 WORD m_fSellVolume; 
 
 unsigned m_bOrder : 1;   //成交方向 1买盘 0卖盘
 unsigned m_timeV2 : 31;   // UCT
 
 float m_fBuyPrice;        // 申买价1,2,3
 float m_fSellPrice;       // 申卖价1,2,3
 
 float m_fNewPrice;
 float m_fOI;    //open interest
 float m_fVolume;
 float m_fAmount;
}SUBSECTION_REPORT;

//除权信息
typedef struct
{
 DATE m_timeDate;   // UCT
 double m_fGive;   // 每10股送
 double m_fPei;    // 每10股配
 float   m_fGiveStock;  // 实际送股
 float   m_fPeiStock;  // 实际配股
 float m_fPeiPrice;  // 配股价,仅当 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,    //节气线
  MIN3_DATA,     //3分钟线
  MIN10_DATA,     //10分钟线
  MULTITICK_DATA    //多笔
};

typedef struct  {
 float m_all_capital_stock; //总股本
 float m_country_stock;  //A股本
 float m_charter_member_corporation_stock;//发起人法人股
 float m_corporation_stock; //法人股
 float m_stock_b;    //B股
 float m_stock_h;    //H股
 float m_stock_a;    //A股
 float m_stock_employee;  //职工股
 float m_stock_ration;  //A2转配股
 float m_all_asset;   //总资产
 float m_current_asset;  //流动资产
 float m_fixed_asset;   //固定资产
 float m_intangible_asset;  //无形资产
 float m_long_invest;   //长期投资
 float m_current_liabilities; //流动负债
 float m_long_term_liabilities;//长期负债
 float m_capital_reserves;  //资本公积金
 float m_every_capital_reserves;//每股公积金
 float m_stockholder_equity; //股东权益
 float m_sales;    //主营收入
 float m_gross_profit;   //主营利润
 float m_other_operating_income;//其他利润
 float m_operating_profit;  // 营业利润
 float m_income_from_investments;//投资收益
 float m_other_income;   //补贴收入
 float m_extraordinary_income;// 营业外收支
 float m_profit_and_loss;   //上年损益调整
 float m_profit_before_taxes; //利润总额
 float m_profit_after_taxes;  //税后利润
 float m_profit_aftert_only;  //净利润
 float m_undistributed_profit; //未分配利润
 float m_undistributed_every_stock;//每股未分配
 float m_stock_from_investments; //每股收益
 float m_assets_from_stock;  //每股净资产
 float m_adjust_assets_from_stock;//调整每股净资
 float m_stockholder_equity_rate; //股东权益比
 float m_purify_income;//净资收益率
 float m_circulate_stock;//流通股
 float m_fFin1;//经营现金流入
 float m_fFin2;//经营现金流出
 float   m_fFin3;//经营现金流量
 float m_fFin4;//投资现金流入
 float m_fFin5;//投资现金流出
 float m_fFin6;//投资现金流量
 float m_fFin7;//筹资现金流入
 float m_fFin8;//筹资现金流出
 float m_fFin9;//筹资现金流量
 float m_fFin10;//现金及等价物
 float m_fFin11;//应收帐款周转率
 float m_fFin12;//存货周转率
 float m_fFin13;//股东总数
 float m_fFin14;//发行价
 float m_fFin15;//发行量
 float m_fFin16;//主营业务增长率
 float m_fFin17;//税后利润增长率
 float m_fFin18;//净资增长率
 float m_fFin19;//总资产增长率
 float m_fFin20;
 float m_fFin21;
 float m_fFin22;
 float m_fFin23;
 float m_fFin24;
 float m_fFin25;
 float m_fFin26;
 float m_fFin27;
 float m_fFin28;
 DATE m_timeUpdate;
}FINANCE_STRUCTEx;

typedef struct
{
 //////////////////////////////////////////////////////////////////////////
 //调用数据信息
 DWORD   m_dwVersion;   //调用软件版本(V2.10 : 0x210)
 DWORD   m_dwSerial;    //调用软件序列号
 char   m_szLabel[10];   //调用的品种代码
 WORD   m_wMarket;    //调用的品种市场,比如上海为'HS'
 CYC_DATA_TYPE m_dataType;    //调用数据类型
 BYTE   m_bIsPow;    //是否复权
 BYTE   m_nPowType;    //复权类别 0向前复权 1向后复权
 BYTE   m_bIsReversePrice;  //是否反转价格
 DWORD   m_nDataCount;   //调用数据的数量,填0表示全部硬盘保存数据
 WORD   m_nCustomCyc;   //当周期类型为自定义周期时的自定义周期参数,为0则取系统默认设置
 BYTE   m_nReserve[3];
 
 //////////////////////////////////////////////////////////////////////////
 //以下为返回的数据信息 
 int     m_nNumData;   //数据数量
 HISTORY_STRUCTEx *  m_pMainData;  //主数据缓冲区
 
 SUBSECTION_REPORT * m_pSubsection;  //当日分笔成交明细
 int     m_nNumSubData;  //分笔数据量

 REPORT_STRUCT*  m_pReport;   //动态实时行情结构
 float*    m_pfFinData;  //财务数据(可以转换为 FINANCE_STRUCTEx 结构,如果不转换,请按FINANCE_STRUCTEx结构顺序使用
           //数组数据)
 
 POWER_STRUCTEx* m_pSplitData;   //除权数据
 int    m_nNumSplitData;  //除权次数
}PCALCINFO;

typedef struct  {
 BLOCK_STRUCT m_stStock;   //单品种合约
 BYTE   m_nBuySell;  //0 买入方向 1卖出方向
 WORD      m_nVol;   //下单数量
}TAOLI_INFO;

//////////////////////////////////////////////////////////////////////////
//消息包结构
//////////////////////////////////////////////////////////////////////////

typedef struct  {
 long m_nOrderID;
 char m_szAccount[31];
}CANCEL_ORDER_EX;

typedef struct  {
 long m_nOrderID;  //订单ID
 char m_szStatus[56]; //状态(详见.CPP文件描述)
 long m_nFilled;   //已成交数量(当m_szStatus="Tradeing"时,该参数为本次单笔成交数量)
 long m_nRemaining;  //剩余数量(当m_szStatus="Tradeing"时,该参数恒定为0)
 float m_fPrice;   //成交价格
 char m_szCode[10];  //品种
 char m_szMarket[3];  //市场
 BYTE m_nKaiping;  //开平仓 0开仓 1平仓
 BYTE m_nType;   //订单类型 0限价 1市价 2停损 3限价停损
 BYTE m_nAspect;   //买卖方向 0买入 1卖出
 char m_szAccount[32]; //操作账户
 BYTE m_nAccountType; //账户类型 0IB 1CTP 2金仕达 3股票FIX 4恒生期货 5资管系统 6扩展接口
 float m_fAvgerPrice;    //持仓成本均价(仅当 m_nKaiping > 0 时有效)
}BARGAIN_NOTIFY_KSI;

#pragma pack (pop)

[此贴子已经被作者于2016/4/3 18:30:43编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
admin
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:7302 积分:32559 威望:1000 精华:45 注册:2003/12/30 16:34:32
  发帖心情 Post By:2012/5/7 23:48:59 [只看该作者]

//主程序暴露给插件的接口
interface IMainFramework 
{
public:
 IMainFramework(){};
 virtual ~IMainFramework(){};
 
 //取得主窗口句柄
 virtual HWND   GetMainWindow() = 0;

 //取主程序版本号
 virtual DWORD GetVersion() = 0;

 //取指定品种数据,成功取得数据返回TRUE,否则为FALSE
 virtual BOOL  GetDataInfo(PCALCINFO * pInfo) = 0;

 //取指定品种的动态及时报表
 virtual REPORT_STRUCT * GetReportData(char * szLabel, WORD wMarket) = 0;

 //获取指定市场下的品种数量
 virtual DWORD  GetReportCount(WORD wMarket) = 0;

 //获取指定市场下基于0索引的品种代码
 //wMarket 输入参数, 指定市场
 //dwIndex 输入参数, 基于0索引的序号, 可以用GetReportCount函数获取
 //szCode 输出参数, 品种代码数组, 该数组空间不能小于10字节
 virtual BOOL   GetReportData(WORD wMarket, DWORD dwIndex, char * szCode) = 0;

 //取指定分类板块的品种数组
 //pBlock  存放品种的缓冲区地址
 //dwMaxCount 缓冲区存放品种数量大小
 //szName  为分类或者板块名称,如"上海A股"等
 //nMode   为类别,0市场分组,1分类板块,2系统板块(品种栏对应)
 //返回值:返回读取到的品种数量   
 virtual DWORD GetReportData(BLOCK_STRUCT * pBlock, DWORD dwMaxCount, char * szName, int nMode) = 0;

 //注册品种到数据通知,例如RegReportNotify("CL05",'MN');将合约注册到数据通知,当CL05有最新数据到达时触发ReportNotify事件。
 virtual BOOL RegReportNotify(char * szLabel, WORD wMarket) = 0;

 //取消品种数据注册,例如UnRegReportNotify("CL05",'MN'),CL05数据到达时不会再收到通知。
 virtual void UnRegReportNotify(char * szLabel, WORD wMarket) = 0;

 //下单委托交易
 // nType  下单类型 0限价 1市价 2停损 3限价停损
 // fLmtPrice 委托限价
 // fStopLmtPrice限价停损单(仅限IB外盘品种使用)
 // nVol      委托数量
 // nAspect      0买入 1卖出
 // lpszLabel    品种名称
 // wMarket      品种市场
 // bMustOK      是否弹出下单确认
 // lpszAccount  下单帐户,为空则为当前活动帐户
 // nKaiPing     0开仓 1平仓 2平今
 // nTouBao      期货(0投机 1保值) 股票(0普通 1融资) 期权(0普通 1备兑)
 // bOrderQueue  是否为队列委托方式,即成交上一笔后再委托下一笔
 // 返回值 :     返回本次的委托编号
 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; 

 //撤单
 // nOrderID     委托编号,即PlaceOrder委托下单的委托编号. 当bOrderQueue为2或3时,该变量为CANCEL_ORDER_EX结构体指针
 // bOrderQueue  是否为队列方式的委托撤单,即必须等到该笔撤单成功后再继续后续的下单任务
 //    当bOrderQueue=0时为 不使用队列下单 为1时为队列下单模式,当bOrderQueue为2或者3时为下列情况之一
 //    当为2时为CANCEL_ORDER_EX结构体中不用队列下单模式; 当为3时表示CANCEL_ORDER_EX结构体中,使用队列下单模式
 // 对于使用VC6等较低版本的编译器,LONG_PTR类型可能尚未指定而出现编译错误,将该类型定义为long即可。
 virtual void OrderCancel(LONG_PTR nOrderID, BYTE bOrderQueue) = 0;

 //注册WINDOWS窗口消息,金字塔将以事件方式通知各种
 virtual void RegisterMsg(HWND hMsgWnd, DWORD dwMsg) = 0;

 //得到套利合约信息
 //返回TRUE表示成功 ,返回套利指数内定义的套利品种信息
 virtual BOOL GetTaoliInfo(char * szTaoliLabel, TAOLI_INFO ** pTaoliInfo, DWORD * pdwCount) = 0;

 //得到IB外盘品种持仓数量
 virtual int GetHolding() = 0;

 //得到非IB外盘的指定账户的持仓数量
 virtual int GetHolding2(char * szAccount) = 0;

 //到所有IB帐户当前有效的未成交合约品种数量 
 virtual int GetOrderNum() = 0;

 //得到所有非IB外盘当前有效的未成交合约品种数量 
 virtual int GetOrderNum2() = 0;

 //得到IB帐户的成交明细数量 
 virtual int GetTradeCount() = 0;
 
 //得到指定帐户的非IB外盘帐户的成交明细数量 
 virtual int GetTradeCount2(char * szAccount) = 0;

 //当前已经登陆IB顾问帐户子帐户数量,若登陆的是IB普通帐户此属性为1 
 virtual int GetIBACCount() = 0;

 //当前已经登陆非IB外盘帐户数量(包含无效登陆等情况在内的)
 virtual int GetCTPAcCount() = 0; 

 /*得到当前默认帐户信息 
 nType        指定帐户信息类型。数值的内容含义请参考:http://www.weistock.com/WeisoftHelp/visualbasic_order_account.htm
 返回值:     返回VARIANT类型的账户结果,注意如果是BSTR类型的返回值请使用完毕后注意调用VariantClear函数释放内存。*/
 virtual VARIANT GetAccount(short nType) = 0;

 /*得到指定的非IB外盘帐户信息 
 nType        指定帐户信息类型。数值的内容含义请参考:http://www.weistock.com/WeisoftHelp/visualbasic_order_account2.htm
 szAccount    欲查询的账户
 返回值:     返回VARIANT类型的账户结果,注意如果是BSTR类型的返回值请使用完毕后注意调用VariantClear函数释放内存。*/
 virtual VARIANT GetAccount2(short nType, char * szAccount) = 0;

 /*取指定索引的持仓IB合约信息
 Index        输入参数,指定基于0索引的持仓和约信息,持仓和约总量参见 Holding 属性。
 Hold         输出参数,该该持仓品种持仓量,若空仓返回负数
 MktPrice     输出参数,该持仓品种市价
 AvgPrice     输出参数,该持仓品种均价
 MktValue     输出参数,该持仓品种市值
 AgeCost      输出参数,该持仓品种成本
 PNL          输出参数,该持仓品种浮动盈亏
 Code         输出参数,该持仓品种代码的返回数组,该数组空间至少需要10个字节
 Market       输出参数,该持仓品种市场
 返回值:      成功返回1,失败返回0 */
 virtual BOOL HoldingInfo(UINT Index, int &Hold, double &MktPrice, double &AvgPrice, double &MktValue, double &AgeCost, double &PNL, char *szCode,  WORD &Market)  = 0; 
 
 /*取指定索引的指定其他帐户(CTP,金仕达,恒生,股票等)的合约持仓信息 
 Index        输入参数,指定基于0索引的持仓和约信息,持仓和约总量参见 Holding2 属性。
 BuyHoding    输出参数,该该持仓品种买入持仓总量
 BuyCost      输出参数,该持仓品种持仓成本
 BuyTodayHoding     输出参数,该持仓品种今买持总量(对于证券市场,该参数为实际可用持仓)
 SellHoding     输出参数,该持仓品种卖出持仓总量
 SellCost      输出参数,该持仓品种卖出持仓成本
 SellTodayHoding 输出参数,该持仓品种的今卖出持仓总量(对于证券市场,该参数为实际可用持仓)
 PNL          输出参数,该持仓品种浮动盈亏
 UseMargin    输出参数,该持仓品种的保证金占用
 Code         输出参数,该持仓品种代码的返回数组,该数组空间至少需要10个字节
 Market       输出参数,该持仓品种市场
 Account      输入参数,可缺省,登陆其他帐户(CTP,金仕达,恒生,股票等)的帐户名称,若不填写则表示当前默认的帐户
 返回值:      成功返回1,失败返回0 */
 virtual BOOL HoldingInfo2(UINT Index, int &BuyHoding, double &BuyCost, int &BuyTodayHoding, int &SellHoding, double &SellCost, int &SellTodayHoding, double &PNL, double &UseMargin, char *szCode, WORD &Market, char * szAccount) = 0;

 /*
 * 取指定基于0索引的未成交IB合约信息
 Index        输入参数,指定基于0索引的持仓和约信息,持仓和约总量参见 OrderNum 属性。
 OrderID   输出参数, 未成交订单ID
 ConSign      输出参数,本次委托数量
 Filled       输出参数,已成交数量
 Remaining    输出参数,未成交数量
 Action       输出参数,动作类型 0买入 1卖出
 OrderType    输出参数,订单类型 0限价 1市价 2停损 3市价停损
 LmtPrice     输出参数,当OrderType等于0时为限价,为3时为停损限价
 auxPrice     输出参数,停损价格
 Account      输出参数,帐户信息数组,该数组空间至少需要32个字节
 Code         输出参数,该持仓品种代码的返回数组,该数组空间至少需要10个字节
 Market       输出参数,该持仓品种市场
 返回值:      成功返回1,失败返回0
 */
 virtual BOOL OrderInfo(UINT Index, int &OrderID, int &ConSign, int &Filled, int &Remaining, int &Action, int &OrderType, double &LmtPrice, double &auxPrice, char *szAccount, char *szCode, WORD &Market) = 0;
 
 /*取指定基于0索引的未成交其他帐户(CTP,金仕达,恒生,股票等)合约信息
 Index        输入参数,指定基于0索引的持仓和约信息,持仓和约总量参见 OrderNum2 属性。
 OrderID      输出参数, 未成交订单ID
 ConSign      输出参数,本次委托数量
 Filled       输出参数,已成交数量
 Remaining    输出参数,未成交数量
 Action       输出参数,动作类型 0买入 1卖出
 OrderType    输出参数,订单类型 0限价 1市价 2停损 3市价停损
 LmtPrice     输出参数,当OrderType等于0时为限价,为3时为停损限价
 Account      输出参数,帐户信息数组,该数组空间至少需要32个字节
 Kaiping      输出参数,开平仓类型 0开仓 1平仓
 Code         输出参数,该持仓品种代码的返回数组,该数组空间至少需要10个字节
 Market       输出参数,该持仓品种市场
 返回值:      成功返回1,失败返回0 */ 
 virtual BOOL OrderInfo2(UINT Index, int &OrderID, int &ConSign, int &Filled, int &Remaining, int &Action, int &OrderType, double &LmtPrice, char *szAccount, int &Kaiping, char *szCode, WORD &Market) = 0;
 
 /*获取指定品种的合约种类
 Code         输入参数,指定的品种代码
 Market       输入参数,指定的品种市场
 返回值:是可以交易的非IB外盘接口品种返回1,IB接口返回0*/
 virtual int StockType(char * szCode, WORD wMarket)  = 0;

 /*取指定品种的和约信息
 Code         输入参数,指定的品种代码
 Market       输入参数,指定的品种市场
 Multipliter  输出参数,该品种的乘数/单位
 MinTick      输出参数,该品种的最小变动单位
 ShortPercent 输出参数,该品种的空头保证金
 LongPercent  输出参数,该品种的多头保证金
 返回值:成功返回1否则返回0  
 */
 virtual int GetContract(char *szCode, WORD wMarket, float &Multipliter, float &MinTick, float &ShortPercent, float &LongPercent) = 0;
 
 /*计算指定品种的本次交易手续费用。请用户在交易费率设置上预先设置好不同品种的各种交易费率情况,这样才能通过此方法得到正确的结果。
 Code         指定的品种代码
 Market       指定的品种市场
 lmtPrice     指定的限价
 Volume       委托数量
 Type         成交方向 0开仓 1平仓 2平今
 返回值:      返回计算后的手续费用*/
 virtual float GetChargeByNum(char * szCode, WORD wMarket, float lmtPrice, int Volume, int Type) = 0;
 
 /*取指定基于0索引序号的IB帐户成交明细
 Index        输入参数,基于0索引的成交明细
 Date         输出参数,成交时间
 Code         输出参数,该持仓品种代码的返回数组,该数组空间至少需要10个字节
 Market       输出参数,品种市场
 OrderType    输出参数,成交单类型,0限价 1市价 2停损 3限价停损
 Action       输出参数,成交方向 0买入 1卖出
 Price        输出参数,成交价格
 Volume       输出参数,成交量
 Account      输出参数,帐户信息数组,该数组空间至少需要32个字节
 返回值:      成功返回1,失败返回0*/
 virtual int TradeDetalied(int Index, DATE &Date, char *szCode, WORD &Market, int &OrderType, int &Action, float &Price, int &Volume, char *szAccount) = 0;
 
 /*取指定基于0索引序号的其他帐户(CTP,金仕达,恒生,股票等)帐户成交明细
 Index        输入参数,基于0索引的成交明细
 Date         输出参数,成交时间
 Code         输出参数,该持仓品种代码的返回数组,该数组空间至少需要10个字节
 Market       输出参数,品种市场
 OrderType    输出参数,成交单类型,0限价 1市价 2停损 3限价停损
 Action       输出参数,成交方向 0买入 1卖出
 Price        输出参数,成交价格
 Volume       输出参数,成交量
 Kaiping      输出参数,开平仓类型,0开仓 1平仓
 Account      输入参数,成交帐户,可省略,若省略则表示当前默认激活帐户
 返回值:      成功返回1,失败返回0*/
 virtual int TradeDetalied2(int Index, DATE &Date, char *szCode, WORD &Market, int &OrderType, int &Action, float &Price, int &Volume, int &Kaiping, char *szAccount) = 0;
 
 //得到指定基于0索引的IB帐户名称,例如IBAccountName(0)表示取第一个登陆的IB帐户 
 //nIndex 输入参数,基于0索引的IB登录账户索引
 //szAccont  输出参数,帐户信息数组,该数组空间至少需要32个字节
 //返回值    成功返回true,否则返回 false
 virtual bool GetIBAccountName(int nIndex, char * szAccount) = 0;
 
 //得到指定基于0索引的其他帐户(CTP,金仕达,恒生,股票等)帐户名称(包含登陆未成功的),例如 CTPAccountName(0)表示取第一个登陆的用户名称 
 //nIndex 输入参数,基于0索引的IB登录账户索引
 //szAccont  输出参数,帐户信息数组,该数组空间至少需要32个字节
 //返回值    成功返回true,否则返回 false
 virtual bool GetCTPAccountName(int nIndex, char * szAccount) = 0;
 
 //判断指定帐号是否是当前已登录有效帐号,例如 Order.IsAccount("351579"),如果该账户已登录则返回1,否则返回0 
 virtual int IsAccount(char *szAccount) = 0;

 //获取指定品种的动态行情
 // Code         指定的品种代码
 // Market       指定的品种市场
 //  nType   动态品种的行情类型,具体使用请参考PEL语言的DYNAINFO函数的类型参数
 //               参考 http://www.weistock.com/WeisoftHelp/fulua_dynainfo.htm
 //  返回值   返回计算出的指定值,若调用失败,则返回无效值
 virtual float GetDynainfo(char * szCode, WORD wMarket, int nType) = 0;

 //扩展数据接口,利用这个接口实现未来的接口功能扩充
 virtual void * ExpandFunction(void * pSt, int nType) = 0;
 

 //////////////////////////////////////////////////////////////////////////
 //      期权方面的信息
 //////////////////////////////////////////////////////////////////////////

 //获取期权品种的特征值
 // Code         指定的品种代码
 // Market       指定的品种市场
 //  nType   动态品种的行情类型,具体使用请参考 http://www.weistock.com/WeisoftHelp/fulua_optioninfo.htm
 //  返回值   返回计算出的指定值
 virtual VARIANT OptionInfo(char * szCode, WORD wMarket, int nType) = 0;
};

[此贴子已经被作者于2016-6-1 18:37:29编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
admin
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:7302 积分:32559 威望:1000 精华:45 注册:2003/12/30 16:34:32
[求助]  发帖心情 Post By:2012/5/7 23:51:53 [只看该作者]

最后请大家注意的就是金字塔下C++插件的扩展名是 *.ADI 文件名,实际上就是DLL程序改了扩展名放到金字塔的工作目录下,这么设计主要是为了与金字塔已有的DLL模块冲突,放倒金字塔工作目录后,重新启动金字塔软件,就会在 工具菜单-》扩展 里看到我们所开发出来的C++插件了。

 回到顶部
帅哥哟,离线,有人找我吗?
ackvz
  5楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:618 积分:2624 威望:0 精华:0 注册:2010/4/25 15:17:16
  发帖心情 Post By:2012/5/8 10:59:31 [只看该作者]

此贴应该 设精


 回到顶部
帅哥哟,离线,有人找我吗?
自下而上
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:210 积分:673 威望:0 精华:0 注册:2012/1/30 14:30:45
  发帖心情 Post By:2012/5/8 12:33:22 [只看该作者]

以下是引用ackvz在2012-5-8 10:59:31的发言:

此贴应该 设精

图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
shshtiger
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:36 积分:220 威望:0 精华:0 注册:2011/10/22 16:23:09
  发帖心情 Post By:2012/8/7 14:47:09 [只看该作者]

支持用VS 2010 编译的插件吗????

 回到顶部
帅哥哟,离线,有人找我吗?
shshtiger
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:36 积分:220 威望:0 精华:0 注册:2011/10/22 16:23:09
  发帖心情 Post By:2012/8/7 15:23:55 [只看该作者]

我编译了 怎么看不到我的插件????


 回到顶部
帅哥哟,离线,有人找我吗?
shshtiger
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:36 积分:220 威望:0 精华:0 注册:2011/10/22 16:23:09
  发帖心情 Post By:2012/8/7 16:40:32 [只看该作者]

如何取 历史行情数据? 有接口吗?   谢谢
[此贴子已经被作者于2012-8-7 16:40:51编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
王锋
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2012/8/7 19:49:18 [只看该作者]

插件范例里就有读取历史数据的部分



金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
总数 21 1 2 3 下一页