Skip to content

打破信息差!用量化交易解锁4个鲜为人知的赚钱指标(附源码)

作 者:老余捞鱼

原创不易,转载请标明出处及原作者。

写在前面的话:我今天挑选了4个既简单好用又懂国内口味的技术指标:STC趋势加速器、CHOP震荡探测器、VZO量能透视仪、CMF资金扫描仪。手把手教你用Python实现,附完整代码。无论抓趋势还是做波段,这些工具都能帮你少走弯路!

老指标就像用旧地图找新大陆,主力早把MACD、KDJ玩烂了。今天带大家解锁的4个冷门指标,能帮你:

  • 比MACD快2倍捕捉趋势拐点。
  • 一眼看穿主力是在真拉升还是假突破。
  • 量化市场震荡强度,避免被反复打脸。

在算法交易中,技术指标是不可或缺的工具。而解锁新的算法交易技能就是你需要掌握的技能,今天讲的这些指标不仅能帮助你分析股市趋势,还能提升你的交易决策能力。

接下来,我们将逐一讲解每个指标的原理、使用方法,并提供Python代码实现。

1. STC趋势加速器

STC(Schaff Trend Cycle)是一种改进的MACD指标。简单来说,它是把MACD和波动率指标杂交升级,像给趋势装了显微镜。STC的值在0到100之间波动,适合捕捉市场短期变化。

STC的计算步骤

  • 首先,计算短期(通常12周期)和长期(通常26周期)的指数移动平均线(EMA)。
  • 然后,计算短期EMA与长期EMA的差值,得到MACD线。
  • 接着,计算MACD线的9周期移动平均线,称为信号线。
  • 最后,使用随机过程将MACD差值归一化到0-100的范围,得到STC值。

STC的信号判断

指标位置市场信号操作建议
上穿75超买区准备获利了结
下破25超卖区关注抄底机会
站稳50上方牛市确认逢低加仓

例如,当STC高于75时,市场可能过热,价格可能下跌;低于25时,市场可能超卖,价格可能上涨。穿过50可以确认趋势方向。

代码实现

下面是计算STC的Python代码:

# STC趋势加速器计算
def 计算_STC(数据, 短线=12, 长线=26):
    数据['快线'] = 数据['收盘价'].ewm(span=短线).mean()  # 计算快速均线
    数据['慢线'] = 数据['收盘价'].ewm(span=长线).mean()  # 计算慢速均线
    MACD线 = 数据['快线'] - 数据['慢线']
    ... # 完整代码见文末

上图是一张STC指标的图表,展示它如何与股价一起变化,突出超买和超卖区域。

2. CHOP震荡探测器

CHOP(Choppiness Index)是一个判断市场趋势(价格持续上涨或下跌)或震荡(价格横盘)的波动性指标。

市场像拳击手——要么重拳出击(趋势),要么左右摇摆(震荡)。这个指标就是裁判,0-100分告诉你现在谁占优,值越高表示市场越震荡,值越低表示市场越有趋势。

CHOP的计算步骤

  • 首先,计算每个周期的最高价与最低价之间的范围(High – Low)。
  • 然后,将过去14周期的范围相加,得到平均真实范围(ATR)。
  • 接着,找到过去14周期的最高价和最低价。
  • 最后,使用对数公式计算CHOP:100 * log10(ATR / (最高价 – 最低价)) / log10(周期数)。

CHOP的信号判断

CHOP值含义
>61.8市场震荡(横盘),适合观望或区间交易
<38.2市场趋势,适合趋势跟踪策略
下降预计价格将出现强劲波动

例如,当CHOP高于61.8时,市场可能在横盘,交易者应避免趋势策略;低于38.2时,市场可能有明确趋势,适合追随趋势。

代码实现

下面是计算CHOP的Python代码:

def calculate_choppiness_index(df, period=14):
    high_low_range = df['High'] - df['Low']
    atr = high_low_range.rolling(window=period).sum()
    max_high = df['High'].rolling(window=period).max()
    min_low = df['Low'].rolling(window=period).min()
    chop = 100 * np.log10(atr / (max_high - min_low)) / np.log10(period)
    return chop

代码解析

  • high_low_range:计算每个周期的最高价与最低价之差。
  • atr:计算过去14周期的总ATR。
  • max_high 和 min_low:找到过去14周期的最高价和最低价。
  • chop:使用对数公式计算CHOP值。

