免责声明:本文基于个人使用体验,与任何厂商无商业关系。内容仅供技术交流参考,不构成投资建议。


一、前言

量化项目随着策略增多会变得复杂,合理的项目结构能提高开发效率和代码可维护性。做了二十年期货交易,我经历过项目从混乱到有序的演进。

今天分享Python期货量化项目的代码组织最佳实践。


二、推荐项目结构

quant_project/
├── config/                 # 配置
│   ├── __init__.py
│   └── settings.py
├── strategies/             # 策略
│   ├── __init__.py
│   ├── base.py            # 基类
│   ├── ma_strategy.py
│   └── breakout_strategy.py
├── utils/                  # 工具
│   ├── __init__.py
│   ├── indicators.py
│   └── risk.py
├── data/                   # 数据(如本地缓存)
├── logs/                   # 日志
├── main.py                 # 入口
├── backtest.py             # 回测入口
└── requirements.txt

三、策略基类设计

# strategies/base.py
from abc import ABC, abstractmethod
from tqsdk import TqApi

class BaseStrategy(ABC):
    """策略基类"""
    
    def __init__(self, api: TqApi, symbol: str, **params):
        self.api = api
        self.symbol = symbol
        self.params = params
        self.klines = api.get_kline_serial(symbol, params.get('interval', 300), params.get('klines_len', 500))
        self.position = api.get_position(symbol)
    
    @abstractmethod
    def on_bar(self, klines):
        """K线更新回调"""
        pass
    
    def run(self):
        """策略主循环"""
        while True:
            self.api.wait_update()
            if self.api.is_changing(self.klines):
                self.on_bar(self.klines)

四、具体策略实现

# strategies/ma_strategy.py
from .base import BaseStrategy
from tqsdk.ta import MA

class MAStrategy(BaseStrategy):
    """均线策略"""
    
    def on_bar(self, klines):
        ma5 = MA(klines, 5)
        ma20 = MA(klines, 20)
        
        if len(ma5.ma) < 2 or len(ma20.ma) < 2:
            return
        
        # 金叉
        if ma5.ma.iloc[-2] < ma20.ma.iloc[-2] and ma5.ma.iloc[-1] >= ma20.ma.iloc[-1]:
            if self.position.pos_long == 0:
                self.api.insert_order(self.symbol, "BUY", "OPEN", 1)
        
        # 死叉
        elif ma5.ma.iloc[-2] > ma20.ma.iloc[-2] and ma5.ma.iloc[-1] <= ma20.ma.iloc[-1]:
            if self.position.pos_long > 0:
                self.api.insert_order(self.symbol, "SELL", "CLOSE", self.position.pos_long)

五、入口与配置

# main.py
from tqsdk import TqApi, TqAuth, TqAccount, TqBacktest
from datetime import date
from config.settings import Config
from strategies.ma_strategy import MAStrategy

def main():
    # 回测
    api = TqApi(
        backtest=TqBacktest(start_dt=date(2024,1,1), end_dt=date(2025,12,31)),
        auth=TqAuth(Config.TQ_USER, Config.TQ_PASS)
    )
    
    strategy = MAStrategy(api, "SHFE.rb2510")
    strategy.run()

if __name__ == "__main__":
    main()

六、总结

Python期货量化项目结构最佳实践:

  1. 分层清晰:策略、工具、配置分离
  2. 策略基类:统一接口,便于扩展
  3. 配置集中:敏感信息独立管理
  4. 入口明确:main.py、backtest.py分开

合理的项目结构能显著提高开发效率和代码质量。这只是个人实践,每人可据需调整。

量化交易有风险,代码结构只是基础,策略逻辑才是核心。


声明:本文基于个人学习经验整理,仅供技术交流参考,不构成任何投资建议。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