先打开同花顺智能交易 SuperMind版,确保需要使用交易接口的账户处于已登录状态. 没有购买想体验?可以下载仿真版本创建模拟账户:http://zjcmpp.hexin.com.cn/download/lhjy3/Free/THS_Qstudio_Setup_Mfjy.exe 注意:只支持win系统。登录账号用同花顺账号登陆即可。如没有账号点击登录框左下角注册。
再进入量化交易标签下的研究环境
导入包
from tick_trade_api.api import TradeAPI
import pandas as pd
注意资金账户必须是在客户端已经登录!!
trade_api = TradeAPI(account_id='69271711') #填入已登录的资金账号
portfolio = trade_api.portfolio
返回一个NameDict对象,其中变量的意义可查询下面的表格。需要注意的是Namedict对象仅可以根据键值获取数值,并不具备字典可迭代等其他的特性
portfolio
portfolio['market_value']
变量 | 释意 |
---|---|
available_cash | 可用资金 |
market_value | 证券市值 |
frozen_cash | 冻结资金 |
total_value | 总资产 |
由于网络波动,极小概率出现查询超时报错,可以通过try、except等函数捕获该错误,操作如下:
for _ in range(3):
try:
positions = trade_api.positions
break
except:
continue
positions = trade_api.positions
返回一个字典对象,键值为证券代码;对应的数据为一个Namedict对象, 包含证券的各种信息。对应变量的意义可查询下面的表格。需要注意的是Namedict对象仅可以根据键值获取数值,并不具备字典可迭代等其他的特性
positions
positions['000001.SZ']['name']
变量 | 释意 |
---|---|
name | 股票名 |
available_amount | 可用证券数量 |
cost_basis | 成本 |
last_price | 最新价 |
amount | 证券数量 |
profit_rate | 收益率 |
frozen_amount | 冻结数量 |
market_value | 证券市值 |
symbol | 证券代码 |
pnl | 盈亏金额 |
以下提供一个将持仓信息转化为DataFrame对象的方法,可供进一步分析使用
vb_list = ['symbol', 'name', 'amount', 'available_amount', 'frozen_amount', 'cost_basis', 'last_price', 'market_value', 'pnl', 'profit_rate']
positions_df = pd.DataFrame()
for symbol, info in positions.items():
temp = pd.DataFrame([[info[vb] for vb in vb_list]], columns=vb_list, index=[0])
positions_df = pd.concat([positions_df, temp], ignore_index=True)
positions_df
当amount为负数时为卖出指令,下单成功后返回委托ID('order_id'),委托ID可用于撤单函数进行撤单。
trade_api.order(symbol='300033.SZ', amount=100)
当amount为负数时为卖出指令,下单成功后返回委托ID('order_id'),委托ID可用于撤单函数进行撤单。
trade_api.order(symbol='000001.SZ', amount=100, price=13.4)
可以通过指定pricetype实现更多样化的下单需求
pricetype | 意义 | pricetype | 意义 |
---|---|---|---|
0 | 指定价 | 1 | 涨停价 |
2 | 跌停价 | 3 | 最新价 |
4 | 卖一价 | 5 | 卖二价 |
6 | 卖三价 | 7 | 卖四价 |
8 | 卖五价 | 9 | 买一价 |
10 | 买二价 | 11 | 买三价 |
12 | 买四价 | 13 | 买五价 |
当pricetype为0时,以price的价格下单;
当pricetype为1-13时,price表示pricetype指定价格的浮动价,最终下单委托价格pricetype指定价格+price,若最终价格大于涨停价,最终价格取涨停价 , 若小于跌停价,最终价格取跌停价
trade_api.order(symbol='002109.SZ', amount=100, price=0.3, pricetype=8)
以卖五价上浮0.3元挂100股002109的买单
传入委托ID即可撤销指定未成交委托
trade_api.cancel_order('11591684178816')
如果该委托已成交或者已撤单则会报错
trade_api.cancel_order('11591684178816')
可以通过try、except等函数捕获该错误,操作如下
try:
trade_api.cancel_order('11591684178816')
except:
print('撤单失败: 不允许的指令:已完成或取消中的条件单不允许取消')
委托的结果可以通过get_orders函数查询, 同时也能在智能交易终端查看到
get_orders(order_id=None, start_time=None, end_time=None)
参数解释:
默认查询当日所有订单
trade_api.get_orders()
查询某笔订单的状态
trade_api.get_orders('941297')
查询历史订单
trade_api.get_orders(None,'20210810','20210819')
支持直接查询柜台的委托情况
trade_api.secondary_orders()
字段 | 含义 | _ | 字段 | 含义 |
---|---|---|---|---|
order_id | 委托编号 | _ | price | 委托价格 |
datetime | 时间 | _ | status | 委托状态 |
symbol | 证券代码 | _ | price_type | 委托价格类型 |
name | 证券名称 | _ | trade_price | 成交价格 |
side | 买卖方向 | _ | trade_amount | 成交数量 |
amount | 委托数量 | _ | secondary_order_id | 柜台委托编号 |
成交的结果可以通过get_tradelogs函数查询, 同时也能在智能交易终端查看到
trade_api.get_tradelogs()
字段 | 含义 | _ | 字段 | 含义 |
---|---|---|---|---|
datetime | 时间 | _ | trade_price | 成交价格 |
secondary_order_id | 柜台委托编号 | _ | amount | 成交数量 |
symbol | 证券代码 | _ | side | 买卖方向 |
name | 证券名称 | _ | commission | 费用 |
设定下列回调函数后,再下达委托函数,即可主动推送成交情况
def order_push(order):
print("接收到订单推送: ", order)
trade_api.register_push(orderpush=order_push)
trade_api.NEW_RECHASE(reprice=None, spread=0, entrustcnt=3, revoke=True, timeout=60)
参数解释:
创建一个自动追单下单对象 设置追单价格为82元,价差比为0.15,交易次数为3次,自动撤单,撤单时间为30秒
rechase_api = trade_api.NEW_RECHASE(reprice=82, spread=0.15, entrustcnt=3, revoke=True, timeout=5)
rechase_api.order('601012.SH',amount=100, price=79)
设置好追单参数以后, 自动下单追单对象的使用方法和普通下单api一样
此接口另有一隐藏参数repricetype,repricetype含义等同pricetype,指定repricetype时,reprice等同price,参考智能下单
rechase_api = trade_api.NEW_RECHASE(reprice=0.01, spread=0.15, entrustcnt=3, revoke=True, timeout=5, repricetype=10)
rechase_api.order('601012.SH', amount=200, price=79)
basket_api = trade_api.NEW_BASKET()
rechase_api = trade_api.NEW_RECHASE(reprice=None, spread=0, entrustcnt=3, revoke=True, timeout=60)
basket_api.add(symbol='000001.SZ', amount=100, algo_api=rechase_api) # 添加订单到篮子,可多次添加
basket_api.add(symbol='000001.SZ', amount=100, algo_api=rechase_api) # 添加订单到篮子,可多次添加
basket_api.add(symbol='000001.SZ', amount=100, algo_api=rechase_api) # 添加订单到篮子,可多次添加
basket_api.order(balance=1000) # 指定篮子使用的资金,默认0为全部
twap_api = trade_api.NEW_TWAP(start_time='09:30', end_time='15:00', order_interval=60, rechase_interval=30, min_order_number=100, max_order_number=10000)
参数解释:
算法说明:
1、算法根据起止时间、下单间隔、最大最小下单数量,来确定订单拆分笔数和每笔订单委托数量;
2、订单拆分完成后,每2笔订单下单时间间隔order_interval秒,每笔订单下单之后如未完成则间隔rechase_interval秒后进行撤补操作,撤补不影响下1笔订单,举例而言,一笔300股的订单,order_interval为60秒,rechase_interval为30秒,下单起止时间t1、t2间隔3分钟,则t1下单100股,t1+30s撤补,t1+60s下单100股,以此类推
创建一个TWAP下单对象,委托价格为最新价上浮0.01元,浮动范围为1元,下单间隔为60秒,撤补间隔为30秒
twap_api = trade_api.NEW_TWAP(start_time='09:30', end_time='15:00', order_interval=60, rechase_interval=30, min_order_number=100,
max_order_number=10000,randprice=1)
twap_api.order(symbol='000001.SZ', amount=100, price=0.01,pricetype=3) # 限价单,amount为负数代表卖出
vwap_api = trade_api.NEW_VWAP(start_time='09:30', end_time='15:00', order_interval=60, rechase_interval=30, min_order_number=100, max_order_number=10000, ordercycle=1, sampledays=30)
参数解释:
vwap_api = trade_api.NEW_VWAP(start_time='09:30', end_time='15:00', order_interval=60, rechase_interval=30, min_order_number=100, max_order_number=10000, ordercycle=1, sampledays=30)
vwap_api.order(symbol='000001.SZ', amount=100) # 最新价下单,amount为负数代表卖出
iceberg_api = trade_api.NEW_ICEBERG(start_time='09:30', end_time='15:00', order_percent=0.05, rechase_interval=30)
算法说明:
一个母单拆成多个小单。
每笔子单的数量是一定的,子单数量 = 委托数量 每单占比 , 取下整(手)
一笔子单不成交,达到撤单间隔时会撤单,撤单成功后再委托下一笔子单。
5种委托方式:
全成即补:前一个子单全部成交完成,后一个子单才会发单。
部成即补:前一个子单部分成交,后一个子单即委托出去,但是必须等到第一个子单全部成交,第二个子单部分成交,才可以委托第三个子单。
成交占比:比如总委托量是10000,暴露量是1000。当比例是50%,第一次暴露量是1000,然后部分成交了400(100040%),是不会到第二次补单的;一直到成交了大于等于500(1000*50%)才会第二次委托。同时,必须等到第一个子单全部成交,第二个子单到50%,才可以委托第三个子单。
成交超时:指超过一定时间,虽未成交,但也自动再补一笔。成交超时的规则:比如900s,指的是如果第一笔委托后900s,仍旧出现未成交or部分成交,就直接开始第二次委托。同时,必须等到第一个子单全部成交,第二个子单到委托后900s,才可以委托第三个子单。
占比和超时同时设置:则只需要并且必须其中任何一个满足条件,才进行委托
iceberg_api = trade_api.NEW_ICEBERG(start_time='09:30', end_time='15:00', order_percent=0.05, rechase_interval=30)
iceberg_api.order(symbol='000001.SZ', amount=100) # 最新价下单,amount为负数代表卖出
先打开同花顺智能交易 SuperMind版,确保需要使用交易接口的信用账户处于已登录状态
导入包
from tick_trade_api.api import TradeCredit as TradeAPI, SIDE
建立连接
trade_api = TradeAPI(account_id='18771019820')
账号各类资产及委托查询函数
print("账号信息:", trade_api.portfolio)
print("持仓信息:", trade_api.positions)
print("成交信息:", trade_api.get_tradelogs())
print("委托信息:", trade_api.get_orders()) # 可传入order_id查询指定委托信息
print("柜台委托信息:", trade_api.secondary_orders())
print("可融资标的券:", trade_api.get_stocks()
trade_api.order(symbol='000001.SZ', amount=100, side=SIDE.BUY) # 最新价下单,担保品买入
trade_api.order(symbol='000001.SZ', amount=100, side=SIDE.FINANCE_BUY) # 最新价下单,融资买入
trade_api.order(symbol='000001.SZ', amount=100, side=SIDE.SALE) # 最新价下单,担保品卖出
trade_api.order(symbol='000001.SZ', amount=100, side=SIDE.STOCK_SALE) # 最新价下单,融券卖出
trade_api.order(symbol='000001.SZ', amount=100, price=10, side=SIDE.BUY) # 限价单
trade_api.cancel_order('107828')