
Python自动炒股到底靠不靠谱
很多人听说用Python写个程序就能自动买卖股票,躺着赚钱。现实没那么美好,但也没那么玄乎。Python自动炒股的本质,是把人为制定的交易规则翻译成计算机能执行的代码,让机器替你盯着盘面,该买就买,该卖就卖。它不预测未来,只执行纪律。
自动交易的核心三块拼图
数据获取
股票和期货的行情数据是自动交易的燃料。免费渠道有Tushare、AkShare、baostock,能拿到日线、分钟线甚至tick数据。付费的Wind、聚宽、米筐数据更全更快。期货数据还可以从CTP接口直接拉取。数据质量决定策略生死,复权处理、停牌过滤、主力合约换月这些细节漏掉一个,回测结果就会骗人。
策略逻辑
策略就是一套买卖条件。均线交叉、布林带突破、MACD背离、网格交易、动量轮动,这些都是常见套路。策略写出来只是第一步,必须做历史回测。回测要用和实盘一致的数据颗粒度,股票要算清楚佣金、印花税、过户费,期货要算保证金、手续费、滑点。很多回测曲线漂亮得不像话,一上实盘就亏钱,问题就出在滑点和流动性冲击上。

执行通道
股票自动交易接口对散户不友好,券商大多不开放个人API。变通办法是用easytrader模拟鼠标键盘操作同花顺、东方财富客户端,稳定性一般但能用。期货有CTP接口,程序化交易合法合规,文华财经、交易开拓者、vn.py都支持。执行速度直接决定滑点大小,尤其是期货日内策略,延迟超过50毫秒可能就吃掉全部利润。
一个极简的Python均线策略示例
下面用backtrader框架写一个双均线策略,股票和期货都能跑。
import backtrader as bt
class DualMA(bt.Strategy):
params = (('fast', 5), ('slow', 20))
def __init__(self):
self.ma_fast = bt.ind.SMA(period=self.p.fast)
self.ma_slow = bt.ind.SMA(period=self.p.slow)
def next(self):
if not self.position:
if self.ma_fast[0] > self.ma_slow[0]:
self.buy(size=100)
else:
if self.ma_fast[0] < self.ma_slow[0]:
self.close()
cerebro = bt.Cerebro()
data = bt.feeds.YahooFinanceData(dataname='AAPL', fromdate='2020-01-01', todate='2023-01-01')
cerebro.adddata(data)
cerebro.addstrategy(DualMA)
cerebro.broker.setcash(100000)
cerebro.broker.setcommission(commission=0.001)
cerebro.run()
print(f'最终资产: {cerebro.broker.getvalue():.2f}')
这段代码的意思很简单,5日均线上穿20日均线就买入,下穿就卖出。回测时记得把佣金设成真实水平,A股单边万三加上印花税千一,期货按交易所标准加一倍。
股票和期货自动交易的关键区别
交易制度
股票T+1,当天买不能当天卖,自动策略的持仓周期至少一天。期货T+0,日内可以反复开平,策略频率能做得更高。股票只能做多,期货能多能空,策略方向更灵活。
杠杆和风险
股票一般无杠杆,满仓也就一倍风险。期货自带5到10倍杠杆,方向做反了爆仓很快。自动交易期货必须加硬止损,程序里写死每笔最大亏损,比如账户权益的2%,触发就平仓,不能犹豫。
数据频率
股票日线策略足够散户用,分钟线策略需要券商Level-2数据,成本不低。期货做日内至少要用1分钟或tick数据,CTP接口能免费拿到tick,但存储和清洗是体力活。
自动炒股不赚钱的常见坑
过度拟合
回测时把参数调到最优,均线用7和33,换到实盘就失效。解决方法是样本外测试,拿最近一年的数据跑一遍,如果收益曲线和回测差太多,直接放弃。
幸存者偏差
回测股票池只选了现在还在上市的票,退市的没算进去,结果虚高。期货主力合约拼接也要用复权价格,否则跳空缺口会制造假信号。
执行滑点
股票挂单价格和成交价格差一分钱,一百次交易就吃掉1%的收益。期货市价单滑点更大,流动性差的合约能滑两三个点。回测时加万分之五的滑点,实盘才接近真实。
普通人怎么起步
先用模拟盘跑三个月。同花顺、东方财富都有模拟交易功能,把Python策略信号手动执行,感受一下滑点和心理压力。模拟盘能稳定盈利再考虑小资金实盘。实盘初期只做一只股票或一个期货主力合约,仓位控制在10%以内。
Python自动炒股不是印钞机,它是一把刀。刀本身不决定输赢,握刀的手和刀法才决定。策略逻辑、风控规则、执行纪律,这三样东西缺一个,自动交易就是给市场送钱。