量化交易 回测交易接口

概述

在建立自己的量化策略回测系统之前, 我们必须对策略回测中的一些接口有一定的了解.

API 文档:
https://www.ricequant.com/doc/quant/strategy-api.html#交易相关函数

交易函数

指定股票交易

order_shares - 指定股票交易 (股票专用)

order_shares(id_or_ins, amount, style=MarketOrder())

落指定股数的买 / 卖单, 最常见的落单方式之一. 如有需要落单类型当做一个参量传入, 如果忽略掉落单类型, 那么默认是市价单 (market order)

参数:

参数 类型 注释
id_or_ins str 或 instrument 对象 order_book_id 或 symbol 或 instrument 对象,用户必须指定
amount float-required 需要落单的股数。正数代表买入,负数代表卖出。将会根据一手 xx 股来向下调整到一手的倍数,比如中国 A 股就是调整成 100 股的倍数。
style OrderType 订单类型,默认是市价单。目前支持的订单类型有: style=MarketOrder(), style=LimitOrder(limit_price)

返回:

Order 对象

范例:

  • 购买 Buy 2000 股的平安银行股票, 并以市价单发送:
order_shares('000001.XSHE', 2000)

卖出 2000 股的平安银行股票, 并以市价单发送:

扫描二维码关注公众号,回复: 12737795 查看本文章
order_shares('000001.XSHE', -2000)

购买 1000 股的平安银行股票, 并以限价单发送, 价格为¥ 10:

order_shares('000001.XSHE', 1000, style=LimitOrder(10))

目标价值下单

order_target_value - 目标价值下单 (股票专用)

order_target_value(id_or_ins, cash_amount, style=OrderType)

买入 / 卖出并且自动调整该证券的仓位到一个目标价值 (暂不支持卖空). 如果还没有任何该证券的仓位, 那么会买入全部目标价值的证券.如果已经有了该证券的仓位, 则会买入 / 卖出调整该证券的现在仓位和目标仓位的价值差值的数目的证券。需要注意,如果资金不足,该 API 将不会创建发送订单。

交易注意事项

拒单

出现以下情况, 我们的交易会被回测平台自动拒单:

  1. protfolio 内可用资金不足
  2. 下单数量不足一手 (100 股股票为一手)
  3. 下单价格超过当然涨停跌停板限制
  4. 当前可买 (可卖) 仓位不足
  5. 股票当日停牌
  6. 合约已经退市 (到期) 或尚未上市

市价 vs 限价

限价单 (LimitOrder) 如果买单价格 >= 参考价. 或卖单价格 <= 参考价, 以参考价加入滑点影响成交 (买的更高, 卖的更低). 市价单 (MarketOrder) 直接以参考价加入滑点影响成交.

成数量都不能超过当前 bar 成交量的 25%. 比如某一分钟成交量 10000 股, 那么回测的时候我们做限制成交不能超过 2500 股. 一旦超过, 市价单在部分成交之后被自动撤单. 限价单会一直在订单队伍中等待下一个 bar 数据撮合成交, 直到当日收盘. 当日收盘后, 所有未成交限价单都将被系统自动撤单.

为了更好的模拟实际交易中订单对市场的冲击, 我们引入滑点的设置. 您可以在策略编辑页面 “更多” 选项下进行滑点设置, 允许设置的范围是 [0, 1). 该设置将在一定程度上使用最后的成交价 “恶化”. 也就是买的更贵, 卖的更便宜. 我们的滑点方式就是按照最后成交的一定比例进行恶化. 例如, 设置滑点为 0.1, 那么如果原本买入交易的成交价为 10 元, 则设置之后成交价将变成 11 元.

注: 真实交易不需要滑点.

交易的费用

在这里插入图片描述

投资组合

投资组合是由投资人或金融机构所持有的股票, 债券, 金融衍生品等组成的集合
在这里插入图片描述

查看投资组合信息

我们之前提到过一个 context 参数, 这个参数中就包含了投资组合的信息.

context 属性

now - 当前时间

context.now

使用以上的方式就可以在handle_bar中拿到当前的 bar 的时间, 比如 day bar 的花就是那天的时间, minute bar 的话就是这一分钟的时间.

返回数据类型为 datetime.datetime

portfolio - 投资组合信息

context.portfolio

该投资组合在单一股票或者期货策略中分别为股票投资组合和期货投资组合. 在股票 + 期货的混合策略中代表汇总之后的总投资组合.

stock_account - 股票资金账户信息

context.stock_account

portfolio 对象

在这里插入图片描述

代码实现

def handle_bar(context, bar_dict):
    # 开始编写你的主要的算法逻辑

    # bar_dict[order_book_id] 可以拿到某个证券的bar信息
    # context.portfolio 可以拿到现在的投资组合信息

    # 使用order_shares(id_or_ins, amount)方法进行落单

    # TODO: 开始编写你的算法吧!
    # 购买股票
    order_target_percent(context.s1, 0.1)
    order_target_percent("000004.XSHE", 0.1)

    # 资金, 仓位
    print(context.stock_account)
    print("-----------------------")

    print(context.portfolio.positions.keys()) 
    print(context.portfolio.positions[context.s1].quantity)

    print("-----------------------")

    print("投资组合的可用资金为", context.portfolio.cash)
    print("投资组合的市场价值为",context.portfolio.market_value)
    print("投资组合的总价值为", context.portfolio.total_value)

输出结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46274168/article/details/114866394