美文网首页
量化入门 - JoinQuant入门学习1

量化入门 - JoinQuant入门学习1

作者: FANDX | 来源:发表于2021-07-28 18:18 被阅读0次

    下单相关的API

    参考连接:https://www.joinquant.com/view/community/detail/3c7c9e987e011d531cf81222c83f7925

    order(security, amount,...)

    下单指定股数

    股票示例

    • order('000001.XSHE',100) 买进100股平安银行
    • order('000001.XSHE',-100) 卖出100股平安银行,如果没有仓位,会有相关的warning
    • order('000001.XSHE',99) 下单数不足一手,调整为0股,订单取消,返回None,会有相关的warning

    期货示例

    • order('IF1901',10,side='long') 开多10手IF1901 默认side='long',所以当开多仓或者平多仓时可以不指定side
    • order('IF1901',-5,side='short') 平空5手IF1901,如果空仓仓位不足5手,则平掉所有空仓,有相关warning

    order_target(security, amount, ...)

    调整指定股票到指定股数

    股票示例(假设下单前已经持有了平安银行500股且全部可平仓):

    • order_target('000001.XSHE',700) 调整平安银行的持股数至700股,也就是再买入200股平安银行
    • order_target('000001.XSHE',200) 调整平安银行的持股数至200股,也就是卖出300股平安银行
    • order_target('000001.XSHE',500) 目标数量已满足,不再调整
    • 注:当value为0时,即时有不足100股的股票,也会全部进行平仓

    期货示例(假设下单前已经持有了IF1901空单5手,多单3手)

    • order_target('IF901.CCFX',2,side='long') 调整多单仓位至2手,之前已经有3手多单,所以平掉一手多单
    • order_target('IF901.CCFX',7,side='short') 调整空单仓位至7手,之前已经有5手空单,所以在开2手空单
    • order_target('IF901.CCFX',5,side='short') 空单仓位数量已经满足,不再调整,不会创建order对象,返回None,会有相关日志输出

    order_value(security, value, ....)

    下单指定金额用来购买指定股票,遵循向下取整原则。

    股票示例(假设平安银行下单时最新价为10元):

    • order_value('000001.XSHE',10000) 10000/10 = 1000股 ,买入平安银行1000股
    • order_value('000001.XSHE',750) 7500/10 = 750股,调整为700股,买入平安银行700股
    • order_value('000001.XSHE',999) 999/10 = 99.9股,调整为0股,不会创建order对象,返回None,会有相关日志输出
    • order_value('000001.XSHE',-2000) -2000/10 = -200 股,等同于order('000001.XSHE',-200)

    order_target_value(security, value, ...)

    下单让仓位指定到指定的金额,会自动计算来价格来控制持仓。

    股票示例(假设目前已持有平安银行500股且全部可平仓,下单时最新价为10元):

    • order_target_values('000001.XSHE',10000) 10000/10 = 1000股,也就是再买入500股平安银行
    • order_target_values('000001.XSHE',5000) 5000/10 = 500股,目标数量已满足,不会创建order对象,返回None,会有相关日志输出
    • order_target_values('000001.XSHE',5999) 5999/10 = 599.9股,调整为500股,目标数量已满足,不会创建order对象,返回None,会有相关日志输出
    • order_target_values('000001.XSHE',3550) 3550/10 = 355股,应当卖出145股,调整为100股,卖出100股平安银行
    • 注:当value为0时,即时有不足100股的股票,也会全部进行平仓

    关于order/trader对象以及订单处理

    参考链接:https://www.joinquant.com/view/community/detail/2ecedbc451f8345c2aefdc11fcd0d1a6

    订单处理

    从委托到成交的流程:
    • 订单创建->订单检查->报单->确认委托->撮合,在订单检查时未通过则订单取消;
    • 非交易时间下单会等待交易时间再进行撮合,每天16:00对所有未完成订单信息进行撤销(期货交易所将夜盘归于下一个交易日)
    Order下单后,持仓/可用资金变化情况
    • 所有市价单下单之后同步完成(也即 order_XXX 系列函数返回时完成), context.portfolio 会同步变化。
    • 限价单,下单之后 context.portfolio.available_cash 和 context.portfolio.positions 不会同步变化 ,以order StockOrder出现的时间为准。
    • 无论市价单还是限价单,买入时仓位资金会同步变化(如果已下单,未成交,会冻结对应的资金到locked_cash),卖出时每产生一个Trade对象(交易)账户资金同步变化一次。

    交易函数

    下限价单指定style=LimitOrderStyle(目标价位) 即可, 买入时不能高于目标价位, 卖出时不能低于目标价位, 如果不满足, 则等待满足后再交易,注意股票的交易单位为每手100股。

    下单失败可以查看日志中对应时间点的warning,有详细说明
    下单可能的失败原因:

    1. 标的数量经调整后变成0 (请看下面的说明)。
    2. 标的停牌。
    3. 标的成交量不足以交易(涨停,跌停等)。
    4. 标的未上市或者退市。
    5. 标的不存在。
    6. 为股票、基金开了空单。
    7. 选择了不存在的仓位号,如没有建立多个仓位,而设定pindex的数大于0。

    注意,下单如果是废单,那么返回值是None,所以不能打印Order订单的实际数据。

    交易订单会遵循的原则
    1. 卖出时会根据您持有股票的数量来限制您卖出的数量。
    2. 我们会遵守A股交易规则: 每次交易数量只能是100的整数倍, 但是卖光所有股票时不受这个限制。
    3. 在下单时会根据您当前的可用资金,成交量等对下单股数进行调整。
    4. 您在触发下单信息时自己打印的成交记录(信息)并不是特别可靠,请以实际结果及日志信息为准,系统会在每天16:00取消所有未完成交易(撤单),查询get_orders(status=OrderStatus.canceled)需要在16点至17点之间查询。

    Order对象

    重点注意:每天17点聚宽会对order对象进行归类,17点之后在调取get_orders获取的order对象就是属于第二天的订单,那么在get_orders获取当天的订单的时候就会出现错误

    get_orders会返回一个Order对象,里面是UserOrder对象的值

    UserOrder({'status': open, 'style': LimitOrderStyle: _limit_price=7.58, 'order_id': 1536135521, 'price': 0.0, 'pindex': 0, 'amount': 100, 'action': u'open', 'security': '000001.XSHE', 'side': u'long', 'filled': 0, 'add_time': datetime.datetime(2016, 6, 1, 9, 30)})
    

    OrderStatus对象

    1. 通过 order对象.status 获取到的结果是一个枚举对象。

    2. 如果想查询状态是否是某种状态,需要获取具体的属性或者和status对象直接进行比较。

    3. 由于(回测/模拟)16点会撤销未完成订单,17点后通过get_orders等获取的order对象归属于下一交易日,所以查询时需要注意这两个时间点。

    # 盘后获取当天未完成的订单(包括盘后自动撤销的限价单)
    def func(context):  #16:00之后,17点之前运行
        order_dict = get_orders(status = OrderStatus.canceled)
        
    

    获取trader中的信息

    ## 收盘后运行函数  
    def after_market_close(context):
        #得到当天所有成交记录
        trades = get_trades()
        # 循环去打印出每一单的成交记录
        for _trade in trades.values():
            log.info('成交记录:'+str(_trade))
        print('-'*50)
    

    聚宽投资研究使用

    参考连接:https://www.joinquant.com/view/community/detail/34426b055bc8600cba6abec85d164ea5

    其实聚宽的投资研究环境使用的Jupyter,本地安装Anaconda环境都会去自动安装Jupyter,提供了非常方便的python实时运行环境,方便做数据分析研究。聚宽的研究模块支持以下功能

    • 每个Cell独立运行,实时查看结果;
    • 支持使用matplotlib/seaborn等Python库画各种统计图;
    • 支持Markdown和代码混排,可读性更好;
    • Notebook支持分享到社区,方便与大家交流;

    常用的快捷键(命令模式下)

    ![ image-20210728164850268.png

    常用的快捷键(编辑模式下)

    ](https://img.haomeiwen.com/i14862829/27525d324d3e7e4f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    快捷键总结

    两种模式
    • 编辑模式 (默认,Enter 键启)
    • 命令行模式(按键esc)
    编辑模式
    • Tab : 代码补全或缩进
    • Shift-Tab : 提示
    • ctrl-/:注释
    • Ctrl-A : 全选
    • Ctrl-Z : 复原
    • Ctrl-Home : 跳到单元开头
    • Ctrl-Up : 跳到单元开头
    • Ctrl-End : 跳到单元末尾
    • Ctrl-Down : 跳到单元末尾
    • Ctrl-Delete : 删除后面一个字
    • Shift-Enter : 运行本单元,选中下一单元
    • Ctrl-Enter : 运行本单元
    • Alt-Enter : 运行本单元,在下面插入一单元
    • Ctrl-S : 文件存盘
    • Up : 光标上移或转入上一单元
    • Down :光标下移或转入下一单元
    • Esc : 进入命令模式
    命令行模式
    • Shift-Enter : 运行本单元,选中下个单元
    • Ctrl-Enter : 运行本单元
    • Alt-Enter : 运行本单元,在其下插入新单元
    • Y : 单元转入代码状态
    • M :单元转入markdown状态
    • R : 单元转入raw状态
    • 1 : 设定 1 级标题
    • 2 : 设定 2 级标题
    • 3 : 设定 3 级标题
    • Up : 选中上方单元
    • K : 选中上方单元
    • Down : 选中下方单元
    • J : 选中下方单元
    • Shift-K : 扩大选中上方单元
    • Shift-J : 扩大选中下方单元
    • A : 在上方插入新单元
    • B : 在下方插入新单元
    • X : 剪切选中的单元
    • C : 复制选中的单元
    • Shift-V : 粘贴到上方单元
    • V : 粘贴到下方单元
    • Z : 恢复删除的最后一个单元
    • D,D : 删除选中的单元
    • Shift-M : 合并选中的单元
    • S : 文件存盘
    • L : 转换行号
    • H : 显示快捷键帮助
    • I,I : 中断Notebook内核
    • 0,0 : 重启Notebook内核
    • Enter : 转入编辑模式

    相关文章

      网友评论

          本文标题:量化入门 - JoinQuant入门学习1

          本文链接:https://www.haomeiwen.com/subject/vuazmltx.html