Advertisement

掘金量化回测平台 - 1

阅读量:

掘金量化平台初探 python

量化分析包括:策略研发、策略回测、仿真交易、实盘交易、实盘盘后优化。


主要想使用掘金的平台来做策略回测仿真交易 两个环节的功能。
对比了下主流的云平台JoinQuant、Uquant、Ricequant缺点是不落地,所有策略在云平台上跑,编程体验也不如本地平台。pyalgotrade等开源本地平台原本都是基于美股的,即使改成A股回测也只能做一些粗糙的的策略回测,没办法把策略做细致,比如股价的前后复权,期货对冲和止盈止损。最终选择尝试一下掘金的免费版个人的平台进行回测。

DEMO源码分析

1 - 导入SDK

自己写的策略类应继承自StrategyBase基类,
并以方法重写 的方式满足策略开发需求。

复制代码
    # !/usr/bin/env python
    # -*- coding: utf-8 -*-
    from gmsdk.api import StrategyBase
    from gmsdk import to_dict
    
      
      
      
      
    

2 - 编写策略

MyStrategy继承StrategyBase类,on_bar或on_tick是必须重写的类函数。

复制代码
    class MyStrategy(StrategyBase):
    def __init__(self, *args, **kwargs):
        super(MyStrategy, self).__init__(*args, **kwargs)
        self.oc = True
    
    def on_bar(self, bar):
        if self.oc:
            # 开多仓 买入1000股 sec_id
            self.open_long(bar.exchange, bar.sec_id, 0, 1000)
        else:
            # 平多仓 卖出 1000股 sec_id
            self.close_long(bar.exchange, bar.sec_id, 0, 1000)
        self.oc = not self.oc
    
    # 回测结束事件,在回测结束时触发
    def on_backtest_finish(self, indicator): #indicator为回测的绩效
        print('backtest finished', to_dict(indicator))
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

3 - 配置和运行策略

复制代码
    if __name__ == '__main__':
    # 初始化策略配置
    mystrategy = MyStrategy(
        username = 'kaihaohust@foxmail.com', # 掘金账号
        password = 'xxxxxxxx', # 掘金密码
        strategy_id = 'strategy_1', # 策略的ID
        subscribe_symbols = 'SHSE.600000.bar.daily', # 订阅的行情
        mode = 4, # 回测
        td_addr = 'localhost:8001' # 交易服务 - 本地掘金平台
        )
    
    # 回测策略配置    
    ret = mystrategy.backtest_config(
        # 起止时间
        start_time = '2015-04-15 9:00:00',
        end_time = '2015-05-15 15:00:00',
        initial_cash = 100000,
        transaction_ratio = 1,
        commission_ratio = 0,
        slippage_ratio = 0,
        price_type = 1,
        bench_symbol = 'SHSE.000300') #基准=沪深300
    
    print('config status: ', ret)
    ret = mystrategy.run()         # 运行策略
    print('exit code: ', ret)
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

常用数据类型

1 - 周期BAR

复制代码
        self.exchange = ''       ## 交易所代码
        self.sec_id = ''         ## 证券ID
        self.bar_type = 0        ## bar类型,以秒为单位,比如1分钟bar, bar_type=60
        self.strtime = ''        ## Bar开始时间
        self.utc_time = 0.0      ## Bar开始时间
        self.strendtime = ''     ## Bar结束时间
        self.utc_endtime = 0.0   ## Bar结束时间
        self.open = 0.0          ## 开盘价
        self.high = 0.0          ## 最高价
        self.low = 0.0           ## 最低价
        self.close = 0.0         ## 收盘价
        self.volume = 0.0        ## 成交量
        self.amount = 0.0        ## 成交额
        self.pre_close           ## 前收盘价
        self.position;           ## 持仓量
        self.adj_factor          ## 复权因子
        self.flag                ## 除权出息标记
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

2 - 现金Cash

复制代码
        self.strategy_id = ''           ## 策略ID
        self.account_id = ''            ## 账户id
        self.currency = 0               ## 币种
    
        self.nav = 0.0                  ## 资金余额
        self.fpnl = 0.0                 ## 浮动收益
        self.pnl = 0.0                  ## 净收益
        self.profit_ratio = 0.0         ## 收益率
        self.frozen = 0.0               ## 持仓冻结金额
        self.order_frozen = 0.0         ## 挂单冻结金额
        self.available = 0.0            ## 可用资金
    
        self.cum_inout = 0.0            ## 累计 出入金
        self.cum_trade = 0.0            ## 累计 交易额
        self.cum_pnl = 0.0              ## 累计 收益
        self.cum_commission = 0.0       ## 累计 手续费
    
        self.last_trade = 0.0           ## 最新一笔 交易额
        self.last_pnl = 0.0             ## 最新一笔 交易收益
        self.last_commission = 0.0      ## 最新一笔 交易手续费
        self.last_inout = 0.0           ## 最新一次 出入金
        self.change_reason = 0          ## 变动原因
    
        self.transact_time = 0.0        ## 交易时间
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

目录

  • 掘金量化平台初探 python
    • DEMO源码分析

      • - 导入SDK
      • - 编写策略
      • - 配置和运行策略
    • 常用数据类型

      • - 周期BAR
      • - 现金Cash
    • 目录

全部评论 (0)

还没有任何评论哟~