CTP 接口COM封装使用指南.docx

上传人:b****5 文档编号:4356666 上传时间:2022-11-30 格式:DOCX 页数:21 大小:22.55KB
下载 相关 举报
CTP 接口COM封装使用指南.docx_第1页
第1页 / 共21页
CTP 接口COM封装使用指南.docx_第2页
第2页 / 共21页
CTP 接口COM封装使用指南.docx_第3页
第3页 / 共21页
CTP 接口COM封装使用指南.docx_第4页
第4页 / 共21页
CTP 接口COM封装使用指南.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

CTP 接口COM封装使用指南.docx

《CTP 接口COM封装使用指南.docx》由会员分享,可在线阅读,更多相关《CTP 接口COM封装使用指南.docx(21页珍藏版)》请在冰豆网上搜索。

CTP 接口COM封装使用指南.docx

CTP接口COM封装使用指南

CTP接口COM封装使用指南

盈佳发布了一个基于COM标准的CTP-API接口封装,通过这个COM接口,用户可以利用任何支持COM的语言来接入CTP;该COM组件在内部进行仓位和资金的自动计算,并对用户屏蔽了上期所的平今和平昨的差别(优先平今),对用户非常友好。

1.1COM包构成

该COM组件在运行时,需要下面几个文件:

✧ctpcom.dll

✧thosttraderapi.dll

✧thostmduserapi.dll

✧config.xml(可以有多个,不同的期货公司需要不同的配置文件,在登录时指定这个配置文件的名称)

✧error.xml,error.dtdctp中错误信息定义

1.2COM注册

在使用COM组件之间,需要先注册注本COM组件,步骤如下:

✧运行cmd,

✧cd到ctpcom.dll所在的目录,

✧运行Regsvr32ctpcom.dll

1.3COM接口方法

该COM提供的接口(c++语言描述)如下:

✧Login([in]BSTRConfigFile,[in]BSTRUserID,[in]BSTRPassword,[out]int*ErrorID);

说明:

登录到CTP系统。

必须首先调用该方法成功登录后,

才能调用其他方法。

参数:

ConfigFile,配置文件的名称,该配置文件必须和

ctpcom.dll放在同一个目录下。

通过指定不通的配置文件,可以创建多个ctpcom对象,连接到不同的期货经纪公司。

UserID,投资者账户名

Password,投资者密码;

ErrorID,返回登录错误代码,为0时表示登录成功,

其他值表示登录失败。

✧Buy([in]BSTRpszInstrumentID,[in]intvolume,[in]doubleprice,[out]long*OrderID);

说明:

对指定的合约买入开仓;

参数:

pszInstrumentID,合约代码,区分大小写;

volume,开仓手数,

price,开仓价格,0表示以市价开仓(对于上期所,

以停板价+立即撤单来模拟)

OrderID,返回该报单的唯一编号,可以通过这个编号

来跟踪此报单;

✧Sell([in]BSTRpszInstrumentID,[in]intvolume,[in]doubleprice,[out]long*OrderID);

说明:

对指定的合约卖出平仓;

参数:

pszInstrumentID,合约代码,区分大小写;

volume,平仓手数,

price,平仓价格,0表示以市价平仓(对于上期所,

以停板价+立即撤单来模拟)

OrderID,返回该报单的唯一编号,可以通过这个编号

来跟踪此报单;

✧Short([in]BSTRpszInstrumentID,[in]intvolume,[in]doubleprice,[out]long*OrderID);

说明:

对指定的合约卖出开仓;

参数:

pszInstrumentID,合约代码,区分大小写;

volume,开仓手数,

price,开仓价格,0表示以市价开仓(对于上期所,

以停板价+立即撤单来模拟)

OrderID,返回该报单的唯一编号,可以通过这个

编号来跟踪此报单;

✧Cover([in]BSTRpszInstrumentID,[in]intvolume,[in]doubleprice,[out]long*OrderID);

说明:

对指定的合约买入平仓;

参数:

pszInstrumentID,合约代码,区分大小写;

volume,平仓手数,

price,平仓价格,0表示以市价平仓(对于上期所,

以停板价+立即撤单来模拟)

OrderID,返回该报单的唯一编号,可以通过这个编号来

跟踪此报单;

✧PlaceOrder([in]BSTRpszInstrumentID,[in]intbuySell,[in]intopenClose,[in]intvolume,[in]doubleprice,[out]long*OrderID);

