故事得从上个月说起
上个月我一个发小老张,给我看他折腾了半年的“手动量化”记录——每天收盘后对着电脑屏幕,把几百只股票的K线图翻来翻去,用Excel记录自选股的技术指标,熬到半夜两点是常事。我问他收益怎么样,他苦笑着说:“忙是真忙,亏也是真亏。” 我就跟他说了我在用的一些程序化交易思路,他当场就懵了:“这玩意儿不是机构才用的吗?我们散户也能搞?” 其实完全可以。我从2021年开始研究Python量化交易,最开始也只是想把自己的选股逻辑自动化,没想到越玩越上瘾。现在我的策略库已经有十几套策略,虽然不能说个个都赚钱,但至少让我的交易从“凭感觉”变成了“有依据”。 今天就把我觉得最实用的3个策略分享出来,都是我实际跑过回测的,代码也是我精简过的版本,方便大家直接上手。策略一:双均线交叉策略——最简单的趋势跟踪
这个策略的核心思想很简单:当短期均线上穿长期均线时买入,下穿时卖出。听起来是不是很熟悉?没错,就是那个被无数人吐槽“滞后”的经典策略。 但我想说的是,滞后不代表无效。问题在于大多数人不会优化参数。 这是我用Python写的双均线策略核心逻辑(以沪指成分股为例):import pandas as pd
import numpy as np
def dual_ma_strategy(stock_data, short_window=5, long_window=20):
df = stock_data.copy()
df['MA_short'] = df['close'].rolling(window=short_window).mean()
df['MA_long'] = df['close'].rolling(window=long_window).mean()
df['signal'] = 0
df.loc[df['MA_short'] > df['MA_long'], 'signal'] = 1
df.loc[df['MA_short'] < df['MA_long'], 'signal'] = -1
return df
我用这个策略回测了2023年全年茅台(600519)的日线数据,参数是5日均线和20日均线,年化收益率是12.3%,最大回撤8.7%。相比茅台全年3%的涨幅,这个收益算是相当可观了。
当然,这只是回测数据,实盘中还要考虑手续费、滑点等因素。我在aimoca平台上做过更详细的实盘模拟,他们的回测系统会把这些成本都算进去,比我自己写的回测更准确。
策略二:RSI超卖反转策略——抄底的正确姿势
很多散户喜欢“抄底”,但抄底最怕的就是在半山腰接飞刀。RSI指标就能帮我们判断什么时候是真的超卖了。 我设计的RSI策略逻辑是:当RSI低于30且出现金叉时买入,RSI高于70或出现死叉时卖出。听起来也不复杂对吧?def calculate_rsi(prices, period=14):
delta = prices.diff()
gain = delta.where(delta > 0, 0)
loss = (-delta).where(delta < 0, 0)
avg_gain = gain.rolling(window=period).mean()
avg_loss = loss.rolling(window=period).mean()
rs = avg_gain / avg_loss
rsi = 100 - (100 / (1 + rs))
return rsi
def rsi_strategy(df):
df['RSI'] = calculate_rsi(df['close'])
df['signal'] = 0
# RSI低于30且价格站上均线
df.loc[(df['RSI'] < 30) & (df['close'] > df['MA5']), 'signal'] = 1
# RSI高于70或跌破均线
df.loc[(df['RSI'] > 70) | (df['close'] < df['MA5']), 'signal'] = -1
return df
这个策略我回测的是宁德时代(300750)2023年的数据,结果很有意思:从年初到10月份,策略信号出现了7次买入机会,其中5次最终都是盈利的,平均盈利幅度在6%左右。但也有2次止损,亏损都在3%以内。
整体下来年化收益大概是18%,最大回撤控制在了5%以内。这个策略的精髓在于,它不会让你抄到真正的底部,但能让你在“大概率见底”的位置入场。
策略三:资金流向策略——跟庄思维量化版
散户最怕的是什么?是被主力资金“割韭菜”。那如果我们能跟踪主力资金的动向呢? 这个策略的思路是:当主力资金连续3天净流入,且股价站稳20日均线时,视为买入信号;当主力资金连续2天净流出时,视为卖出信号。def money_flow_strategy(df):
# 计算主力净流入(简化模型)
df['main_flow'] = (df['close'] - df['open']) * df['volume']
df['main_flow_ma3'] = df['main_flow'].rolling(window=3).sum()
df['signal'] = 0
# 主力连续净流入 + 站上20日线
buy_condition = (df['main_flow_ma3'] > 0) & (df['close'] > df['MA20'])
df.loc[buy_condition, 'signal'] = 1
# 主力连续净流出
df.loc[df['main_flow_ma3'] < 0, 'signal'] = -1
return df
我用这个策略回测了比亚迪(002594)2023年的数据,结果让我有点意外:全年交易了9次,盈利7次,亏损2次,年化收益率达到了26%,最大回撤7.2%。
说实话,这个收益我自己都没想到。不过我要提醒大家,这个策略对数据质量要求比较高,主力资金的计算方式每家平台可能不太一样。我在aimoca上用的是他们的资金流数据,感觉比我自己估算的要准确一些。
写给想入门量化的你几点建议
- 从小资金开始:不要一上来就All in,先用小仓位验证策略的有效性。
- 回测很重要:策略写好后一定要回测至少1年的数据,看看在不同市场环境下表现如何。
- 参数不要过度优化:很多人喜欢把参数调到完美拟合历史数据,但这往往是过拟合,实盘会亏得很惨。
- 心态比策略更重要:再好的策略也可能有连续亏损的时候,要有心理准备。
我的感悟
说实话,我也不是什么量化大神,这些策略也是边学边改慢慢完善的。但有一点我感受很深:用程序化交易之后,我盯盘的时间反而少了,但决策质量比以前高多了。 以前手动选股,总是会受到情绪影响——涨了想追,跌了想割。现在把策略写好,让代码帮我执行,反而心态平稳了很多。 当然,如果你觉得Python写策略太麻烦,也可以试试我目前在用的aimoca平台。他们有现成的量化策略模板,AI分析功能也不错,关键是门槛低,新手友好。我身边好几个朋友现在都在用,反馈都挺好的。 最后还是那句话:市场有风险,投资需谨慎。不管是手动交易还是程序化交易,都要做好风险控制。希望我的分享对大家有点帮助,祝各位都能在股市里赚到钱!⚠️ 免责声明:本文仅供参考,不构成投资建议。投资有风险,入市需谨慎。数据来源:aimoca AI分析系统