QUANTAXIS 快速入门
🚀 10分钟上手QUANTAXIS - 从零开始的量化交易之旅
版本: v2.1.0-alpha2 | 难度: 入门 | 时间: 10-15分钟
📋 目录
✅ 前置准备
确认安装
# 检查QUANTAXIS是否已安装
import QUANTAXIS as QA
print(f"QUANTAXIS版本: {QA.__version__}")
# 预期输出: QUANTAXIS版本: 2.1.0.alpha2如果未安装,请参考安装指南。
导入常用模块
import QUANTAXIS as QA
import pandas as pd
import numpy as np
from datetime import datetime, timedelta🎯 第一个程序
让我们从最简单的例子开始——获取股票数据并查看。
示例1: Hello QUANTAXIS
"""
第一个QUANTAXIS程序
功能: 获取平安银行(000001)的历史数据
"""
import QUANTAXIS as QA
# 获取股票日线数据
# 参数: 股票代码, 开始日期, 结束日期
df = QA.QA_fetch_get_stock_day(
code='000001', # 平安银行
start='2024-01-01', # 开始日期
end='2024-01-31' # 结束日期
)
# 显示数据
print("\n" + "=" * 50)
print("平安银行 2024年1月行情数据")
print("=" * 50)
print(df.head())
# 统计信息
print("\n基本统计:")
print(f"交易天数: {len(df)}")
print(f"最高价: {df['high'].max():.2f}")
print(f"最低价: {df['low'].min():.2f}")
print(f"平均成交量: {df['volume'].mean():.0f}股")运行输出:
==================================================
平安银行 2024年1月行情数据
==================================================
open high low close volume
date
2024-01-02 10.5 10.68 10.45 10.52 12543200
2024-01-03 10.5 10.75 10.48 10.68 15234100
...
基本统计:
交易天数: 20
最高价: 11.25
最低价: 10.32
平均成交量: 14523456股📊 数据获取
QUANTAXIS支持多种市场的数据获取。
示例2: 股票数据
"""
获取多只股票的历史数据
"""
import QUANTAXIS as QA
# 股票代码列表
stocks = ['000001', '000002', '600000']
# 批量获取数据
for code in stocks:
df = QA.QA_fetch_get_stock_day(
code=code,
start='2024-01-01',
end='2024-01-10'
)
# 使用QA数据结构
data = QA.QA_DataStruct_Stock_day(df)
print(f"\n股票 {code}:")
print(f" 交易天数: {len(data.data)}")
print(f" 涨跌幅: {data.data['close'].pct_change().mean() * 100:.2f}%")示例3: 期货数据
"""
获取期货主力合约数据
"""
import QUANTAXIS as QA
# 获取期货日线数据
df_future = QA.QA_fetch_get_future_day(
code='IF2512', # 沪深300期货2025年12月合约
start='2024-01-01',
end='2024-01-31'
)
# 使用期货数据结构
data_future = QA.QA_DataStruct_Future_day(df_future)
print(f"\n期货合约 IF2512:")
print(f" 交易天数: {len(data_future.data)}")
print(f" 开盘价范围: {data_future.data['open'].min():.2f} - {data_future.data['open'].max():.2f}")
print(f" 收盘价范围: {data_future.data['close'].min():.2f} - {data_future.data['close'].max():.2f}")示例4: 实时数据
"""
获取实时行情数据
"""
import QUANTAXIS as QA
# 获取股票实时行情
realtime = QA.QA_fetch_get_stock_realtime(
code=['000001', '000002', '600000']
)
print("\n实时行情:")
print(realtime[['code', 'price', 'bid1', 'ask1', 'volume']])📈 数据分析
使用QUANTAXIS的数据结构进行分析。
示例5: 技术指标计算
"""
计算技术指标
"""
import QUANTAXIS as QA
# 获取数据
df = QA.QA_fetch_get_stock_day('000001', '2023-01-01', '2024-01-31')
data = QA.QA_DataStruct_Stock_day(df)
# 计算均线
ma5 = data.data['close'].rolling(5).mean()
ma10 = data.data['close'].rolling(10).mean()
ma20 = data.data['close'].rolling(20).mean()
print("\n均线系统 (最近5天):")
print(pd.DataFrame({
'日期': data.data.index[-5:],
'收盘价': data.data['close'][-5:].values,
'MA5': ma5[-5:].values,
'MA10': ma10[-5:].values,
'MA20': ma20[-5:].values,
}))
# 使用QA内置指标
from QUANTAXIS.QAIndicator import QA_indicator_MA, QA_indicator_MACD
# 计算MACD
macd_df = QA_indicator_MACD(data.data)
print("\nMACD指标 (最近5天):")
print(macd_df.tail())示例6: 数据可视化
"""
数据可视化
"""
import QUANTAXIS as QA
import matplotlib.pyplot as plt
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 获取数据
df = QA.QA_fetch_get_stock_day('000001', '2023-01-01', '2024-01-31')
data = QA.QA_DataStruct_Stock_day(df)
# 创建图表
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 8))
# 价格走势
ax1.plot(data.data.index, data.data['close'], label='收盘价')
ax1.plot(data.data.index, data.data['close'].rolling(20).mean(), label='MA20')
ax1.set_title('平安银行股价走势')
ax1.set_ylabel('价格 (元)')
ax1.legend()
ax1.grid(True)
# 成交量
ax2.bar(data.data.index, data.data['volume'], alpha=0.5)
ax2.set_title('成交量')
ax2.set_ylabel('成交量 (股)')
ax2.grid(True)
plt.tight_layout()
plt.savefig('stock_analysis.png')
print("\n✅ 图表已保存至 stock_analysis.png")🔄 简单回测
示例7: 均线策略回测
"""
简单的均线交叉策略回测
策略: MA5上穿MA20买入,下穿卖出
"""
import QUANTAXIS as QA
from QUANTAXIS.QIFI import QIFI_Account
# 1. 准备数据
df = QA.QA_fetch_get_stock_day('000001', '2023-01-01', '2024-01-31')
data = QA.QA_DataStruct_Stock_day(df)
# 2. 计算指标
ma5 = data.data['close'].rolling(5).mean()
ma20 = data.data['close'].rolling(20).mean()
# 3. 生成信号
signal = pd.DataFrame(index=data.data.index)
signal['ma5'] = ma5
signal['ma20'] = ma20
signal['position'] = 0
# 金叉买入,死叉卖出
signal.loc[ma5 > ma20, 'position'] = 1
signal.loc[ma5 < ma20, 'position'] = 0
# 4. 创建账户
account = QIFI_Account(
username="test_strategy",
password="test",
model="stock",
init_cash=100000 # 初始资金10万
)
# 5. 模拟交易
position = 0
for date, row in signal.iterrows():
price = data.data.loc[date, 'close']
# 买入信号
if row['position'] == 1 and position == 0:
# 计算可买数量(100股整数倍)
amount = int(account.cash / price / 100) * 100
if amount > 0:
account.receive_simpledeal({
'code': '000001',
'price': price,
'amount': amount,
'datetime': str(date),
'towards': 'buy'
})
position = 1
print(f"{date}: 买入 {amount}股 @ {price:.2f}元")
# 卖出信号
elif row['position'] == 0 and position == 1:
# 获取当前持仓
if '000001' in account.positions:
amount = account.positions['000001']['volume']
account.receive_simpledeal({
'code': '000001',
'price': price,
'amount': amount,
'datetime': str(date),
'towards': 'sell'
})
position = 0
print(f"{date}: 卖出 {amount}股 @ {price:.2f}元")
# 6. 输出结果
print("\n" + "=" * 50)
print("回测结果")
print("=" * 50)
print(f"初始资金: {100000:.2f}元")
print(f"最终资金: {account.cash:.2f}元")
print(f"总盈亏: {account.cash - 100000:.2f}元")
print(f"收益率: {(account.cash / 100000 - 1) * 100:.2f}%")示例8: 使用QA回测框架
"""
使用QUANTAXIS回测框架
"""
import QUANTAXIS as QA
from QUANTAXIS.QAStrategy import QAStrategyCtaBase
class MyStrategy(QAStrategyCtaBase):
"""简单的均线策略"""
def __init__(self):
super().__init__()
self.ma_short = 5
self.ma_long = 20
def on_bar(self, bar):
"""每根K线回调"""
# 计算均线
ma5 = bar['close'].rolling(self.ma_short).mean().iloc[-1]
ma20 = bar['close'].rolling(self.ma_long).mean().iloc[-1]
# 交易逻辑
if ma5 > ma20:
self.buy(bar['code'].iloc[-1], bar['close'].iloc[-1], 100)
elif ma5 < ma20:
self.sell(bar['code'].iloc[-1], bar['close'].iloc[-1], 100)
# 创建策略实例
strategy = MyStrategy()
# 运行回测
result = QA.QA_Backtest(
strategy=strategy,
code='000001',
start='2023-01-01',
end='2024-01-31',
init_cash=100000
)
print(f"\n收益率: {result.profit_rate * 100:.2f}%")⚡ 使用Rust加速
示例9: QARS2高性能账户
"""
使用Rust实现的高性能账户
性能提升: 100x
"""
from QUANTAXIS.QARSBridge import has_qars_support
if has_qars_support():
from QUANTAXIS.QARSBridge import QARSAccount
# 创建Rust账户(100x加速)
account = QARSAccount(
account_cookie="rust_account",
init_cash=100000.0
)
# 买入操作
account.buy(
code="000001",
price=10.5,
datetime="2024-01-15",
amount=1000
)
print(f"✅ Rust账户创建成功")
print(f" 可用资金: {account.cash:.2f}元")
print(f" 持仓股票: {list(account.positions.keys())}")
else:
print("⚠️ QARS2未安装,请运行: pip install quantaxis[rust]")示例10: 零拷贝数据转换
"""
使用零拷贝进行高性能数据转换
性能提升: 2-5x
"""
from QUANTAXIS.QADataBridge import has_dataswap_support
if has_dataswap_support():
from QUANTAXIS.QADataBridge import convert_pandas_to_polars
import pandas as pd
# 创建Pandas数据
df_pandas = pd.DataFrame({
'code': ['000001'] * 1000,
'price': [10.5] * 1000,
'volume': [1000] * 1000,
})
# 零拷贝转换为Polars(2-5x加速)
df_polars = convert_pandas_to_polars(df_pandas)
print(f"✅ 零拷贝转换成功")
print(f" 原始格式: {type(df_pandas)}")
print(f" 转换后: {type(df_polars)}")
print(f" 性能提升: 2-5x")
else:
print("⚠️ QADataSwap未安装,请运行: pip install quantaxis[rust]")🎓 学习路径
初学者 (第1-2周)
目标: 熟悉基本操作
数据获取
✅ 获取股票/期货数据
✅ 理解数据结构
✅ 数据可视化
简单分析
✅ 计算技术指标
✅ 统计分析
✅ 数据清洗
推荐练习:
# 练习1: 获取多只股票数据并对比
# 练习2: 计算并可视化MA、MACD等指标
# 练习3: 分析成交量与价格的关系进阶 (第3-4周)
目标: 掌握回测框架
策略开发
✅ 简单的均线策略
✅ 多因子策略
✅ 事件驱动策略
回测优化
✅ 参数优化
✅ 风险控制
✅ 绩效分析
推荐练习:
# 练习4: 实现双均线策略并回测
# 练习5: 添加止损止盈逻辑
# 练习6: 对比不同参数的表现高级 (第5-8周)
目标: 生产环境部署
高性能优化
✅ 使用QARS2 Rust账户
✅ 使用零拷贝数据传输
✅ 多进程并行
实盘交易
✅ 接入交易接口
✅ 风险管理
✅ 监控告警
推荐练习:
# 练习7: 将策略迁移到QARS2
# 练练习8: 使用共享内存进行跨进程通信
# 练习9: 搭建完整的交易系统📚 下一步学习
推荐文档
示例代码
# 查看所有示例
ls examples/
# 运行QARSBridge示例
python examples/qarsbridge_example.py
# 运行QADataBridge示例
python examples/qadatabridge_example.py
# 运行性能测试
python scripts/benchmark_databridge.py社区资源
GitHub: https://github.com/QUANTAXIS/QUANTAXIS
QQ群: 563280068
Discord: https://discord.gg/quantaxis
论坛: https://forum.quantaxis.cn
文档: https://doc.quantaxis.cn
💡 实用技巧
技巧1: 配置数据库连接
from QUANTAXIS.QAUtil import DATABASE
# 查看当前配置
print(DATABASE)
# 自定义配置
import pymongo
client = pymongo.MongoClient('localhost', 27017)
db = client.quantaxis技巧2: 批量数据获取
# 获取股票列表
stock_list = QA.QA_fetch_get_stock_list()
# 批量获取数据
for code in stock_list[:10]: # 前10只股票
df = QA.QA_fetch_get_stock_day(code, '2024-01-01', '2024-01-31')
# 处理数据...技巧3: 错误处理
try:
df = QA.QA_fetch_get_stock_day('000001', '2024-01-01', '2024-01-31')
except Exception as e:
print(f"数据获取失败: {e}")
# 降级处理...技巧4: 性能分析
import time
# 对比标准实现和Rust实现
start = time.time()
# ... 标准代码 ...
time_standard = time.time() - start
start = time.time()
# ... Rust代码 ...
time_rust = time.time() - start
print(f"加速比: {time_standard / time_rust:.2f}x")❓ 常见问题
Q1: 如何获取更多股票代码?
# 获取所有A股代码
stock_list = QA.QA_fetch_get_stock_list()
print(f"共{len(stock_list)}只股票")
print(stock_list.head())Q2: 如何处理缺失数据?
df = QA.QA_fetch_get_stock_day('000001', '2024-01-01', '2024-01-31')
# 检查缺失值
print(df.isnull().sum())
# 填充缺失值
df_filled = df.fillna(method='ffill') # 前向填充Q3: 如何加速数据处理?
# 方式1: 使用Polars
from QUANTAXIS.QADataBridge import convert_pandas_to_polars
df_polars = convert_pandas_to_polars(df)
# Polars操作通常快5-10x
# 方式2: 使用向量化操作
df['returns'] = df['close'].pct_change() # ✅ 向量化
# 避免循环: for i in range(len(df)): ... ❌恭喜你完成了QUANTAXIS快速入门!🎉
现在你已经掌握了:
✅ 数据获取和分析
✅ 技术指标计算
✅ 简单策略回测
✅ Rust组件使用
继续探索更多高级功能,祝交易顺利!
@yutiansut @quantaxis 最后更新: 2025-10-25
Last updated
Was this helpful?