BigQuant使用文档

(股票、基金、可转债)策略基本结构与常用 API

由qxiao创建,最终由qxiao 被浏览 4 用户

策略基本结构

所有 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元
))

\

文档

日频回测demosTick 回测demos分钟回测demos
{link}