(股票、基金、可转债)策略基本结构与常用 API
由qxiao创建,最终由qxiao 被浏览 2 用户
策略基本结构
所有 BigTrader 策略都遵循相同的生命周期结构:
from bigquant import bigtrader
# ── 1. 初始化 ──────────────────────────────────────────────
def initialize(context):
"""策略启动时执行一次"""
context.set_commission(bigtrader.PerOrder(
buy_cost=0.0003,
sell_cost=0.0013,
min_cost=5
))
context.short_window = 5
context.long_window = 20
# ── 2. 盘前处理 ─────────────────────────────────────────────
def before_trading_start(context, data):
"""每日开盘前触发,适合做换月检查、信号预计算等
注意:此函数中不能下单"""
pass
# ── 3. 每个 Bar 执行 ────────────────────────────────────────
def handle_data(context, data):
"""每个时间单位触发,包含核心交易逻辑"""
pass
# ── 5. 运行回测 ─────────────────────────────────────────────
result = bigtrader.run(
market=bigtrader.Market.CN_STOCK,
initialize=initialize,
before_trading_start=before_trading_start,
handle_data=handle_data,
start_date='2022-01-01',
end_date='2024-12-31',
capital_base=1_000_000,
frequency='1d',
)
股票账户常用 API 参考
下单函数
# 按目标持仓比例下单(最常用)
context.order_target_percent(symbol, target_pct)
# 示例:将 600519.SH 调整到总资产的 20%
context.order_target_percent('600519.SH', 0.2)
# 按目标持仓数量下单
context.order_target(symbol, target_amount)
# 示例:持有 100 股
context.order_target('600519.SH', 100)
# 按目标持仓市值下单
context.order_target_value(symbol, target_value)
# 示例:持有市值 10 万元
context.order_target_value('600519.SH', 100_000)
# 直接下单(正数买入,负数卖出)
context.order(symbol, amount)
# 示例:买入 200 股
context.order('600519.SH', 200)
数据获取
# 获取当前 Bar 的某字段值
price = data.current(symbol, 'close') # 当前收盘价
volume = data.current(symbol, 'volume') # 当前成交量
# 获取历史数据(返回 numpy array)
hist_close = data.history(symbol, 'close', 20, '1d') # 最近20日收盘价
# 可用字段:'open' 'high' 'low' 'close' 'volume' 'amount'
账户与持仓信息
# 获取当前所有持仓
positions = context.get_account_positions()
for instrument, position in positions.items():
print(f"股票:{instrument}, 数量:{position.amount}, 成本:{position.cost}")
# 获取单只股票持仓
position = context.get_account_position("000001.SZ")
if position.amount > 0:
print(f"持仓量:{position.amount}, 可用:{position.available}")
# 获取账户信息
account = context.get_account()
print(f"总资产:{account.total_value}, 现金:{account.cash}")
# 获取当前行情数据
current_price = data.current("000001.SZ", "close")
history_data = data.history("000001.SZ", "close", 20)
手续费设置
from bigtrader.finance.commission import PerOrder
# 按订单收费(股票标准)
context.set_commission(PerOrder(
buy_cost=0.0003, # 买入费率 0.03%
sell_cost=0.0013, # 卖出费率 0.13%(含0.1%印花税)
min_cost=5 # 最低佣金5元
))
\