前言
今天要讲的是关于股票交易的函数,主要分为了三个章节来讲,感兴趣的小伙伴可以在专栏下面查看完整版的!
具体的开通渠道可以看文章末尾!
一、order——按数量买卖
这个函数就是我们日常买卖股票最常用的方法,按照股票数量来买卖!还有一个特点是,这个函数是支持国债逆回购的!
注意事项:
1、支持交易场景的逆回购交易。委托方向为卖出(amount必须为负数),逆回购最小申购金额为1000元(10张),因此本接口amount入参应大于等于10(10张),否则会导致委托失败。
2、回测场景,amount有最小下单数量校验,股票、ETF、LOF:100股,可转债:10张;交易场景接口不做amount校验,直接报柜台。
3、交易场景如果limit_price字段不入参,系统会默认用行情快照数据最新价报单,假如行情快照获取失败会导致委托失败,系统会在日志中增加提醒。
4、由于下述原因,回测中实际买入或者卖出的股票数量有时候可能与委托设置的不一样,针对上述内容调整,系统会在日志中增加警告信息:
1.根据委托买入数量与价格经计算后的资金数量,大于当前可用资金;
2.委托卖出数量大于当前可用持仓数量;
3.每次交易股票时取整100股,交易可转债时取整10张,但是卖出所有股票时不受此限制;
4.股票停牌、股票未上市或者退市、股票不存在;
5.回测中每天结束时会取消所有未完成交易;
示例
def initialize(context):
g.security = ['600570.SS', '000001.SZ']
set_universe(g.security)
def handle_data(context, data):
#以系统最新价委托
order('600570.SS', 100)
# 逆回购1000元
order('131810.SZ', -10)
#以39块价格下一个限价单
order('600570.SS', 100, limit_price=39)
二、order_target —— 指定目标数量买卖
主要是用来买卖股票,不支持国债逆回购,购买股票知道某一个限值!
注意事项:
1、该函数不支持逆回购交易。
2、该函数在委托股票时取整100股,委托可转债时取整10张。
3、交易场景如果limit_price字段不入参,系统会默认用行情快照数据最新价报单,假如行情快照获取失败会导致委托失败,系统会在日志中增加提醒。
4、因可能造成重复下单,因此建议在交易中谨慎使用该接口。具体原因如下:
1.柜台返回持仓数据体现当日变化(由柜台配置决定):交易场景中持仓信息同步有时滞,一般在6秒左右,假如在这6秒之内连续下单两笔或更多order_target委托,由于持仓数量不会瞬时更新,会造成重复下单。
2.柜台返回持仓数据体现当日变化(由柜台配置决定):第一笔委托未完全成交,如果不对第一笔做撤单再次order_target相同的委托目标数量,引擎不会计算包括在途的总委托数量,也会造成重复下单。
3.柜台返回持仓数据不体现当日变化(由柜台配置决定):这种情况下持仓数量只会一天同步一次,必然会造成重复下单。
针对以上几种情况,假如要在交易场景使用该接口,首先要确定券商柜台的配置,是否实时更新持仓情况,其次需要增加订单和持仓同步的管理,来配合order_target使用。
示例
def initialize(context):
g.security = ['600570.SS', '000001.SZ']
set_universe(g.security)
def handle_data(context, data):
#买卖恒生电子股票数量到100股
order_target('600570.SS', 100)
#卖出恒生电子所有股票
if data['600570.SS']['close'] > 39:
order_target('600570.SS', 0)
三、order_value —— 指定目标价值买卖
用来买卖指定价值的股票
order_value(security, value, limit_price=None)
注意事项:
1、该函数不支持逆回购交易。
2、该函数在委托股票时取整100股,委托可转债时取整10张。
3、交易场景如果limit_price字段不入参,系统会默认用行情快照数据最新价报单,假如行情快照获取失败会导致委托失败,系统会在日志中增加提醒。
示例
def initialize(context):
g.security = ['600570.SS', '000001.SZ']
set_universe(g.security)
def handle_data(context, data):
#买入价值为10000元的恒生电子股票
order_value('600570.SS', 10000)
if data['600570.SS']['close'] > 39:
#卖出价值为10000元的恒生电子股票
order_value('600570.SS', -10000)