《AlgoPlus使用手册》之看穿式监管认证

微信公众号:AlgoPlus
欢迎关注点赞转发收藏!
您的认可是我们最大的动力!
将AlgoPlus设为星标,及时获取最新研究成果!

提交申请

看穿式认证申请,除了提交个人信息之外,还需要提交以下信息:

1、接入模式。直连还是中继?如果交易相关指令从客户端先被发送到服务端,然后再被转发至期货公司交易前置,这种模式属于中继。没有负责中转的服务端,则属于直连模式。一般情况,自己开发自己使用的基本都属于直连模式。具体属于哪种模式,请以期货公司判定为准。

2、AppID,是你给自己的程序起的名字。格式为:client_不超过10个字符的名字_不超过8个字符的版本号,例如:client_pikachu_1.0。

申请通过后,你会得到一枚授权码,这是期货公司的通行口令。每次接入时都需要同时提供名字和口令,并且与系统留底匹配上才允许进行后续操作,否则后果很严重!什么严重的后果?被拒之门外。

除了授权码,期货公司还会给你用于测试的服务器地址和仿真账号(有期货公司让你自己注册)。新注册账号,一般都需要修改密码之后才能正常交易。如果还不习惯使用API,可以到期货公司官网下载仿真交易客户端修改。我们会给出使用API修改密码的例子。

仿真交易

有些期货公司要求较少,有些期货公司要求则比较多。下面的例子是按照最多的要求情况编写的。安装AlgoPlus后,运行这个范例,将对应结果截图发给期货公司,一定能通过认证。

另外需要提醒大家的是,仿真行情与模拟行情不同,大家可以先通过仿真客户端找到比较活跃的行情进行测试,以免因没有行情导致无法完成仿真交易。

文件目录:

\AlgoPlus\exemplification\8客户端认证\req_authenticate.py

源代码:*

# -*- coding: utf-8 -*-

from AlgoPlus.CTP.TraderApi import TraderApi
from AlgoPlus.CTP.ApiStruct import *
import time