3. VZO量能透视仪

VZO(Volume Zone Oscillator)是一个衡量成交量买卖压力的指标。它通过分析价格变化和成交量的关系,衡量市场的买卖压力,帮助识别积累(买盘)和分布(卖盘)区域。VZO的值在-100到+100之间波动。

比如茅台3月放量下跌时,VZO坚守40上方,果然1个月后暴涨18%!量能指标从不骗人。

VZO的计算步骤

  • 首先,计算连续收盘价之间的变化(Close.diff())。
  • 如果价格上涨,成交量记为正值;如果价格下跌,成交量记为负值。
  • 然后,计算过去14周期的正成交量和负成交量总和。
  • 最后,将正负成交量差值除以总成交量,并乘以100,得到VZO值。

VZO的信号判断

VZO值含义
>+40看涨势头强劲,适合买入
<-40看跌势头强劲,适合卖出
穿过0确认趋势方向(向上为看涨,向下为看跌)

例如,VZO高于+40表示买盘力量强,可能继续上涨;低于-40表示卖盘力量强,可能继续下跌。

代码实现

下面是计算VZO的Python代码:

def calculate_vzo(df, period=14):
    close_diff = df['Close'].diff()
    positive_volume = df['Volume'].where(close_diff > 0, 0)
    negative_volume = df['Volume'].where(close_diff < 0, 0)
    total_volume = df['Volume'].rolling(window=period).sum()
    vzo = 100 * (positive_volume.rolling(window=period).sum() - negative_volume.rolling(window=period).sum()) / total_volume
    return vzo

代码解析

  • close_diff:计算连续收盘价的变化。
  • positive_volume 和 negative_volume:根据价格变化分配正负成交量。
  • total_volume:计算过去14周期的总成交量。
  • vzo:计算正负成交量差值并归一化到-100到+100。

4. CMF资金扫描仪

CMF(Chaikin Money Flow)是一个确认资金流向的强力工具。它结合价格和成交量数据,分析收盘价相对于最高价和最低价的位置,帮助确认趋势强弱。CMF的值在-1到+1之间波动。

当价格创新低但CMF抬升,说明主力偷偷吸筹;价格新高CMF背离,赶紧落袋为安!

CMF的计算步骤

  • 首先,计算Money Flow Multiplier(MFM):[(Close – Low) – (High – Close)] / (High – Low)。
  • 然后,将MFM乘以当期成交量,得到Money Flow Volume(MFV)。
  • 接着,计算过去20周期的MFV总和,并除以同期总成交量,得到CMF值。

CMF的信号判断

CMF值含义
>+0.2买盘压力强劲,趋势可能继续上涨
<-0.2卖盘压力强劲,趋势可能继续下跌
穿过0确认趋势方向(向上为看涨,向下为看跌)

例如,CMF高于+0.2表示资金流入,可能支持上涨趋势;低于-0.2表示资金流出,可能支持下跌趋势。

代码实现

下面是计算CMF的Python代码:

def calculate_cmf(df, period=20):
    money_flow = ((df['Close'] - df['Low']) - (df['High'] - df['Close'])) / (df['High'] - df['Low'])
    money_flow_volume = money_flow * df['Volume']
    cmf = money_flow_volume.rolling(window=period).sum() / df['Volume'].rolling(window=period).sum()
    return cmf

代码解析

  • money_flow:计算Money Flow Multiplier。
  • money_flow_volume:将MFM乘以成交量,得到MFV。
  • cmf:计算过去20周期的MFV总和并除以总成交量。

5. 观点总结

这四种技术指标各有独特优势:STC快速捕捉趋势反转,CHOP判断市场趋势或震荡,VZO分析成交量压力,CMF确认资金流向。结合这些指标,你可以构建更强大的交易系统,提升决策准确性。

  • STC:趋势发动机,改进的MACD指标,抓主升浪利器。
  • CHOP:市场震荡探测器,波动性指标,避免被左右打脸。
  • VZO:量能透视镜,成交量指标,衡量买卖压力,看穿主力底牌。
  • CMF:资金扫描仪,资金流向指标,确认趋势强弱,跟踪聪明钱流向。
  • 组合使用效果翻倍:趋势里吃肉,震荡里喝汤。

6. 完整代码

以下是完整的Python代码,用于下载股票数据、计算四个指标并绘制图表:

import numpy as np
import pandas as pd
import yfinance as yf
import matplotlib.pyplot as plt

