克隆策略

买入并持有策略

版本 v1.0

目录

策略交易规则

策略构建步骤

正文

一、买入并持有策略的交易规则

等权重买入两只股票,股票300059.SZA(东方财富),600519.SHA(贵州茅台),买入后一直持有。

二、策略构建步骤

1、确定股票池和回测时间

通过证券代码列表输入要回测的两只股票,以及回测的起止日期。

2、确定买卖原则

在回测的开始时间就等权买入股票,一旦持有股票后,不卖出,也不再买入。

3、模拟回测

通过 trade 模块中的初始化函数定义交易手续费。
通过 trade 模块中的主函数(handle函数)查看每日持仓信息,若已持有相应股票则不再买入,否则等权重买入。

    {"description":"实验创建于2019/4/20","graph":{"edges":[{"to_node_id":"-32:instruments","from_node_id":"-290:data"}],"nodes":[{"node_id":"-290","module_id":"BigQuantSpace.instruments.instruments-v2","parameters":[{"name":"start_date","value":"2018-01-01","type":"Literal","bound_global_parameter":null},{"name":"end_date","value":"2021-11-19","type":"Literal","bound_global_parameter":null},{"name":"market","value":"CN_STOCK_A","type":"Literal","bound_global_parameter":null},{"name":"instrument_list","value":"300059.SZA\n600519.SHA","type":"Literal","bound_global_parameter":null},{"name":"max_count","value":"0","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"rolling_conf","node_id":"-290"}],"output_ports":[{"name":"data","node_id":"-290"}],"cacheable":true,"seq_num":1,"comment":"输入证券","comment_collapsed":true},{"node_id":"-32","module_id":"BigQuantSpace.trade.trade-v4","parameters":[{"name":"start_date","value":"","type":"Literal","bound_global_parameter":null},{"name":"end_date","value":"","type":"Literal","bound_global_parameter":null},{"name":"initialize","value":"# 回测引擎:初始化函数,只执行一次\ndef bigquant_run(context):\n # 系统已经设置了默认的交易手续费和滑点,要修改手续费可使用如下函数\n context.set_commission(PerOrder(buy_cost=0.0001, sell_cost=0.001, min_cost=5))\n \n \n \n \n","type":"Literal","bound_global_parameter":null},{"name":"handle_data","value":"# 回测引擎:每日数据处理函数,每天执行一次\ndef bigquant_run(context, data):\n instruments = context.instruments # 标的池\n weight = 1 / len(instruments) # 等权重\n positions = [equity.symbol for equity in context.portfolio.positions] # 持仓\n \n for i in instruments:\n if i not in positions:\n if data.can_trade(context.symbol(i)): # 判断当天是否可交易,若停牌则为False\n context.order_target_percent(context.symbol(i), weight) # 按百分比等权重下单\n print('时间:', data.current_dt, '计划买入股票:', i) # 打印下单日志\n ","type":"Literal","bound_global_parameter":null},{"name":"prepare","value":"# 回测引擎:准备数据,只执行一次\ndef bigquant_run(context):\n pass\n","type":"Literal","bound_global_parameter":null},{"name":"before_trading_start","value":"# 回测引擎:每个单位时间开始前调用一次,即每日开盘前调用一次。\ndef bigquant_run(context, data):\n pass\n","type":"Literal","bound_global_parameter":null},{"name":"volume_limit","value":0.025,"type":"Literal","bound_global_parameter":null},{"name":"order_price_field_buy","value":"open","type":"Literal","bound_global_parameter":null},{"name":"order_price_field_sell","value":"open","type":"Literal","bound_global_parameter":null},{"name":"capital_base","value":1000000,"type":"Literal","bound_global_parameter":null},{"name":"auto_cancel_non_tradable_orders","value":"True","type":"Literal","bound_global_parameter":null},{"name":"data_frequency","value":"daily","type":"Literal","bound_global_parameter":null},{"name":"price_type","value":"真实价格","type":"Literal","bound_global_parameter":null},{"name":"product_type","value":"股票","type":"Literal","bound_global_parameter":null},{"name":"plot_charts","value":"True","type":"Literal","bound_global_parameter":null},{"name":"backtest_only","value":"False","type":"Literal","bound_global_parameter":null},{"name":"benchmark","value":"000300.HIX","type":"Literal","bound_global_parameter":null}],"input_ports":[{"name":"instruments","node_id":"-32"},{"name":"options_data","node_id":"-32"},{"name":"history_ds","node_id":"-32"},{"name":"benchmark_ds","node_id":"-32"},{"name":"trading_calendar","node_id":"-32"}],"output_ports":[{"name":"raw_perf","node_id":"-32"}],"cacheable":false,"seq_num":5,"comment":"回测","comment_collapsed":true}],"node_layout":"<node_postions><node_position Node='-290' Position='-120.60205841064453,73.97732543945312,200,200'/><node_position Node='-32' Position='-70.72574615478516,246.45770263671875,200,200'/></node_postions>"},"nodes_readonly":false,"studio_version":"v2"}
    In [14]:
    # 本代码由可视化策略环境自动生成 2021年11月25日 17:56
    # 本代码单元只能在可视化模式下编辑。您也可以拷贝代码,粘贴到新建的代码单元或者策略,然后修改。
    
    
    # 回测引擎:初始化函数,只执行一次
    def m5_initialize_bigquant_run(context):
        # 系统已经设置了默认的交易手续费和滑点,要修改手续费可使用如下函数
        context.set_commission(PerOrder(buy_cost=0.0001, sell_cost=0.001, min_cost=5))
        
        
     
        
    
    # 回测引擎:每日数据处理函数,每天执行一次
    def m5_handle_data_bigquant_run(context, data):
        instruments = context.instruments # 标的池
        weight = 1 / len(instruments) # 等权重
        positions = [equity.symbol for equity in context.portfolio.positions] # 持仓
         
        for i in instruments:
            if i not  in positions:
                if data.can_trade(context.symbol(i)): # 判断当天是否可交易,若停牌则为False
                    context.order_target_percent(context.symbol(i), weight) # 按百分比等权重下单
                    print('时间:', data.current_dt, '计划买入股票:', i) # 打印下单日志
              
    # 回测引擎:准备数据,只执行一次
    def m5_prepare_bigquant_run(context):
        pass
    
    # 回测引擎:每个单位时间开始前调用一次,即每日开盘前调用一次。
    def m5_before_trading_start_bigquant_run(context, data):
        pass
    
    
    m1 = M.instruments.v2(
        start_date='2018-01-01',
        end_date='2021-11-19',
        market='CN_STOCK_A',
        instrument_list="""300059.SZA
    600519.SHA""",
        max_count=0
    )
    
    m5 = M.trade.v4(
        instruments=m1.data,
        start_date='',
        end_date='',
        initialize=m5_initialize_bigquant_run,
        handle_data=m5_handle_data_bigquant_run,
        prepare=m5_prepare_bigquant_run,
        before_trading_start=m5_before_trading_start_bigquant_run,
        volume_limit=0.025,
        order_price_field_buy='open',
        order_price_field_sell='open',
        capital_base=1000000,
        auto_cancel_non_tradable_orders=True,
        data_frequency='daily',
        price_type='真实价格',
        product_type='股票',
        plot_charts=True,
        backtest_only=False,
        benchmark='000300.HIX'
    )
    
    时间: 2018-01-02 15:00:00+00:00 计划买入股票: 300059.SZA
    时间: 2018-01-02 15:00:00+00:00 计划买入股票: 600519.SHA
    
    • 收益率317.33%
    • 年化收益率46.49%
    • 基准收益率21.32%
    • 阿尔法0.42
    • 贝塔1.45
    • 夏普比率1.17
    • 胜率1.0
    • 盈亏比0.0
    • 收益波动率35.63%
    • 信息比率0.11
    • 最大回撤27.16%
    bigcharts-data-start/{"__type":"tabs","__id":"bigchart-a8c25a55d8544231bc5801243e9f0893"}/bigcharts-data-end