《AlgoPlus使用手册》之全天候模拟测试
微信公众号AlgoPlus
您的认可是我们最大的动力!
欢迎关注、点赞、转发、收藏!
将AlgoPlus设为星标,及时获取最新研究成果!
注册Simnow模拟账号
1、Simnow是上海期货交易所旗下技术公司维护的一套模拟交易系统,只需注册账号即可免费使用:http://www.simnow.com.cn/
2、在常用下载页面下载客户端,方便实时查看模拟交易情况:http://www.simnow.com.cn/static/softwareDownload.action
3、记录个人主页中的InvestrorID,以及产品与服务页面中的服务器地址。配置账户参数时需要使用这些信息。
另外,如果偶遇simnow官网无法登录的情况,在AlgoPlus公众号回复simnow,可获取服务器相关参数。
安装AlgoPlus
好交易不求甚解安装法:
- pip install命令安装:
pip install AlgoPlus
- easy_install命令安装:
easy_install AlgoPlus
Windows系统编译安装
1、安装Visual Studio 2019
微软官网地址:https://visualstudio.microsoft.com/zh-hans/downloads/
6.65GB!如果对VS没有其他需求,建议选择在线安装。
2、下载AlgoPlus
码云(推荐):https://gitee.com/AlgoPlus/AlgoPlus
GitHub(慢):https://github.com/CTPPlus/AlgoPlus
3、在Windows系统安装
① 解压AlgoPlus
② 双击运行\AlgoPlus\tools\ctp\install_ctp.bat
如果你看到了:
Traceback (most recent call last):File "setup.py", line 7, in <module>from Cython.Build import cythonize, build_ext
ModuleNotFoundError: No module named 'Cython'
Traceback (most recent call last):File "setup.py", line 7, in <module>from Cython.Build import cythonize, build_ext
ModuleNotFoundError: No module named 'Cython'
我好像也发现了什么。好吧,请执行以下代码安装Cython后,再次运行安装脚本:
conda install Cython
当你看到以下内容时:
Processing dependencies for AlgoPlus==1.5
Finished processing dependencies for AlgoPlus==1.5
请按任意键继续. . .
恭喜你!你已成为AlgoPlus的一员了!让我们一起将交易进行到底!
如果幸运女神再次眷顾了你,给了我们再次深入交流的机会,那还等什么,房间都开好了(http://www.ctp.plus)。
安装代码编辑器
我推荐使用PyCharm。
官网地址
https://www.jetbrains.com/pycharm/download/#section=windows
Community版与Professional版有什么区别呢?能省不少钱呐。
安装
根据提示完成安装,遇到Installation Options时,勾选以下选项:
为AlgoPlus项目配置解释器
1、找到解压后的AlgoPlus文件夹,鼠标右键单击根目录空白处;
2、单击菜单中【Open Folder as Project】选项;
3、在新窗口单击File菜单中的【Settings…】选项;
4、找到【Project: AlgoPlus】下的【Project Interpreter】,选择python解释器环境;
5、单击【Apply】。
print hello world!
作为“程序员”,不把hello world打印出来怎么能彰显bigger呢。瞧,代码我都准备好了,就是这么贴心!
1、在AlgoPlus项目中打开\exemplification\1环境配置与安装\hello world.py;
2、鼠标右键单击文件内任意位置;
3、单击新菜单中的【Run ‘hello world’】。
配置账户参数
存放目录:
\AlgoPlus\exemplification\6报单(买卖开平)及回报\account_info.py
源代码:
# -*- coding: utf-8 -*-BASE_LOCATION = "." # 根目录地址
MD_LOCATION = BASE_LOCATION + "\\MarketData" # 行情数据地址
TD_LOCATION = BASE_LOCATION + "\\TradingData" # 交易数据地址
SD_LOCATION = BASE_LOCATION + "\\StrategyData" # 策略数据地址class FutureAccountInfo:def __init__(self, broker_id, server_dict, reserve_server_dict, investor_id, password, app_id, auth_code, instrument_id_list, md_page_dir=MD_LOCATION, td_page_dir=TD_LOCATION):self.broker_id = broker_id # 期货公司BrokerIDself.server_dict = server_dict # 服务器地址。TDServer为交易服务器,MDServer为行情服务器。服务器地址格式为"ip:port"self.reserve_server_dict = reserve_server_dict # 备用服务器地址self.investor_id = investor_id # 账户self.password = password # 密码self.app_id = app_id # 认证使用AppIDself.auth_code = auth_code # 认证使用授权码self.instrument_id_list = instrument_id_list # 订阅合约列表[]self.md_page_dir = md_page_dir # MdApi流文件存储地址,默认MD_LOCATIONself.td_page_dir = td_page_dir # TraderApi流文件存储地址,默认TD_LOCATIONmy_future_account_info_dict = {# 交易时间测试'SimNow': FutureAccountInfo(broker_id='9999' # 期货公司BrokerID# TDServer为交易服务器,MDServer为行情服务器。服务器地址格式为"ip:port", server_dict={'TDServer': "180.168.146.187:10100", 'MDServer': '180.168.146.187:10110'}# 备用服务器地址, reserve_server_dict={'电信1': {'TDServer': "180.168.146.187:10100", 'MDServer': '180.168.146.187:10110'},'电信2': {'TDServer': "180.168.146.187:10101", 'MDServer': '180.168.146.187:10111'},'其他1': {'TDServer': "180.168.146.187:10130", 'MDServer': '180.168.146.187:10131'}, # 7*24'其他2': {'TDServer': "218.202.237.33:10102", 'MDServer': '218.202.237.33:10112'}, # 移动}, investor_id='' # 账户, password='' # 密码, app_id='simnow_client_test' # 认证使用AppID, auth_code='0000000000000000' # 认证使用授权码# 订阅合约列表, instrument_id_list=[b'rb2001', b'ni2001', b'ag1912', b'j2001', b'TA001']),
}
说明:
1、FutureAccountInfo类定义了期货账户的所有属性;
2、my_future_account_info_dict是所有账户类的字典。使用时根据键值获取对应账户类属性。
3、MdApi实例会生成DialogRsp.con、QueryRsp.con、TradingDay.con三个流文件,存储在MD_LOCATION目录中,默认是当前目录下的MarketData文件夹。TraderApi实例会生成DialogRsp.con、Private.con、Public.con、QueryRsp.con、TradingDay.con五个流文件,存储在TD_LOCATION目录中,默认是当前目录下的TradingData文件夹。
4、实盘账户参数可从期货公司获取。
5、关于看穿式监管认证,我们会未来给大家讲解。
6、范例配置的是Simnow模拟账户。在补充账户investor_id、密码password和服务器地址server_dict(交易时间选择电信1/电信2/其他2,非交易时间选择其他1。7*24服务器在注册3个交易日后才能使用。)之后,就可以进行下一步了。
7、账户参数还可以被存储为其他形式。如果大家感兴趣,我们未来会写一个用json文件保存账户参数的例子。
运行测试文件
存放目录:
\AlgoPlus\exemplification\6报单(买卖开平)及回报\trader_engine.py
源代码:
# -*- coding: utf-8 -*-from AlgoPlus.CTP.TraderApi import TraderApi
from AlgoPlus.CTP.ApiStruct import *
import timeclass 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 = 0self.Join()# 报单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:# ############################################################################# ## 涨停买开仓self.order_ref += 1self.buy_open(test_exchange_id, test_instrument_id, test_raise_limited, test_vol, self.order_ref)self._write_log(f"=>发出涨停买开仓请求!10秒后后进行卖平仓测试。")time.sleep(10)# 跌停卖平仓self.order_ref += 1self.sell_close(test_exchange_id, test_instrument_id, test_fall_limited, test_vol, self.order_ref)self._write_log(f"=>发出跌停卖平仓请求!10秒后进行卖开仓测试。")time.sleep(10)# ############################################################################# ## 跌停卖开仓self.order_ref += 1self.sell_open(test_exchange_id, test_instrument_id, test_fall_limited, test_vol, self.order_ref)self._write_log(f"=>发出跌停卖平仓请求!10秒后进行买平仓测试。")time.sleep(10)# 涨停买平仓self.order_ref += 1self.buy_close(test_exchange_id, test_instrument_id, test_raise_limited, test_vol, self.order_ref)self._write_log(f"=>发出涨停买平仓请求!")time.sleep(10)# ############################################################################# #print("老爷,这里的测试工作AlgoPlus已经按照您的吩咐全部完成!")print("老爷,这里的测试工作AlgoPlus已经按照您的吩咐全部完成!")breaktime.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 syssys.path.append("..")from account_info import my_future_account_info_dictfuture_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、先配置102-106行测试合约的参数。
2、测试交易的逻辑是:确认结算单完成后,先以涨停板买开仓,3秒后以跌停板卖平仓,再3秒后以跌停板卖开仓,再3秒后以涨停板买平仓。最后等待3秒退出程序。
《AlgoPlus使用手册》之全天候模拟测试相关推荐
- 《AlgoPlus使用手册》之看穿式监管认证
微信公众号:AlgoPlus 欢迎关注点赞转发收藏! 您的认可是我们最大的动力! 将AlgoPlus设为星标,及时获取最新研究成果! 提交申请 看穿式认证申请,除了提交个人信息之外,还需要提交以下信息 ...
- 2018冬令营模拟测试赛(十八)
2018冬令营模拟测试赛(十八) [Problem A]Table 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见"试题描述&qu ...
- 2018冬令营模拟测试赛(九)
2018冬令营模拟测试赛(九) [Problem A]王子 试题描述 不是所有王子都会遇见自己的中关村,主公,公主. 从前有个王子姓王,王王子遇到了一位美丽的公主,她的名字当然是公公主啦. 王王子对公 ...
- Mockito:一个强大的用于Java开发的模拟测试框架
介绍 本文将介绍模拟测试框架Mockito的一些基础概念, 介绍该框架的优点,讲解应用Mockito的Java示例. 模拟(Mock)的概念 在软件开发的世界之外, "mock"一 ...
- WebRTC通话质量调优:三个弱网模拟测试工具的使用与对比
作为一个使用 WebRTC 独立开发者或团队,怎样才能知道自己 App 的通话质量已经"达标"了呢?如何进行合理的弱网模拟测试?介绍给开发者们三个开源工具的部署.使用方法,及其各自 ...
- NOIP模拟测试19「count·dinner·chess」
反思: 我考得最炸的一次 怎么说呢?简单的两个题0分,稍难(我还不敢说难,肯定又有人喷我)42分 前10分钟看T1,不会,觉得不可做,完全不可做,把它跳了 最后10分钟看T1,发现一个有点用的性质,仍 ...
- 测试http请求的Chrome插件:Postman插件的查找安装模拟测试 - 讲解篇
一个测试http请求的Chrome插件:Postman 本文简述一下这个Chrome插件:Postman插件的查找.下载.安装. 这里需要合法的VPN服务商,具体原因你懂的. Chrome资源查找下载 ...
- php代码练习,PHP模拟测试练习
PHP模拟测试练习 宝剑不磨要生锈;人不学习要落后.以下是小编为大家搜索整理的PHP模拟测试练习,希望能给大家带来帮助!更多精彩内容请及时关注我们应届毕业生考试网! 一.单项选择题 1.下列哪些是PH ...
- 合肥信息技术职业学院计算机模拟考试准考证,【通知】全国计算机等级考试模拟测试通知...
原标题:[通知]全国计算机等级考试模拟测试通知 全国计算机等级考试模拟测试来了 这里有小塔的秘密笔记哟 全国计算机等级考试模拟测试 1 模拟测试地点 16号教学楼2楼 2 模拟测试的安排 时间 地点 ...
最新文章
- 区块链项目实战 - 使用以太坊/智能合约solidity,全栈开发区块链借贷记账小应用,含完整源码
- ros的密码忘记解决方法
- 是什么管脚分配_FPGA是什么?里面有什么?能做什么?
- 王爽汇编第九章学习笔记
- IT部门如何应对VDI问题
- 商用平板 移动金融潜力巨大的应用平台
- UTF与ascii区别
- PHP第一天 ① 重置端口命令 netsh winsock reset
- 知名国产论坛,凉了!!!!
- 调用函数,判断一个数是否为素数
- 关于三极管的理解---根据IC符号简易迅速判断三极管导通情况
- 浏览器 文本转语音播放 Demo [SpeechSynthesis]
- Zookeeper(七)开源客户端
- 计算机系统存储器 分类,存储器的分类
- 企业微信周末加班怎么打卡?
- 逻辑函数公式化化简_数字IC面试题
- 为什么程序员难找对象?
- 计算机错误代码0X000000be,win7电脑出现蓝屏错误0x000000BE的解决方法
- 多商家商城系统有哪些功能
- 计算机上静音快捷键是什么,电脑静音快捷键是什么(如何设置电脑一键静音?)...