zoukankan      html  css  js  c++  java
  • WeQuant交易策略—5日均线

    简单的价格突破策略。当前价格超过最近5个收盘价的均价,则全仓买入;低于均价,则全仓卖出

    代码

    # 简单的价格突破策略。当前价格超过最近5个收盘价的均价,则全仓买入;低于均价,则全仓卖出
    
    # PARAMS用于设定程序参数,回测的起始时间、结束时间、滑点误差、初始资金和持仓。
    PARAMS = {
        "start_time": "2017-02-01 00:00:00",  # 回测起始时间
        "end_time": "2017-08-01 00:00:00",  # 回测结束时间
        "slippage": 0.003,  # 此处"slippage"包含佣金(千二)+交易滑点(千一)
        "account_initial": {"huobi_cny_cash": 10000,
                          "huobi_cny_btc": 0},
    }
    
    # initialize函数是两大核心函数之一(另一个是handle_data),用于初始化策略变量。
    def initialize(context):
        context.frequency = "60m" # 以60分频率进行回测
        context.benchmark = "huobi_cny_btc" # 设定以比特币为基准
        context.security = "huobi_cny_btc" # 设定操作的标的为比特币
    
    # handle_data函数定义了策略的执行逻辑,按照frequency生成的bar依次读取并执行策略逻辑,直至程序结束。
    def handle_data(context):
        hist = context.data.get_price(context.security, count=5, frequency=context.frequency) # 获取最近5个频率周期的历史数据
        ma = hist["close"].rolling(window=5).mean()[-1] # 计算最近5个收盘价的均价
        current_price = context.data.get_current_price(context.security) # 获取当前价格
        if current_price > ma and context.account.huobi_cny_cash >= HUOBI_CNY_BTC_MIN_ORDER_CASH_AMOUNT: # 当前价格大于均价时,全仓买入
            context.order.buy(context.security, cash_amount=str(context.account.huobi_cny_cash))
        elif current_price < ma and context.account.huobi_cny_btc >= HUOBI_CNY_BTC_MIN_ORDER_QUANTITY: # 当前价格小于均价时,全仓卖出
            context.order.sell(context.security, quantity=str(context.account.huobi_cny_btc))

     30分钟回测

    60分钟回测结果

    4小时回测

    1天回测

    1周回测

  • 相关阅读:
    Linux 之 Memcached
    Linux 之 MySQL主从同步
    Linux 之 rsync实现服务器的文件同步
    A.01.03-模块的输入—模拟量输入
    A.01.02—模块的输入—高端输入
    A.01.01—模块的输入—低端输入
    复位电路
    边沿触发和电平触发的区别
    深入理解傅里叶变换
    电压跟随器
  • 原文地址:https://www.cnblogs.com/bitquant/p/wequant-strategy-ma5.html
Copyright © 2011-2022 走看看