说明:

对指定的合约买入平仓;

参数:

pszInstrumentID,合约代码,区分大小写;

buySell,买卖,0为买,1为卖;

openClose,开平,0为开,1为平;

volume,平仓手数,

price,平仓价格,0表示以市价平仓(对于上期所,

以停板价+立即撤单来模拟)

OrderID,返回该报单的唯一编号,可以通过这个编号来

跟踪此报单;

✧CancelOrder([in]longOrderID,[out]int*status);

说明:

对指定的报单进行撤单操作;

参数:

OrderID,指定的报单号;

Status,返回代码,>0表示已经对该报单发出撤单指令,

<=0表示该报单不存在,或者已经不可撤;

✧SubscribeMD([in]BSTRInstrumentID);

说明:

订阅某个合约的行情数据。

在订阅了后,会通过OnMarketData事件将该合约的行情发出。

参数:

InstrumentID–合约代码,区分大小写。

✧GetLongPos([in]BSTRInstrumentID,[out]long*LongPos,[out]double*PositionPrice);

说明:

返回某个合约的多头(买持)仓位。

参数:

InstrumentID–合约代码,区分大小写。

LongPos–返回的多头(买持)仓位大小;

PositionPrice-多头仓位的持仓均价;

✧GetLongClosable([in]BSTRInstrumentID,[out]long*LongClosable);

说明:

返回某个合约的多头(买持)可平仓位。

参数:

InstrumentID–合约代码,区分大小写。

LongClosable–返回的多头(买持)仓位可平量;

✧GetShortPos([in]BSTRInstrumentID,[out]long*ShortPos,[out]double*PositionPrice);

说明:

返回某个合约的空头(卖持)仓位。

参数:

InstrumentID–合约代码,区分大小写。

LongPos–返回的空头(卖持)仓位大小;

PositionPrice-多头仓位的持仓均价;

✧GetShortClosable([in]BSTRInstrumentID,[out]long*ShortClosable);

说明:

返回某个合约的空头(卖持)可平仓位。

参数:

InstrumentID–合约代码,区分大小写。

ShortClosable–返回的空头(卖持)仓位的可平量;

✧IsOrderOpen([in]longOrderID,[out]BOOL*IsOpen);

说明:

判断某个报单是否处于可撤状态。

参数:

OrderID–报单编号。

IsOpen–不为0表示处于可撤状态,0表示不可撤;

✧GetMarketData([in]BSTRInstrumentID,[out]double*YdClose,[out]double*YdSettlement,[out]double*Open,[out]double*Last,[out]double*Bid1,[out]double*Ask1,[out]int*Bid1Volume,[out]int*Ask1Volume,[out]double*Highest,[out]double*Lowest,[out]int*TradedVolume,[out]double*TradedAmmount);

说明:

获取一个合约当前最新行情数据。

参数:

InstrumentID–指定合约编号。

YdClose–昨日收盘价;

YdSettlement-昨日结算价

Open-今日开盘价

Last-今日最新价

Bid1-买一价

Ask1-卖一价

Bid1Volume-买一量

Ask1Volume-卖一量

Highest-今日最高价

Lowest-今日最低价

TradedVolume-今日成交量

TradedAmmount-今日成交额

✧GetAccount([out]double*Balance,[out]double*Available);

说明:

获取当前帐户的用户权益和可用资金。

参数:

Balance-当前帐户的用户权益可用资金

Available-当前帐户的可用资金

✧GetInstruments([out]SAFEARRAY(InstrumentField)*ppIns,[out]int*Count)

说明:

获取所有合约列表;

参数:

ppIns–InstrumentField指针数组;

Count-合约数目,

✧GetInstrumentInfo([in]BSTRInstrumentID,[out]int*Multiply,[out]double*PriceUnit);

说明:

获得一个合约的乘数和最小价格变动单位;该方法需要在OnInitFinished事件之后调用。

参数:

InstrumentID–合约编号

Multiply–合约乘数;

PriceUnit–合约最小价格变动单位;

✧GetMarginRate([in]BSTRInstrumentID,[out]double*MarginRate,[out]BSTR*ExpireDate);

说明:

获得一个合约的保证金率乘数和到期日,该方法需要在OnInitFinished事件之后调用,MarginRate在第一次调用时可能不能返回,此时可以在OnMarginRate事件中接受。

