最近的文章,本狐讨论了技术指标为什么会亏钱的问题,引发了不少读者的讨论。技术指标亏钱的原因有:技术指标是滞后的,只说明了当前的走势,不能预测未来的走势;技术指标反应了一部分人群的看法,反而成为了庄家、主力反向操作的机会;技术指标是基于历史经验和数据统计获得的,但是由于历史局限性,并未经过有效检验。
实践是检验真理的唯一标准,数据是检验技术指标准确的标准。技术指标是否准确,只有理论推导是不行的,一定需要数据检验。因此,本狐提出了几条数据检验的基准:
长周期的历史交易数据验证。长周期指时间跨度要长,至少经过几次市场的牛熊变换。
大数据量的交易数据验证。交易不能局限在几支股票,或者某一类股票,最好是拿全市场的股票数据进行验证,包括创业板(涨跌幅不同),ST,大盘股,小盘股,指数成分股等。
对真实交易的模拟,引入各种真实的客观限制。交易者的资金有限,不可能对市场上所有的符合技术指标的股票进行购买,需要限定持仓股数;涨跌幅买卖不成;停牌对资金的占用等。
本狐使用了A股市场2010年到2021年10月,近11年的市场A股所有日线数据进行检验,股票数量一共4424只,交易数据773万+。模拟交易模型分为两类:
无限制的交易模型。假设资金量无限,对交易日市场上的所有股票,只要技术指标是买入信号,且当前未持仓该股票,就进行买入;只要技术指标是卖出信号,且当前持仓该股票,就进行卖出。此交易模型用于检验指标的通用成功率,买卖后盈利计算为成功,买卖后亏损计算为失败,并统计所有买卖的平均盈利和最大亏损。
固定持仓交易模型。这个模型更接近于真实,限制同时持仓的股票数量,设定为4只,每只占用约1/4的资金量。只要技术指对持仓股票发出卖出信号,就卖出持仓股票;同时,对市场上发出买入信号的股票随机选取进行买入,保证当前持仓4只股票,除非市场上的股票在当前交易日无买入信号。
以上两个交易模型的成交价均以股票当日的收盘价成交,如果当天涨停或者跌停则交易失败。所有交易忽略交易手续费,仅计算买卖的差价。
最近的文章我们评估了均线、RSI、OBV等指标的结果(参照本狐近期的文章),本篇我们看下使用非常广泛,口碑极佳的MACD指标。MACD称为异同移动平均线,是从双指数移动平均线发展而来的,由快的指数移动平均线(EMA12)减去慢的指数移动平均线(EMA26)得到快线DIF,再用2×(快线DIF-DIF的9日加权移动均线DEA)得到MACD柱。MACD的意义和双移动平均线基本相同,即由快、慢均线的离散、聚合表征当前的多空状态和股价可能的发展变化趋势,但阅读起来更方便。MACD的变化代表着市场趋势的变化,不同K线级别的MACD代表当前级别周期中的买卖趋势。MACD衍生了不少的股票战法,也是很多股评大神喜欢使用的指标。那么macd的指标表现到底如何呢?
严谨的科学实验才能获得真实结果
数据实验代码使用了Python pandas_ta的macd,指标参数选择常用的12,26和9。对应买入、卖出的代码片段如下:
def model_predict(self, s, fo, model_path):
df = pd.DataFrame({‘close’: s.close_price})
if len(df) < 34: # 26+9-1
# No sufficient data samples
pred = [0] * len(df)
return pred
macd = df.ta.macd()
# buy point: macd_12_26_9 up through macdh_12_26_9
# sell point: macd_12_26_9 down through macdh_12_26_9
pred = [0] * len(macd)
for i in range(1, len(pred)):
if np.isnan(macd[‘MACD_12_26_9’][i]) or np.isnan(macd[‘MACDh_12_26_9’][i]):
continue
if macd[‘MACD_12_26_9’][i – 1] <= macd[‘MACDh_12_26_9’][i – 1] and macd[‘MACD_12_26_9’][i] > \
macd[‘MACDh_12_26_9’][i] > 0:
pred[i] = self.buy_point
continue
if macd[‘MACD_12_26_9’][i – 1] >= macd[‘MACDh_12_26_9’][i – 1] and macd[‘MACD_12_26_9’][i] < \
macd[‘MACDh_12_26_9’][i] < 0:
pred[i] = self.sell_point
return pred
接下来,就上实验的数据结果了:
UnlimitTrade
Evaluate stock count 4424, total sample length:7731826
Total trading count:93365, succeed count:28196, successful rate:0.301998
Revenue:0.017561, max gain:13.416803, max loss:-0.814815
Accumulated revenue:0.017561
———————————————————–
FixedTrade
Evaluate stock count 4424, total sample length:7731826
Total trading count:311, succeed count:89, successful rate:0.286174
Average revenue:0.009232, peak gain: 2.141833, max single gain:0.986340
Max single loss:-0.190171, max backward:-0.698351
Accumulated revenue:0.571395, Init asset: 400000, Final asset:628558
———————————————————–
FixedTrade, test from the date 2020-08-20
Evaluate stock count 4413, total sample length:1154610
Total trading count:37, succeed count:12, successful rate:0.324324
Average revenue:0.020084, peak gain: 1.206643, max single gain:0.794207
Max single loss:-0.118793, max backward:-0.238448
Accumulated revenue:0.094243, Init asset: 400000, Final asset:437697
数据解读:
无限制交易模型,共交易次数9.3万次,其中盈利的交易次数只有30%。是不是远低于你的预期?所有单次交易的最大盈利有13.4倍,最大亏损-81%。平均交易的盈利是1.76%。
固定持仓4只股票交易模型,共交易次数311次,其中盈利的交易次数28.6%。交易中的最大亏损有-19%%,最大回撤-69.8%。10年下来的最终盈利是57.1%。值得注意的是,因为符合买入条件的股票是随机买入,多次实验的盈利数据有一点差距。进一步,我们看指标在最近一年,即20年8月之后的数据:交易成功率32.4%,最终收益9.4%。
10年真实的牛熊市真实的数据实验检测的结果,是否和你的传统经验有很大的出入?广泛流传并使用的技术指标MACD的成功率只有3成!对比其他指标,如均线、RSI、OBV等,指标成功率差不多,并没有表现出更高的成功率!
很遗憾,投资市场没有所谓的银弹,或者不败的秘籍。远离一切技术指标吧,当看到股评节目中的专家头头是道地进行技术分析时,看看就好,千万不要据此做出买卖决策。技术指标由于受众广,或许能作为投资者的情绪反应,但是万万不能作为投资的风向标。