likes
comments
collection
share

量化交易

作者站长头像
站长
· 阅读数 10

1、下单、函数、API

量化交易

可以看到,order可接受的参数有5个,分别是security,amount,style,side,pindex,这五个参数的名字与含义是函数作者设计的。意思是你使用order提供参数的时候,被提供参数将按提供的顺序依次对应这5个参数。

细说下order的各个参数

  • security 标的代码,数据类型要求是字符串,想知道 基金、期货、指数的代码都是什么,可以在这里看聚宽数据,比如聚宽数据-向下滚动页面-点击指数数据,可以看到各指数的代码。特别的是股票代码目前没有页面,但只需在平时使用的股票代码后面加后缀就好了,深交所(深交所股票0开头)股票代码后缀为.XSHE,如000001.XSHE,上交所股票代码(上交所股票6开头)后缀为.XSHG 如600000.XSHG。
    • amount 交易数量, 正数表示买入, 负数表示卖出,没什么可说的。
    • style参数决定下的订单是市价单还是限价单,默认是None代表市价单。目前就用默认吧,限价单以后讲。
    • side参数决定是开空单还是多单,默认为多单,股票只能多单,股指期货等其他品类可以开空单。
    • pindex参数是在多资金仓位时选择资金仓位的,股票一般用不到。
  • 根据说明文档,order函数是有返回值的,如果创建订单成功, 则返回Order对象, 失败则返回None。有返回值不一定要用,比如前文的例子都没用到这个返回值,实际上策略做的相当完备的时候才可能用到。一般用法是,根据返回值是否是None,判断是否下单成功,成功时,根据返回值可以查询订单或取消订单等。不过具体实现方法、以及Order对象是什么,还需要学习很多的知识,后续可能会讲到。

常用的下单函数

  • 常用的下单函数有四个,使用方法和order()差不多,可能有人自己看API文档就能学会了。接下来我们分别介绍下基本用法,同样的不讲style,side,pindex这三个参数。

  • order(security,amount),刚刚细讲过,含义是买卖一定数量的(单位:股)股票。security是股票代码,amount是数量,amount为负数时就是代表卖出了,需要知道的是,国内股票买入最小单位是1手即100股。例子如下:

      # 买入100股平安银行
      order("000001.XSHE",100)
      # 卖出100股平安银行
      order("000001.XSHE",-100)
    
  • order_target(security,amount),含义是通过买卖,将股票仓位调整至一定数量(单位:股)。security是股票代码,amount是数量。例子如下:

      # 调整平安银行的持股数量至1000股
      # 即,如果目前平安银行的持股数量低于1000股就买入,高于就是卖出,不高不低就不动。
      order_target("000001.XSHE",1000)
    
  • order_value(security,value),含义是买卖一定价值量(单位:元)股票。security是股票代码,value是价值量。value为负数时就是代表卖出了。例子如下:

      # 买入10000元的平安银行
      # 如果当前股票市价是10元,则代表买入1000股
      # 如果除不开系统会自动调整成相近的合理数量。卖出时也会。
      order_value("000001.XSHE",10000)
      # 卖出10000元的平安银行
      # 如果当前股票市价是100元,则代表卖出100股
      order_value("000001.XSHE",-10000)
    
  • order_target_value(security,value),通过买卖,将股票仓位调整至一定价值量(单位:元)。security是股票代码,value是价值量。例子如下:

      # 调整平安银行的持股价值量至10000元
      # 即,如果目前平安银行的持股价值量(按股票市价算)低于10000元就买入,高于就是卖出,不高不低就不动。
      order_target_value("000001.XSHE",10000)
    

课后题:

1、搜索了解下移动平均线(MA,均线)的计算方法。

概念:移动平均线(MA)计算方法就是求连续若干天的收盘价的算术平均。天数就是MA的参数。10日的移动平均线常简称为10日线(MA(10)),同理我们有5日线、15日线等概念。

概念链接:移动平均线(MA)计算方法

2、搜索了解下市价单、限价单的含义。

在合约交易中,限价单即用户按照自己指定的价格在市场进行买入或卖出的合约单,而市价单则是用户按照当前市场的买盘或者卖盘挂单价格进行成交的合约单。

概念链接:什么是限价单和市价单

2、读取context中的数据与条件判断

  • context的含义
  • context的结构
  • context的读取方法
  • 条件判断语句
  • 止损的含义及其实现方法
  • 自测与自学

context的结构

  • context是一个回测系统建立的Context类型的对象,其中存储了如当前策略运行的时间点、所持有的股票、数量、持仓成本等数据。

  • 对象可以理解为特殊类型的变量,对象的结构往往比我们之前见过的list与dict更复杂,被定义好的对象是有名字的,比如context是一个变量,它的变量类型是一个Context类型的对象,就像dict包括key与value,Context类型的对象也包括很多属性,而且可以嵌套另一个种类型的对象,结构见下图。图中只包括了主要与常用的内容,详细介绍可以看API文档:Context对象

量化交易

context中的数据取用方法

  • 获取对象类型变量内包含的数据方法是用英文句号隔开,而当包含的是另一个对象时,只需在应用英文句号隔开即可,例子如下:

      # 打印可用资金
      print(context.portfolio.available_cash)
      # 打印运行频率
      print(context.run_params.frequency)
      # 打印当前单位时间的开始时间
      print(context.current_dt)
    
      # 执行后日志内容如下
      # 1000000.0
      # day
      # 2016-06-01 09:30:00
    
  • 当要获取的对象内的数据是另一种有结构的变量类型时,比如dict或list,正常按照该变量类型进一步取用数据即可。例如context.portfolio.positions是一个dict,我们就可以应用之前讲过的dict 的用法来使用它,例子如下,这次给出了完整代码。

      # context.portfolio.positions的含义是仓位信息,所以为了让它有数据,需要在取之前买入并持有股票。
    
      def initialize(context):
          run_daily(period,time='every_bar')
          g.security = '000001.XSHE'
    
      def period(context):
          order(g.security, 100)
          # 打印所有键
          print(context.portfolio.positions.keys())
          # 打印所有值
          print(context.portfolio.positions.values())
          # 打印g.security的开仓均价
          print(context.portfolio.positions[g.security].avg_cost)
    
      # 执行后日志内容如下
      # ['000001.XSHE']
      # [UserPosition({'avg_cost': 8.539999999999997, 'security': '000001.XSHE', 'closeable_amount': 0, 'price': 8.53, 'total_amount': 100})]
      # 8.54
    
  • 常用的context数据写法如下,推荐自己动手试下。

    • 当前时间 context.current_dt
    • 当前时间的“年-月-日”的字符串格式 context.current_dt.strftime("%Y-%m-%d")
    • 前一个交易日 context.previous_date
    • 当前可用资金 context.portfolio.available_cash
    • 持仓价值 context.portfolio.positions_value
    • 累计收益 context.portfolio.returns
    • 当前持有股票 context.portfolio.positions.keys()
    • 当前持有的某股票的开仓均价 context.portfolio.positions['xxxxxx.xxxx'].avg_cost
    • 当前持有的某股票的可卖持仓量 context.portfolio.positions['xxxxxx.xxxx'].closeable_amount
转载自:https://juejin.cn/post/7135974844906078239
评论
请登录