# 定义股票符号和时间段
symbol = '^GSPC'  # 例如 S&P 500
start_date = '2020-01-01'
end_date = '2025-01-01'

# 下载股票数据
df = yf.download(symbol, start=start_date, end=end_date)
df.columns = ['Close', 'High', 'Low', 'Open', 'Volume']

# 计算 STC
def calculate_stc(df, short_ema=12, long_ema=26, stoch_period=10, signal_period=3):
    df['Short_EMA'] = df['Close'].ewm(span=short_ema).mean()
    df['Long_EMA'] = df['Close'].ewm(span=long_ema).mean()
    macd = df['Short_EMA'] - df['Long_EMA']
    df['MACD_Signal'] = macd.ewm(span=9).mean()
    macd_diff = macd - df['MACD_Signal']
    lowest_macd = macd_diff.rolling(stoch_period).min()
    highest_macd = macd_diff.rolling(stoch_period).max()
    df['STC'] = 100 * ((macd_diff - lowest_macd) / (highest_macd - lowest_macd))
    return df['STC']

df['STC'] = calculate_stc(df)

# 计算 CHOP
def calculate_choppiness_index(df, period=14):
    high_low_range = df['High'] - df['Low']
    atr = high_low_range.rolling(window=period).sum()
    max_high = df['High'].rolling(window=period).max()
    min_low = df['Low'].rolling(window=period).min()
    chop = 100 * np.log10(atr / (max_high - min_low)) / np.log10(period)
    return chop

df['CHOP'] = calculate_choppiness_index(df)

# 计算 VZO
def calculate_vzo(df, period=14):
    close_diff = df['Close'].diff()
    positive_volume = df['Volume'].where(close_diff > 0, 0)
    negative_volume = df['Volume'].where(close_diff < 0, 0)
    total_volume = df['Volume'].rolling(window=period).sum()
    vzo = 100 * (positive_volume.rolling(window=period).sum() - negative_volume.rolling(window=period).sum()) / total_volume
    return vzo

df['VZO'] = calculate_vzo(df)

# 计算 CMF
def calculate_cmf(df, period=20):
    money_flow = ((df['Close'] - df['Low']) - (df['High'] - df['Close'])) / (df['High'] - df['Low'])
    money_flow_volume = money_flow * df['Volume']
    cmf = money_flow_volume.rolling(window=period).sum() / df['Volume'].rolling(window=period).sum()
    return cmf

df['CMF'] = calculate_cmf(df)

# 绘制指标
fig, axs = plt.subplots(5, 1, figsize=(12, 12), sharex=True)

# 绘制收盘价
axs[0].plot(df.index, df['Close'], label='Close Price', color='black')
axs[0].set_title('Close Price')
axs[0].legend()

# 绘制 STC
axs[1].plot(df.index, df['STC'], label='STC', color='blue')
axs[1].set_title('Schaff Trend Cycle (STC)')
axs[1].legend()

# 绘制 CHOP
axs[2].plot(df.index, df['CHOP'], label='CHOP', color='green')
axs[2].set_title('Choppiness Index (CHOP)')
axs[2].legend()

# 绘制 VZO
axs[3].plot(df.index, df['VZO'], label='VZO', color='red')
axs[3].set_title('Volume Zone Oscillator (VZO)')
axs[3].legend()

# 绘制 CMF
axs[4].plot(df.index, df['CMF'], label='CMF', color='purple')
axs[4].set_title('Chaikin Money Flow (CMF)')
axs[4].legend()

plt.tight_layout()
plt.show()

代码解析

  • 数据下载:使用yfinance库下载股票数据(如S&P 500)。
  • 指标计算:分别调用四个函数计算STC、CHOP、VZO和CMF。
  • 图表绘制:使用matplotlib绘制五个子图,分别展示收盘价和四个指标。

#算法交易 #技术指标 #STC #CHOP #VZO #CMF #Python #股市分析 #量化交易 #Python编程 #股票技术分析 #量化投资 #金融科技

读到最后,希望这篇文章为您带来了新的启发和实用的知识!如果觉得有帮助,请不吝点赞和分享,您的支持是我持续创作的动力。祝您投资顺利,收益长虹!如果对文中内容有任何疑问,欢迎留言,我会尽快回复!


本文内容仅限技术探讨和学习,不构成任何投资建议。

Published inAI&Invest专栏

Be First to Comment

    发表回复