文章目录
时序
开发环境
阿里云容器化服务
Demo
环境准备
docker run -itd --name pyctp haifengat/pyctp:2.3.2
docker pull haifengat/pyctp
demo
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from py_ctp.quote import CtpQuote
from py_ctp.enums import *
import time
class TestQuote(object):
"""TestQuote"""
def __init__(self, addr: str, broker: str, investor: str, pwd: str):
""""""
self.front = addr
self.broker = broker
self.investor = investor
self.pwd = pwd
self.q = CtpQuote()
self.q.OnConnected = self.onconnect
self.q.OnUserLogin = self.onrspuserlogin
def run(self):
self.q.ReqConnect(self.front)
def onconnect(self, obj):
print("connected")
self.q.ReqUserLogin(self.investor, self.pwd, self.broker)
def onrspuserlogin(self, obj, info):
print(info)
self.q.ReqSubscribeMarketData('rb2009')
def release(self):
self.q.ReqUserLogout()
if __name__ == "__main__":
front_quote = 'tcp://180.168.146.187:10111'
broker = '9999'
investor = '008105'
pwd = '1'
appid = 'simnow_client_test'
auth_code = '0000000000000000'
if investor == '':
investor = input('invesotr:')
pwd = input('password:')
appid = input('appid:')
auth_code = input('auth code:')
qq = TestQuote(front_quote, broker, investor, pwd)
qq.run()
input()
qq.release()
input()
QA
官方地址 http://www.simnow.com.cn/
交易环境
测试
注册simnow,获取帐号密码。
生产&仿真
开通期货帐号获得生产帐号密码(具体事宜咨询期货公司),开通正式帐号后可申请仿真环境。
前置
模拟 simnow
配置
行情 | 交易 | 说明 |
---|---|---|
tcp://180.168.146.187:10110 | tcp://180.168.146.187:10100 | 电信 |
tcp://180.168.146.187:10111 | tcp://180.168.146.187:10101 | 电信 |
tcp://218.202.237.33 :10112 | tcp://218.202.237.33 :10102 | 移动 |
broker | app id | auth code |
---|---|---|
9999 | simnow_client_test | 0000000000000000(16个0) |
交易规则
-
期货交易按照交易所公布的买一卖一价对价成交;
-
买入时:如果委托价大于等于卖一价,则成交,成交价为委托价、卖一价、最新价三价取中,如果委托价小于卖一价,不能成交,等待更优的行情才能成交;
-
卖出时:如果委托价小于等于买一价,则成交,成交价为委托价、买一价、最新价三价取中,如果委托价大于买一价,不能成交,等待更优的行情才能成交。
生产&仿真
咨询期货公司
前置连接失败
telnet 前置地址:端口,检查网络是否连通,服务器是否开启
登录需验证
默认行情登录不验证,某些期货公司有开了验证的,需要正确填写Broker/Investorid/password/appid/authcode。
收不到订阅的行情
检查订阅的合约是否正确(注意大小写),确认订阅的合约是有行情的.
检查端口号为行情端口而非交易端口
Tick与分笔
国内期货只有tick数据,即行情快照。快照数量各交易所不同,不同行情服务也不同,通常为2次/秒。
Tradingday与Actionday
tradingday为交易日,actionday为实际行情日期。
不要使用行情中的actionday,某些交易所actionday不正确。
actionday计算方法
取当前交易日 tradingday
取前一交易日 pre_tradingday
取前一交易日的后一自然日 next_pre_day
行情时间 >= 20:00:00 actionday = pre_tradingday
行情时间 <= 03:00:00 actionday = next_pre_day
其他时间 actionday = tradingday
ExchangeID
行情中的Exchangeid字段可能为NULL 不要用
行情中的double.max
遇到涨跌停或其他没有行情的情况,某些字段会被 double.max (即FFFFFFFF) 填充,需要过滤掉。
AveragePrice
均价,即实时图中的黄线。
除郑商所合约(CZCE)外需除以合约乘数(VOLUMEPULTIPLE)
Tick->K线
K线时间
标注时间
用时间段开始的时间
09:00:00-9:00:59的数据显示为9:00:00
用结束时间
09:00:01-9:01:00显示为9:01:00
小节收盘时间的处理
小时时间:10:15:00/11:30:00/15:00:00
前归,将小节时间的tick作为前一分钟的数据,此时需修改tick分钟。
K线计算逻辑
- 取tick分钟
- 判断是否新K线
- 是:open,high,low,close = lastprice volume=0 openterest = openterest
- 否:high=max(high,lastprice) low=min(low, lastprice) close=lastprice volume=volume-pre_tick_volume openterest = openterest
- 非交易时间段数据
- 竞价成交(08:59 20:59)
- 小节结束/收盘(10:15 11:30 15:00 15:15 23:00 23:30 01:00 02:30)
- 处理方式
- 向前/后归
- 放弃
实时数据处理
https://hub.docker.com/repository/docker/haifengat/ctp_real_md
docker pull haifengat/ctp_real_md
使用方法
docker run -itd --name tmp haifengat/ctp_real_md
docker cp tmp:/home/docker-compose.yml .
docker cp tmp:/home/pgdata.tgz .
tar -xzf pgdata.tgz
docker rm -f tmp
docker-compose up -d