期货(CTP)“按照下单价格获取可下单笔数”计算方法详解 -- 看这一篇文章就够!

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

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

使用ag2012合约获取的数据
价格 可用手数(取整) 备注
4000 278 超出了涨跌幅,按照跌停价计算
4900 275  
5068 266
好的,我可以为您提供一个期货CTP交易下单的C demo。您需要安装CTP API并正确配置环境后,使用以下代码即可进行期货下单: ``` #include <stdio.h> #include <string.h> #include <Windows.h> #include "ThostFtdcTraderApi.h" class CTraderSpi : public CThostFtdcTraderSpi { public: virtual void OnFrontConnected() { printf(">>> Front connected.\n"); CThostFtdcReqUserLoginField req; memset(&req, 0, sizeof(req)); strcpy(req.BrokerID, "经纪商代码"); strcpy(req.UserID, "投资者账户"); strcpy(req.Password, "用户密码"); m_pTraderApi->ReqUserLogin(&req, 0); } virtual void OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { if (pRspInfo != NULL && pRspInfo->ErrorID != 0) { printf(">>> Error: login failed, errno = %d, err msg = %s.\n", pRspInfo->ErrorID, pRspInfo->ErrorMsg); return; } printf(">>> Login success.\n"); CThostFtdcInputOrderField req; memset(&req, 0, sizeof(req)); strcpy(req.BrokerID, "经纪商代码"); strcpy(req.InvestorID, "投资者账户"); strcpy(req.InstrumentID, "期货合约代码"); strcpy(req.UserID, "投资者账户"); req.Direction = THOST_FTDC_D_Buy; req.OffsetFlag = THOST_FTDC_OF_Open; req.LimitPrice = 5000; req.VolumeTotalOriginal = 1; req.OrderPriceType = THOST_FTDC_OPT_LimitPrice; req.TimeCondition = THOST_FTDC_TC_GFD; req.VolumeCondition = THOST_FTDC_VC_AV; req.MinVolume = 1; req.ContingentCondition = THOST_FTDC_CC_Immediately; req.ForceCloseReason = THOST_FTDC_FCC_NotForceClose; req.IsAutoSuspend = 0; m_pTraderApi->ReqOrderInsert(&req, 0); } virtual void OnRspOrderInsert(CThostFtdcInputOrderField *pInputOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { if (pRspInfo != NULL && pRspInfo->ErrorID != 0) { printf(">>> Error: insert order failed, errno = %d, err msg = %s.\n", pRspInfo->ErrorID, pRspInfo->ErrorMsg); return; } printf(">>> Insert order success.\n"); } void SetTraderApi(CThostFtdcTraderApi *pTraderApi) { m_pTraderApi = pTraderApi; } private: CThostFtdcTraderApi *m_pTraderApi; }; int main() { CThostFtdcTraderApi *pTraderApi = CThostFtdcTraderApi::CreateFtdcTraderApi(); CTraderSpi *pTraderSpi = new CTraderSpi(); pTraderSpi->SetTraderApi(pTraderApi); pTraderApi->RegisterSpi(pTraderSpi); pTraderApi->SubscribePublicTopic(THOST_TERT_RESTART); pTraderApi->SubscribePrivateTopic(THOST_TERT_RESTART); pTraderApi->RegisterFront("交易前置地址"); pTraderApi->Init(); pTraderApi->Join(); return 0; } ``` 您只需要将代码中的经纪商代码、投资者账户、用户密码、期货合约代码、交易前置地址修改为您自己的信息即可进行期货下单操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值