如何搭建一个量化交易实验系统做教学用

企业微信

搭建量化交易实验系统的核心组件

教学用量化交易实验系统需要包含数据获取、策略回测、模拟交易和风险监控四个模块。数据获取模块负责从公开API或本地数据库读取股票和期货的历史行情与实时报价。回测引擎让学员验证策略在历史数据上的表现。模拟交易模块提供虚拟资金账户,对接实时行情执行订单。风险监控模块实时计算持仓风险指标,防止教学过程中出现无限亏损。

数据源选择与处理

股票数据可选用Tushare、AkShare或Yahoo Finance接口。期货数据需关注主力连续合约与展期处理。教学系统应内置数据清洗函数,处理缺失值、停牌和涨跌停。数据存储推荐使用SQLite或Parquet文件,便于学生本地运行。


import akshare as ak

import pandas as pd

def fetch_stock_data(symbol, start, end):

    df = ak.stock_zh_a_hist(symbol=symbol, period="daily", start_date=start, end_date=end)

    df['date'] = pd.to_datetime(df['日期'])

    df.set_index('date', inplace=True)

    return df[['开盘', '最高', '最低', '收盘', '成交量']]

def fetch_futures_data(symbol, start, end):

    df = ak.futures_main_sina(symbol=symbol, start_date=start, end_date=end)

    df['date'] = pd.to_datetime(df['日期'])

    df.set_index('date', inplace=True)

    return df[['开盘价', '最高价', '最低价', '收盘价', '成交量']]

回测引擎设计要点

教学回测引擎需支持多品种、多周期和自定义手续费。股票交易考虑印花税与佣金,期货考虑保证金与逐日盯市。引擎应输出夏普比率、最大回撤、胜率等指标。避免未来函数,采用事件驱动或向量化回测。向量化回测速度快,适合教学演示;事件驱动更贴近实盘,适合进阶课程。

如何搭建一个量化交易实验系统做教学用


import numpy as np

import pandas as pd

def vectorized_backtest(prices, signals, commission=0.0003, slippage=0.0001):

    returns = prices.pct_change().shift(-1)

    positions = signals.shift(1).fillna(0)

    strategy_returns = positions * returns - commission * positions.diff().abs() - slippage * positions.diff().abs()

    cumulative = (1 + strategy_returns).cumprod()

    sharpe = np.sqrt(252) * strategy_returns.mean() / strategy_returns.std()

    max_drawdown = (cumulative / cumulative.cummax() - 1).min()

    return {'cumulative': cumulative, 'sharpe': sharpe, 'max_drawdown': max_drawdown}

模拟交易与实时行情对接

模拟交易模块需要处理订单生命周期:提交、成交、撤单、部分成交。教学系统可对接CTP仿真或IB模拟账户。股票模拟可使用模拟撮合引擎,按当前盘口价格成交。期货模拟需计算保证金占用与强平逻辑。实时行情通过WebSocket推送,更新持仓盈亏。


class SimulatedBroker:

    def __init__(self, cash=1000000):

        self.cash = cash

        self.positions = {}

        self.orders = []



    def submit_order(self, symbol, side, price, volume, order_type='limit'):

        order = {'symbol': symbol, 'side': side, 'price': price, 'volume': volume, 'status': 'pending'}

        self.orders.append(order)

        return order



    def on_tick(self, symbol, bid, ask):

        for order in self.orders:

            if order['status'] != 'pending':

                continue

            if order['side'] == 'buy' and (order['price'] >= ask or order['type'] == 'market'):

                cost = order['price'] * order['volume']

                if self.cash >= cost:

                    self.cash -= cost

                    self.positions[symbol] = self.positions.get(symbol, 0) + order['volume']

                    order['status'] = 'filled'

            elif order['side'] == 'sell' and (order['price'] <= bid or order['type'] == 'market'):

                if self.positions.get(symbol, 0) >= order['volume']:

                    self.cash += order['price'] * order['volume']

                    self.positions[symbol] -= order['volume']

                    order['status'] = 'filled'

教学场景中的风险管理

教学实验必须包含风险约束。股票策略限制单票仓位不超过10%,期货策略限制保证金占用不超过总资金30%。系统应实时计算在险价值与压力测试结果。学生需学会设置止损止盈,避免过度交易。模拟交易记录所有操作日志,用于事后复盘。


def check_risk(position_value, total_capital, max_leverage=1.0):

    leverage = position_value / total_capital

    if leverage > max_leverage:

        return False, f"杠杆{leverage:.2f}超过限制{max_leverage}"

    return True, "风险可控"

实验系统部署与教学流程

实验系统部署在Jupyter Notebook或Streamlit界面中,方便学生修改参数。教学流程分为四步。第一步数据探索,计算收益率分布与相关性。第二步策略编写,使用pandas或backtrader。第三步回测对比,分组讨论过拟合问题。第四步模拟交易竞赛,以两周为周期评估夏普比率。教师端可设置市场冲击模型,增加滑点模拟。

股票与期货的差异需在教学中强调。股票无杠杆,期货有杠杆与到期日。股票T+1,期货T+0。教学系统应提供两种资产的独立回测模板。学生通过修改参数理解保证金交易的双刃剑效应。


import streamlit as st

st.title("量化交易教学实验系统")

symbol = st.selectbox("选择标的", ["000001", "600519", "IF2406", "AU2406"])

start = st.date_input("开始日期")

end = st.date_input("结束日期")

if st.button("运行回测"):

    if symbol.startswith('0') or symbol.startswith('6'):

        data = fetch_stock_data(symbol, start, end)

    else:

        data = fetch_futures_data(symbol, start, end)

    st.line_chart(data['收盘'])

实验系统评估与改进

教学效果通过学生策略的样本外表现衡量。系统记录每笔模拟交易,生成交易热力图与资金曲线。教师定期更新数据源,加入新上市期货合约。系统应支持多用户并发,每个学生独立账户。后端使用Redis存储实时持仓,Celery处理回测任务。

量化交易教学实验系统需要平衡真实性与易用性。过度复杂的系统会分散学习注意力,过度简化则无法反映市场摩擦。建议从日频股票回测开始,逐步增加期货日内模拟。学生掌握基础后,可引入机器学习因子挖掘与组合优化。系统代码应开源,鼓励学生修改引擎逻辑。通过反复实验,学生能建立对市场微观结构与策略风险的直观认知。

转载请注明出处:https://www.lianghuajiaoyi.top/wenzhang/lianghua-jiaoyi-shiyan-xitong-518.html