class TraderEngine(TraderApi):
    def __init__(self, td_server, broker_id, investor_id, password, app_id, auth_code, md_queue=None
                 , page_dir='', private_resume_type=2, public_resume_type=2):
        self.order_ref = 0
        self.Join()

    # 撤单
    def withdraw(self, exchange_ID, instrument_id, order_ref, order_sysid=''):
        pOrderAction = InputOrderActionField(
            BrokerID=self.broker_id,
            InvestorID=self.investor_id,
            UserID=self.investor_id,
            ExchangeID=exchange_ID,
            ActionFlag="0",
            InstrumentID=instrument_id,
            FrontID=self.front_id,
            SessionID=self.session_id,
            OrderSysID=order_sysid,
            OrderRef=str(order_ref),
        )
        l_retVal = self.ReqOrderAction(pOrderAction)

    # 报单
    def insert_order(self, exchange_ID, instrument_id, order_price, order_vol, order_ref, direction, offset_flag):
        pBuyOpen = InputOrderField(
            BrokerID=self.broker_id,
            InvestorID=self.investor_id,
            ExchangeID=exchange_ID,
            InstrumentID=instrument_id,
            UserID=self.investor_id,
            OrderPriceType="2",
            Direction=direction,
            CombOffsetFlag=offset_flag,
            CombHedgeFlag="1",
            LimitPrice=order_price,
            VolumeTotalOriginal=order_vol,
            TimeCondition="3",
            VolumeCondition="1",
            MinVolume=1,
            ContingentCondition="1",
            StopPrice=0,
            ForceCloseReason="0",
            IsAutoSuspend=0,
            OrderRef=str(order_ref),
        )
        l_retVal = self.ReqOrderInsert(pBuyOpen)

    # 买开仓
    def buy_open(self, exchange_ID, instrument_id, order_price, order_vol, order_ref):
        self.insert_order(exchange_ID, instrument_id, order_price, order_vol, order_ref, '0', '0')

    # 卖开仓
    def sell_open(self, exchange_ID, instrument_id, order_price, order_vol, order_ref):
        self.insert_order(exchange_ID, instrument_id, order_price, order_vol, order_ref, '1', '0')

    # 买平仓
    def buy_close(self, exchange_ID, instrument_id, order_price, order_vol, order_ref):
        if exchange_ID == "SHFE" or exchange_ID == "INE":
            self.insert_order(exchange_ID, instrument_id, order_price, order_vol, order_ref, '0', '3')
        else:
            self.insert_order(exchange_ID, instrument_id, order_price, order_vol, order_ref, '0', '1')

    # 卖平仓
    def sell_close(self, exchange_ID, instrument_id, order_price, order_vol, order_ref):
        if exchange_ID == "SHFE" or exchange_ID == "INE":
            self.insert_order(exchange_ID, instrument_id, order_price, order_vol, order_ref, '1', '3')
        else:
            self.insert_order(exchange_ID, instrument_id, order_price, order_vol, order_ref, '1', '1')

    def Join(self):
        while True:
            if self.status >= 0:

                # ############################################################################# #
                # 确认结算单
                req_settlement_infoConfirm = SettlementInfoConfirmField(BrokerID=self.broker_id,
                                                                        InvestorID=self.investor_id)
                self.ReqSettlementInfoConfirm(req_settlement_infoConfirm)
                self._write_log(f"=>发出确认结算单请求!")
                time.sleep(3)

                # ############################################################################# #
                # 连续5次买开 - 卖平
                ikk = 0
                while ikk < 5:
                    ikk += 1
                    self.order_ref += 1
                    self.buy_open(test_exchange_id, test_instrument_id, test_raise_limited, test_vol, self.order_ref)
                    self._write_log(f"=>{ikk}=>发出涨停买开仓请求!")
                    time.sleep(1)

                    # 跌停卖平仓
                    self.order_ref += 1
                    self.sell_close(test_exchange_id, test_instrument_id, test_fall_limited, test_vol, self.order_ref)
                    self._write_log(f"=>发出跌停卖平仓请求!")

                # ############################################################################# #
                # 连续5次卖开 - 买平
                ikk = 0
                while ikk < 5:
                    # 跌停卖开仓
                    self.order_ref += 1
                    self.sell_open(test_exchange_id, test_instrument_id, test_fall_limited, test_vol, self.order_ref)
                    self._write_log(f"=>{ikk}=>发出跌停卖平仓请求!")
                    time.sleep(1)

                    # 涨停买平仓
                    self.order_ref += 1
                    self.buy_close(test_exchange_id, test_instrument_id, test_raise_limited, test_vol, self.order_ref)
                    self._write_log(f"=>发出涨停买平仓请求!")

                    ikk += 1

                # ############################################################################# #
                # 买开 - 撤单
                self.order_ref += 1
                self.buy_open(test_exchange_id, test_instrument_id, test_fall_limited, test_vol, self.order_ref)
                self._write_log(f"=>发出涨停买开仓请求!")
                time.sleep(1)

                # 撤单
                self.withdraw(test_exchange_id, test_instrument_id, self.order_ref)
                self._write_log(f"=>发出撤单请求!")

                # ############################################################################# #
                # 卖开 - 撤单
                self.order_ref += 1
                self.sell_open(test_exchange_id, test_instrument_id, test_raise_limited, test_vol, self.order_ref)
                self._write_log(f"=>发出跌停卖平仓请求!")
                time.sleep(1)

                # 撤单
                self.withdraw(test_exchange_id, test_instrument_id, self.order_ref)
                self._write_log(f"=>发出撤单请求!")

                # ############################################################################# #
                # 查询订单
                qry_order_field = QryOrderField(BrokerID=self.broker_id,
                                                InvestorID=self.investor_id)
                self.ReqQryOrder(qry_order_field)
                self._write_log(f"=>发出查询订单请求!")
                time.sleep(3)

                # ############################################################################# #
                # 查询资金
                qry_trading_account_field = QryTradingAccountField(BrokerID=self.broker_id,
                                                                   AccountID=self.investor_id,
                                                                   CurrencyID="CNY",
                                                                   BizType="1")
                self.ReqQryTradingAccount(qry_trading_account_field)
                self._write_log(f"=>发出查询资金请求!")
                time.sleep(3)

                # ############################################################################# #
                # 查询成交
                qry_trade_field = QryTradeField(BrokerID=self.broker_id,
                                                InvestorID=self.investor_id)
                self.ReqQryTrade(qry_trade_field)
                self._write_log(f"=>发出查询成交请求!")
                time.sleep(3)

                # ############################################################################# #
                # 查询持仓
                qry_investor_position_field = QryInvestorPositionField(BrokerID=self.broker_id,
                                                                       InvestorID=self.investor_id)
                self.ReqQryInvestorPosition(qry_investor_position_field)
                self._write_log(f"=>发出查询持仓请求!")

                # ############################################################################# #
                # 查询资金
                qry_trading_account_field = QryTradingAccountField(BrokerID=self.broker_id,
                                                                   AccountID=self.investor_id,
                                                                   CurrencyID="CNY",
                                                                   BizType="1")
                self.ReqQryTradingAccount(qry_trading_account_field)
                self._write_log(f"=>发出查询资金请求!")
                time.sleep(3)

                # ############################################################################# #
                print("老爷,看穿式监管认证仿真交易已经完成!请截图联系期货公司!")
                break

            time.sleep(1)


