极简量化交易——回测

讨论 我不是赌鬼
Lv5 宗师级炼丹师
发布在 量化交易   1544   0
讨论 我不是赌鬼   1544   0

    我觉得一个好的课程就要像一个好的游戏一样,必须在半小时之内让人上手。本文讲的是在平台做“回测”,即自己制定一个策略,然后用真实的历史数据跑一下,看看自己能不能亏完1个亿。

    首先,我们需要进入ricequant注册账号。

    再是,进入平台.(有些朋友觉得平台的数据不好,策略不安全,但是,这不是新手应该关心的。)

    undefined

    新建策略

    undefined

    简单设置,A股的交易频率是1天

    undefined

    策略建立完成后,平台会自动给出注释基本完备的代码,本文为了介绍简洁又删了一些东西

    
    #程序中的context类似于self,可以使用context.XXX定义全局变量
    
    #init只在程序启动的时候运行一次
    def init(context):
    
    #在每天的交易前,都需要运行一次before_trading
    def before_trading(context):
    
    #交易算法与交易的确认要写在handle_bar里面
    def handle_bar(context, bar_dict):
    
    #在每天交易结束的时候会运行一次
    def after_trading(context):

    好了,我们现在使用追涨杀跌的策略买茅台股票,先上代码

    def init(context):
        # 定义s1为茅台股票代码,上交所股票代码后缀为 XSHG
        # 按Ctrl+I,平台会有补全股票代码的功能
        context.s1 = "600519.XSHG"
    
    def before_trading(context):
        #获取昨天和前天的茅台封盘价
        context.close=history_bars(context.s1,2,'1d','close')
    
    def handle_bar(context, bar_dict):
        # 昨天涨了(昨天比前天的市值高),今天我就花99%的钱买入
        # order_percent是按可用资金的比例买/卖指定股票
        # 买的时候比例不能是100%,否则会因为手续费不够导致交易失败
        if context.close[1]>context.close[0]:
            order_percent(context.s1,0.99)
        # 昨天跌了(昨天比前天的市值低),今天我就全卖
        else:
            order_percent(context.s1,-1)
    
    
    def after_trading(context):
        pass

    涉及的API有:

    history_bars(order_book_id, bar_count, frequency, fields=None, skip_suspended=True, include_now=False) 获取指定合约的历史行情

    order_percent(id_or_ins, percent, style=OrderType) 发送一个等于目前投资组合价值(市场价值和目前现金的总和)一定百分比的买/卖单,正数代表买,负数代表卖(暂不支持卖空)。

    程序写完后,我们设置一下时间,就可以进行编译和运行回测了,虽然编译的时候可以看到回测曲线了,但编译主要是验证程序,回测 能得到更多的统计值:

    undefined
    下图为回测结果(不是编译结果)
    undefined
    回测结果这个界面的内容大家先随便瞧瞧,要的不是码力,完全是金融方面的问题,后面有时间再讨论一下。

    版权声明:作者保留权利,不代表意本站立场。如需转载请联系本站以及作者。

    参与讨论

    回复《 极简量化交易——回测

    EditorJs 编辑器

    沙发,很寂寞~
    反馈
    to-top--btn