当前位置: > 期货>正文

期货(CTP)“按照下单价格获取可下单笔数”计算方法详解 期货能买几手

2023-08-06 03:52:29 互联网 未知 期货

当下我们使用券商的期货客户端的时候,我们会发现:当我们输入的价格变化的时候,他的可下单手数也是变化的。但是也有一些券商的,这个地方并没有任何变化,因此 这对于一些用户来说是挺不方便的,因此,这篇文章来讲一些如何动态计算这个下单手数。以下都是干货。     我们先记住两个公式:         手数 = 可用资金 / 1手保证金  值取整         某合约的1手保证金额 = 开仓成交价 * 交易单位(合约乘数) * 1手     上面两个公式就是计算手数需要。先用两个上期所的客户端来验证一下与否。如下图所示,我们看到,在上期所的客户端直接买入一个合约,填写完价格后,会自动给出可交易笔数:

就在这个软件中,我们用不同的价格记录对应的手数,获取如下一组数据

使用ag2012合约获取的数据 价格可用手数(取整)备注4000278超出了涨跌幅,按照跌停价计算4900275 5068266 5100264 5500245 5800232 6000227超出了涨跌幅,按照涨停价计算

 

特别注意上图中的备注: 一些券商的计算是在涨跌幅之类的,但是有一些券商并不会在意涨跌幅。当天的ag2012的涨跌幅如图所示:

我们在这个客户端查询一下用户资金:

然后按照公式计算一下:上面表格中的值,看是否正确:

目前已知:用户可用资金:1620726.15;ag2012 的保证金率=0.08;交易单位(合约乘数)=15千克/手;关于合约保证金和合约乘数,一开始是从网上获取的(比如合约行情页面相关信息),文章的后面会告知如何通过接口查询。

计算结果如下:

这当价格为 4000的时候 保证金 = 4852* 15 * 0.08 = 5822.4    ---> 手数 1620726.15/5822.4=278  (超出了涨跌幅,按照跌停价计算) 这当价格为 4900 的时候 保证金 = 4900 * 15 * 0.08 = 5880    ---> 手数 1620726.15/5880=275 这当价格为 5068 的时候 保证金 = 5068 * 15 * 0.08 = 6081.6  ---> 手数 1620726.15/6081.6=266 这当价格为 5100 的时候 保证金 = 5100 * 15 * 0.08 = 6120    ---> 手数 1620726.15/6120=264 这当价格为 5500 的时候 保证金 = 5500 * 15 * 0.08 = 6600    ---> 手数 1620726.15/6600=245 这当价格为 5800 的时候 保证金 = 5800 * 15 * 0.08 = 6960    ---> 手数 1620726.15/6960=232 这当价格为 6000 的时候 保证金 = 5931 * 15 * 0.08 = 7117.2  ---> 手数 1620726.15/7117.2=227  (超出了涨跌幅,按照涨停价计算)

由此可见,计算公式是完全是正确的。

可能有朋友会说了,你这仅仅是一个合约,其他合约也能正确吗?这里我用p2101这个合约做了验证,是完全正确的。计算过程如下:

用上期所客户端填写价格后,获取的手数如下表所示

使用p2101获取的数据 价格可用手数(取整)备注3000541超出跌停价5984541 6250518 6550494 7024461 8000461超出涨停价

 

手动验算两条:其中保证金率和合约乘数都是从网络(比如合约行情页面相关信息)获取,文章后面会讲如何从接口获取。

价格为 6250 : 保证金 = 6250 * 10 * 0.05 = 3125 --> 1620726.15/3125 = 518 价格为 6900 :  保证金 = 6900 * 10 * 0.05 = 3450 --> 1620726.15/3450 = 469

最后,说一下如何通过CTP接口获得所需要的的数据。

这里面最重要的是获取三个数据信息: 1 用户可用资金 2 合约对应的保证金率 3 合约对应的交易单位 查看上期所提供的变成API,我们只要关注这两个接口即可:

第一个接口:合约查询 int ReqQryInstrument(CThostFtdcQryInstrumentField &p_refReq, const char *p_pszRouteInfo); OnRspQryInstrument(CThostFtdcInstrumentField *pTradingCode, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); 在结构体 CThostFtdcInstrumentField 中,有两个字段: ///合约数量乘数  ---->对应交易单位(或者叫做合约单位) TThostFtdcVolumeMultipleType    VolumeMultiple; ///多头保证金率  --->对应保证金率 TThostFtdcRatioType    LongMarginRatio; ///空头保证金率   ---->对应保证金率 TThostFtdcRatioType    ShortMarginRatio; 注意 这里的两个保证金率值都是一样的。 如图所示:

第二个接口:查询资金账户 int ReqQryTradingAccount(CThostFtdcQryTradingAccountField &p_refReq, const char *p_pszRouteInfo); virtual void OnRspQryTradingAccount(CThostFtdcTradingAccountField *pTradingAccount, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); 在这个CThostFtdcTradingAccountField 结构体中有如下字段: ///可用资金 TThostFtdcMoneyType    Available;  ----> 对应用户可用资金

(这里就不截图了)

通过上述两个接口,获取对应信息,计算不同的价格可下单的笔数。(完!)

   

版权声明: 本站仅提供信息存储空间服务,旨在传递更多信息,不拥有所有权,不承担相关法律责任,不代表本网赞同其观点和对其真实性负责。如因作品内容、版权和其它问题需要同本网联系的,请发送邮件至 举报,一经查实,本站将立刻删除。