# ############################################################################# #
# 请在这里填写需要测试的合约数据
# 警告:该例子只支持上期所品种平今仓测试
test_exchange_id = 'SHFE'  # 交易所
test_instrument_id = 'rb2001'  # 合约代码
test_raise_limited = 3708  # 涨停板
test_fall_limited = 3159  # 跌停板
test_vol = 1  # 报单手数

if __name__ == "__main__":
    import sys

    sys.path.append("..")
    from account_info import my_future_account_info_dict

    future_account = my_future_account_info_dict['SimNow24']
    ctp_trader = TraderEngine(future_account.server_dict['TDServer']
                              , future_account.broker_id
                              , future_account.investor_id
                              , future_account.password
                              , future_account.app_id
                              , future_account.auth_code
                              , None
                              , future_account.td_page_dir)

说明:

1、account_info请参考《《AlgoPlus使用手册》之全天候模拟测试》。

2、在仿真客户端软件选择活跃的品种设置196-200行参数。

这个是2019.6.14上期CTP接口升级穿透监管后,再申请CTP权限需要测试,这个是自动开仓,撤单和平仓程序,配置setting.ini后运行,一键通过测试 在setting.ini设置账户信息,运行后自动交易螺纹钢,开1手平1手后完成穿透监管测试 再申请宏源期货账户授权码 配置文件请修改合约为上海品种比如rb1911,随着时间推移,rb1911会失效,导致无法订阅和下单,请在setting.ini中将InsturmentID字段改为当前时间的主力合约,再运行下单测试。 关于SIMNOW老账户穿透监管接入授权码和APPID 下周SIMNOW升级到看穿后,老账户统一APPID为simnow_client_test,认证码为0000000000000000(16个0) CTP SIMNOW模拟账户成交规则更新 1、期货交易按照交易所公布的买一卖一价对价成交; 2、卖出时:如果委托价小于等于最新价,则成交,成交价为委托价、买一价、最新价三价取中,如果委托价大于买一价,不能成交,等待更优的行情才能成交。 3、买入时:如果委托价大于等于卖一价,则成交,成交价为委托价、卖一价、最新价三价取中,如果委托价小于卖一价,不能成交,等待更优的行情才能成交; SIMNOW 的CTP接口穿透监管升级后对外接入地址变更 由于目前SIMNOW前置流量压力激增。在系统设置上进行调整后,决定再进行接入地址修改: 第1组:Trade Front:218.202.237.33 :10102,Market Front:218.202.237.33 :10112;【移动】(看穿前置,使用监控中心生产秘钥) 第2组:Trade Front:180.168.146.187:10101,Market Front:180.168.146.187:10111;【电信】(看穿前置,使用监控中心生产秘钥) 第3组:Trade Front:180.168.146.187:10100,Market Front:180.168.146.187:10110;【电信】(非看穿前置) 规律是端口第三位0变成1。 该修改将于 (20190704)夜盘生效,如有不便敬请谅解
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值