参数:

InstrumentID–合约编号

MarginRate–合约乘数;

ExpireDate–合约最小价格变动单位;

✧CreateKBars(BSTRInstrumentID,intPeriod,intInterval);

说明:

创建一个Bar序列,之后,COM会通过OnBar事件将生成的Bar推送出来。

参数:

InstrumentID–合约代码;

Period–周期类型,0–分钟线1-小时线;

Interval-周期大小;大于1

1.4COM触发事件

客户端通过事件来接受行情、资金和仓位等信息。

该COM组件发出的事件如下:

✧OnAccount–当投资者账户信息发生变化时,此事件被触发;

参数:

PreBalance期初用户权益

Balance当前用户权益

Available当前可用资金

Commission今日以发生手续费

FrozenCommission今日冻结手续费

Margin占用保证金

FrozenMargin今日冻结保证金

CloseProfit今日平仓盈亏

PositionProfit持仓盈亏

✧OnMarketData-当某个合约有新行情到达时,此事件被触发;

参数:

InstrumentID合约编号

BidPrice1买一价

BidVolume1买一量

AskPrice1卖一价

AskVolume1卖一量

OpenPrice开盘价

HighestPrice最高价

LowestPrice最低价

LastPrice最新价

OpenInterest持仓量

Volume成交量

UpperLimitPrice涨停价

LowerLimitPrice跌停价

PreSettlementPrice昨结算价

AveragePrice今日平均价

UpdateTime行情更新时间

UpdateMilliSecond更新毫秒数为0或500

✧OnOrder–当某个报单信息发生变化时,此事件被触发;

参数:

OrderID报单编号

InstrumentID和约编号

IsBuy是否为买,非0为买,否则为卖;

IsOpen是否开仓,非0为开仓,否则为平仓

Volume委托数量

Price委托价格

TradedVolume已成交数量

AvgTradePrice成交均价

OrderStatus报单当前状态

OrderSysID交易所报单号

InsertTime委托时间

StatusMsg状态信息,如果该报单失败,则为失败原因。

✧OnOrderCanceled-当出现报单错误或者报单被撤时,此事件被触发;

参数:

OrderID-报单编号

ErrorID-当为错单时的错误编号;

ErrorMsg-当为错单时的错误信息;

✧OnOrderFinished–当某个报单全部成交后,此事件被触发;此事件总是在一个报单的所有OnTrade事件之后发生。

参数:

OrderID报单编号

✧OnPosition–当某个合约的仓位信息发生变化时,此事件被触发;

参数:

InstrumentID-合约代码

IsLong-是否为多仓

Volume-持仓量

CloseProfit-今日平仓盈亏

PositionProfit持仓盈亏

AvgPositionPrice持仓均价昨仓,是结算之后的均价;

AvgOpenPrice开仓均价;按开仓价计算的均价;

TotalClosable总可平量

TodayClosable今日可平量

✧OnTrade-当所发出的报单有成交时,此事件被触发;

参数:

OrderID报单编号

InstrumentID合约代码

IsBuy是否为买,非0为买,否则为卖;

IsOpen是否开仓,非0为开,否则为平;

ThisTradeVolume本次成交数量

ThisTradePrice本次成交均价

TradeTime成交时间;

✧OnTradeConnected-当交易连线后,此事件被触发;

✧OnTradeDisconnected-当交易断线后,此事件被触发;

✧OnMDConnected-当行情连线后,此事件被触发;

✧OnMDDisconnected-当行情断线后,此事件被触发;

✧OnOrderActionFailed([in]longOrderID,[in]intErrorID);当撤单失败时,此事件被触发;

✧OnInstrumentStatus–交易所状态信息通知

参数:

InstrumentID–交易所随机选择的一个合约;

ExchangeID–交易所代码:

CFFEX中金所;

SHFE上期所;

DCE大商所;

CZCE郑商所;

EnterTime–进入本状态时间;

NewState–当前状态;其值如下所示:

//开盘前

#defineTHOST_FTDC_IS_BeforeTrading'0'

///非交易

#defineTHOST_FTDC_IS_NoTrading'1'

///连续交易

#defineTHOST_FTDC_IS_Continous'2'

///集合竞价报单

#defineTHOST_FTDC_IS_AuctionOrdering'3'

///集合竞价价格平衡

