多标的大类资产配置ETF策略

In [28]:
from bigmodule import M

# <aistudiograph>

# @param(id="m1", name="initialize")
# 交易引擎:初始化函数,只执行一次
def m1_initialize_bigquant_run(context):
    
    from bigtrader.finance.commission import PerOrder
    # 系统已经设置了默认的交易手续费和滑点,要修改手续费可使用如下函数
    context.set_commission(PerOrder(buy_cost=0.00015, sell_cost=0.00015, min_cost=0))
    #国债放大持有仓位倍数
    context.BOND_ETF_LEVERAGE = 4
    print('当前交易标的:', context.instruments)
    #每标的购买资金
    context.max_cash_per_instrument = context.portfolio.portfolio_value/(len(context.instruments)-1+context.BOND_ETF_LEVERAGE)
    
# @param(id="m1", name="before_trading_start")
# 交易引擎:每个单位时间开盘前调用一次。
def m1_before_trading_start_bigquant_run(context, data):
    # 盘前处理,订阅行情等
    pass

# @param(id="m1", name="handle_tick")
# 交易引擎:tick数据处理函数,每个tick执行一次
def m1_handle_tick_bigquant_run(context, tick):
    pass

# @param(id="m1", name="handle_data")
# 交易引擎:bar数据处理函数,每个时间单位执行一次
def m1_handle_data_bigquant_run(context, data):
    
    
    # 获取当前持仓
    positions = {e: p.amount for e, p in context.portfolio.positions.items()}
    #买入并持有
    #每标的购买资金
    for instrument in context.instruments:
        if instrument not in positions.keys():
            cash = context.max_cash_per_instrument
            if instrument=='511010.SH':
                # 如果是国债ETF,买入时权重大一点
                cash = context.max_cash_per_instrument * context.BOND_ETF_LEVERAGE
            
            context.order_value(instrument, cash)
            

# @param(id="m1", name="handle_trade")
# 交易引擎:成交回报处理函数,每个成交发生时执行一次
def m1_handle_trade_bigquant_run(context, trade):
    pass

# @param(id="m1", name="handle_order")
# 交易引擎:委托回报处理函数,每个委托变化时执行一次
def m1_handle_order_bigquant_run(context, order):
    pass

# @param(id="m1", name="after_trading")
# 交易引擎:盘后处理函数,每日盘后执行一次
def m1_after_trading_bigquant_run(context, data):
    pass

# @module(position="-351.50428771972656,-1007.7151489257812", comment='', comment_collapsed=True)
m6 = M.input_features_dai.v23(
    mode='表达式',
    expr="""close
open""",
    expr_filters='instrument in (\'513520.SH\', \'513030.SH\', \'159941.SZ\', \'518880.SH\', \'159920.SZ\', \'510300.SH\',\'511010.SH\')',
    expr_tables='cn_fund_bar1d',
    extra_fields='date, instrument',
    order_by='date, instrument',
    expr_drop_na=True,
    sql='',
    extract_data=False,
    m_name='m6'
)

# @module(position="-349.56433486938477,-911.1734008789062", comment='抽取预测数据', comment_collapsed=False)
m3 = M.extract_data_dai.v15(
    sql=m6.data,
    start_date='2022-10-01',
    start_date_bound_to_trading_date=True,
    end_date='2024-05-06',
    end_date_bound_to_trading_date=True,
    before_start_days=90,
    debug=False,
    m_name='m3'
)

# @module(position="-352.18696212768555,-776.8928527832031", comment='', comment_collapsed=True)
m1 = M.bigtrader.v17(
    data=m3.data,
    start_date='',
    end_date='',
    initialize=m1_initialize_bigquant_run,
    before_trading_start=m1_before_trading_start_bigquant_run,
    handle_tick=m1_handle_tick_bigquant_run,
    handle_data=m1_handle_data_bigquant_run,
    handle_trade=m1_handle_trade_bigquant_run,
    handle_order=m1_handle_order_bigquant_run,
    after_trading=m1_after_trading_bigquant_run,
    capital_base=1000000,
    frequency='daily',
    product_type='基金',
    rebalance_period_type='交易日',
    rebalance_period_days='1',
    rebalance_period_roll_forward=True,
    backtest_engine_mode='标准模式',
    before_start_days=0,
    volume_limit=1,
    order_price_field_buy='open',
    order_price_field_sell='open',
    benchmark='沪深300指数',
    plot_charts=True,
    debug=False,
    backtest_only=False,
    m_name='m1'
)
# </aistudiograph>
BigTrader(高性能回测&交易)
  • 累计收益率23.92%
  • 年化收益率14.6%
  • 基准收益率-1.69%
  • 阿尔法0.13
  • 贝塔0.22
  • 夏普比率1.46
  • 胜率1.0
  • 盈亏比0.0
  • 收益波动率7.9
  • 信息比率0.07
  • 最大回撤5.79
日期时间证券代码证券名称买/卖数量成交价成交金额平仓盈亏交易费用
Loading... (need help?)
日期证券代码证券名称数量持仓均价收盘价持仓市值持仓占比收益
Loading... (need help?)
时间级别内容
Loading... (need help?)