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>