
股票自动交易软件到底难在哪
很多人觉得开发一套自动交易软件,就是写个程序连上券商,按策略买卖。真动手才发现,坑比想象的多。不是编程能力不够,而是金融市场的规则、数据延迟、接口限制、资金安全,每一样都能让代码跑不起来。
我接触过不少个人开发者,他们往往卡在三个地方:拿不到稳定数据、连不上实盘接口、策略在回测里赚钱一到实盘就亏。这篇文章把开发股票自动交易软件的核心步骤拆开讲,尽量用大白话,让程序员和交易者都能听懂。

券商接口是第一个门槛
股票自动交易软件必须通过券商提供的接口下单。国内个人开发者能用的接口主要有三类:
券商官方API:华泰、国泰君安、中泰等都有,但多数只对机构或高净值客户开放,申请流程长,有的还要求资金门槛。
第三方平台接口:像恒生、金证等做的PB系统,个人很难直接接入。
模拟交易接口:部分券商提供模拟环境,适合前期开发测试,但实盘要换正式接口。
如果拿不到官方API,有人会用自动化工具模拟鼠标键盘操作券商客户端。这种方法不稳定,券商一升级界面就失效,而且容易被风控判定为异常交易。
期货自动交易接口比股票宽松一些。CTP接口是主流,上期技术提供,大部分期货公司都支持。个人可以申请模拟账号,实盘通过期货公司开通。CTP用C++开发,也有Python封装版本,比如vn.py。
数据获取决定策略上限
自动交易软件需要实时行情和历史数据。行情延迟哪怕几百毫秒,对高频策略都是致命的。
实时行情:股票Level-1免费,Level-2需要付费,通常通过券商或数据商购买。期货CTP自带行情推送,延迟低。
历史数据:用于回测和策略训练。免费来源有Tushare、AkShare,但质量参差不齐。付费的Wind、聚宽、米筐更稳定。
自己开发时,建议把数据层独立出来,用消息队列接收实时行情,写入时序数据库。历史数据定期下载,做清洗和复权处理。
策略编写与回测框架
策略是自动交易软件的大脑。个人开发者常用Python,因为库多、开发快。核心库包括pandas做数据处理,numpy做计算,backtrader或vn.py做回测。
回测框架要解决几个问题:
避免未来函数:用当天收盘数据算信号,却用当天开盘价成交,这是典型错误。
滑点和手续费:股票至少万2.5佣金,卖出还有印花税。期货手续费按手算。回测忽略这些,收益会虚高。
撮合逻辑:限价单可能不成交,市价单有冲击成本。回测要模拟真实撮合。
一个简单的双均线策略代码示例(backtrader):
import backtrader as bt
class SmaCross(bt.Strategy):
params = dict(fast=10, slow=30)
def __init__(self):
sma_fast = bt.ind.SMA(period=self.p.fast)
sma_slow = bt.ind.SMA(period=self.p.slow)
self.crossover = bt.ind.CrossOver(sma_fast, sma_slow)
def next(self):
if not self.position and self.crossover > 0:
self.buy()
elif self.position and self.crossover < 0:
self.sell()
cerebro = bt.Cerebro()
cerebro.addstrategy(SmaCross)
data = bt.feeds.GenericCSVData(dataname='stock.csv', dtformat='%Y-%m-%d')
cerebro.adddata(data)
cerebro.broker.setcash(100000.0)
cerebro.broker.setcommission(commission=0.00025)
cerebro.run()
回测赚钱不代表实盘赚钱。一定要做样本外测试和模拟盘验证。
风险控制模块不能省
自动交易软件最大的风险是程序失控。曾经有人写了个网格策略,遇到单边下跌不停加仓,一晚上亏掉半年利润。
风险控制要写进代码,至少包括:
单笔最大亏损:比如亏损2%强制平仓。
总仓位限制:股票不超过总资金80%,期货保证金占用不超过50%。
最大回撤熔断:账户回撤超过10%,自动停止交易并通知。
异常订单拦截:价格偏离最新价超过1%的订单直接拒绝。
这些规则要独立于策略运行,用单独的监控线程检查。
部署与运维
自动交易软件不能跑在普通电脑上,断电断网就麻烦。建议用云服务器,选离交易所近的机房,比如上海张江、深圳福田。
程序要写日志,每笔订单、每次信号都记录。用钉钉或企业微信做报警,成交、撤单、异常都推送。
期货CTP接口有流量控制,每秒报单次数有限制。股票接口也有类似约束。代码里要加限流,避免被券商封禁。
从模拟到实盘的小步快跑
新手容易犯的错是一上来就投真金白银。正确路径:
用模拟接口跑通整个流程,包括数据、信号、下单、风控。
用极小资金实盘,比如1万块,跑一个月。
对比实盘成交和回测成交的差异,调整滑点参数。
逐步增加资金,但始终保留人工干预开关。
股票自动交易软件不是印钞机,它只是一个工具。策略的逻辑、市场的理解、风险的管理,才是长期存活的关键。