#defineTHOST_FTDC_IS_AuctionBalance'4'

///集合竞价撮合

#defineTHOST_FTDC_IS_AuctionMatch'5'

///收盘

#defineTHOST_FTDC_IS_Closed'6'

✧OnInitFinished–相关初始化工作完成,在这个事件通知之后,可以通过GetInstruments方法获得所有合约列表。

✧OnMarginRate

Desc:

Firedwhenaninstruments’marginratewasqueriedback.

Params:

InstrumentID

longMarginRate

shortMarginRate

✧OnCommissionRate

Desc:

Firedwhenaninstruments’commissionratewasqueriedback.

Params:

InstrumentID

OpenCommissionRateByMoney

OpenCommissionRateByVolume

CloseCommissionRateByMoney

CloseCommissionRateByVolumeCloseTodayCommissionRateByMoneyCloseTodayCommissionRateByVolume

✧OnBar–新创建了Bar或者某个Bar被关闭;

参数:

InstrumentID–合约编号;

BeginTime–本Bar的开始时间;

Period–周期类型,0–分钟线;1–小时线;

Interval–周期大小;

Open–本Bar的开盘价,

High–本Bar的最高价;

Low-本Bar的最低价;

Close–本Bar的收盘价;

Volume-本bar时间内的成交量;

Position-本Bar结束时的持仓量;

Status–本Bar的状态,0-未关闭,1–关闭;

注1:

接口中涉及到的ErrorID和ErrorMsg参见发布包中的error.xml;

注2:

OrderStatus的取值如下:

///全部成交

#defineTHOST_FTDC_OST_AllTraded'0'

///部分成交还在队列中

#defineTHOST_FTDC_OST_PartTradedQueueing'1'

///部分成交不在队列中

#defineTHOST_FTDC_OST_PartTradedNotQueueing'2'

///未成交还在队列中

#defineTHOST_FTDC_OST_NoTradeQueueing'3'

///未成交不在队列中

#defineTHOST_FTDC_OST_NoTradeNotQueueing'4'

///撤单

#defineTHOST_FTDC_OST_Canceled'5'

///未知

#defineTHOST_FTDC_OST_Unknown'a'

///尚未触发

#defineTHOST_FTDC_OST_NotTouched'b'

///已触发

#defineTHOST_FTDC_OST_Touched'c'

1.5COM使用示例

1.5.1Excel示例

见ctpcom_sample.xls

1.5.2VB6.0示例

DimWithEventsctpAsICTPClientAPI

PrivateSubLogin_Click()

DimerrorIDAsLong

DimsuccAsLong

Setctp=NewCTPCOMLib.ICTPClientAPI

Callctp.Login("config.xml","00100","888888",errorID)

IferrorID=0Then

MsgBox"登录ok"

Else

MsgBox"登录错误:

"&errorID

EndIf

EndSub

PrivateSubBuy_Click()

DimOrderIDAsLong

DimindexAsInteger

Dimtm1,tm2AsDate

Callctp.Buy("IF1008",1,0,OrderID)

EndSub

PrivateSubMD_Click()

Callctp.SubscribeMD("IF1008")

EndSub

PrivateSubClose_Click()

Setctp=Nothing

EndSub

PrivateSubSell_Click()

DimOrderIDAsLong

Callctp.Sell("IF1008",1,0,OrderID)

EndSub

PrivateSubctp_OnAccount(ByValPreBalanceAsDouble,ByValBalanceAsDouble,ByValAvailableAsLong,ByValCommissionAsDouble,ByValFrozenCommissionAsDouble,ByValMarginAsDouble,ByValFrozenMarginAsDouble,ByValCloseProfitAsDouble,ByValPositionProfitAsDouble)

Label1.Caption=Available

EndSub

PrivateSubctp_OnMarketData(ByValInstrumentIDAsString,ByValBidPrice1AsDouble,ByValBidVolume1AsLong,ByValAskPrice1AsDouble,ByValAskVolume1AsLong,ByValOpenPriceAsDouble,ByValHighestPriceAsDouble,ByValLowestPriceAsDouble,ByValLastPriceAsDouble,ByValOpenInterestAsLong,ByValVolumeAsLong,ByValUpperLimitPriceAsDouble,ByValLowerLimitPriceAsDouble,ByValPreSettlementPriceAsDouble,ByValAveragePriceAsDouble,ByValUpdateTimeAs

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1