Py学习  »  Python

Python编程学动量自动化:机构筹码增减通达信指标

量化对冲套利 • 11 月前 • 428 次点击  

朋友们大家好今天来学习这个机构筹码增减通达信指标算法,注意本指标源码用于通达信,友情情提示:代码较多,一定要复制全。本文所述模型算法仅限学术探讨,指标公式作为知识免费分享,"基于开源数据集的理论推演",仅用于学习交流。

图片
图片
风险提示:本指标仅供技术研究与学习交流使用。市场具有高度不确定性,任何基于本指标的决策都需要自行承担风险,不构成任何投资建议。

01 指标图例


图一

图二



02 Py源码


下方代码仅用于学习交流使用,首先定义各函数变量:

import pandas as pd
import numpy as np
import mplfinance as mpf
import matplotlib.pyplot as plt
from matplotlib.collections import PolyCollection
from matplotlib.colors import LinearSegmentedColormap, ListedColormap

def calculate_institution_chips(df):
    """
    计算机构筹码和散户筹码相关指标
    """

    # 计算获利盘比例 (简化实现)
    df['winner_c'] = df['close'].rolling(20).apply(lambda x: np.sum(x < x[-1]) / len(x), raw=True)
    
    机构筹码增减通达信指标计算中间变量
    df['A1'] = (df['winner_c'] - df['winner_c'].shift(1)) / df['winner_c'].shift(1)
    df['A2'] = df['volume'] / df['float_share']  # 假设float_share为流通股本
    df['A3'] = df['A1'] / df['A2']
    
    df['A4'] = 1 - df['winner_c']
    df['A5'] = (df['A4'] - df['A4'].shift(1)) / df['A4'].shift(1)
    df['A6'] = df['A5'] / df['A2']
    
    # 计算机构筹码和散户筹码
    df['A3_diff'] = np.where(df['A3'] == df['A3'].shift(1), 0, df['A3'])
    df['institution_chips'] = df['A3_diff'].cumsum()
    
    df['A6_diff'] = np.where(df['A6'] == df['A6'].shift(1), 0, df['A6'])
    df['retail_chips'] = df['A6_diff'].cumsum()
    
     # 计算筹码增减
    df['institution_change'] = df['institution_chips'] - df['institution_chips'].shift(1)
    df['retail_change'] = df['retail_chips'] - df['retail_chips'].shift(1)
    
    # 计算低量
    v_cols = [f'v{i}'for i in range(19)]
    for i, col in enumerate(v_cols):
        shift1 = 2*i + 1
        shift2 = 2*i + 2
        df[col] = np.minimum(df['institution_chips'].shift(shift1), 
                            df['institution_chips'].shift(shift2))
    
    df['w1'] = np.minimum(np.minimum(df['v1'], df['v2']), 
                         np.minimum(df['v3'], df['v4']))
    df['w2'] = np.minimum(np.minimum(df['v5'], df['v6']), 
                         np.minimum(df['v7'], df['v8']))
    df['low_volume'] = np.minimum(df['w1'], df['w2'])
    
    机构筹码增减通达信指标计算天量
    vd_cols = [f'vd{i}'for i in range(19)]
    for i, col in enumerate(vd_cols):
        shift1 = 2*i + 1
        shift2 = 2*i + 2
        df[col] = np.maximum(df['institution_chips'].shift(shift1), 
                            df['institution_chips'].shift(shift2))
    
    df['wd1'] = np.maximum(np.minimum(df['vd1'], df['vd2']), 
                          np.minimum(df['vd3'], df['vd4']))
    df['wd2'] = np.maximum(np.minimum(df['vd5'], df['vd6']), 
                          np.minimum(df['vd7'], df['vd8']))
    df['high_volume'] = np.maximum(df['wd1'], df['wd2'])
    
    # 买点信号
    df['buy_signal'] = df['institution_change'] > 1000
    df['sell_signal1'] = (df['retail_change'] > 100) & (df['institution_change' ] -2)
    df['sell_signal2'] = (df['retail_change'] > 200) & (df['institution_change'] -1)
    
    return df

然后数据分析制作成自动化图谱:

def plot_chips_analysis(df):
    """
    绘制机构筹码分析图
    """

    # 创建颜色映射
    colors = []
    for i in range(256):
        r = min(255, i)
        g = min(255156 + i)
        b = 255
        colors.append((r/255, g/255, b/255))
    
    positive_cmap = LinearSegmentedColormap.from_list('positive', colors)
    negative_cmap = ListedColormap(['#005500''#007700''#009900''#00CC00'])
    low_volume_cmap = ListedColormap(['#555500''#777700''#999900''#CCCC00'])
    high_volume_cmap = ListedColormap(['#990099''#AA00AA''#DD00DD''#FF33DD'])
    special_cmap = ListedColormap(['#000099''#0000AA''#0000DD''#AA33DD'])
    
    # 准备绘图数据
    apd = mpf.make_addplot(df['institution_change'], type='bar', width=0.8, panel=1)
    
    机构筹码增减通达信指标创建绘图
    fig, axes = mpf.plot(df, 
                         type='candle'
                         addplot=apd,
                         volume=False,
                         figratio=(128),
                         figscale=1.2,
                         returnfig=True)
    
    ax1 = axes[0]  # 价格轴
    ax2 = axes[2]  # 筹码变化轴
    
    # 添加文本说明
    ax1.text(0.010.95'青芯-机构低位深度洗盘或高位出货坚决'
             transform=ax1.transAxes, color='yellow', fontsize=10)
    ax1.text(0.010.90'绿芯-机构在做高抛低吸或顶部高抛'
             transform=ax1.transAxes, color='green', fontsize=10)
    ax1.text(0.010.85'黄芯-机构洗盘'
             transform=ax1.transAxes, color='cyan', fontsize=10)
    ax1.text(0.010.80'粉芯-机构吸筹进货'
             transform=ax1.transAxes, color='magenta', fontsize=10)
    ax1.text(0.010.75'红芯-机构吸筹进货积极主动'
             transform=ax1.transAxes, color='red', fontsize=10)
    
    # 标记买卖信号
    buy_signals = df[df['buy_signal']]
    sell_signals = df[df['sell_signal1'] | df['sell_signal2']]
    
    for idx, row in buy_signals.iterrows():
        ax2.plot(df.index.get_loc(idx), row['institution_change'], 
                '^', markersize=10, color='green', alpha=0.7)
    
    for idx, row in sell_signals.iterrows():
        ax2.plot(df.index.get_loc(idx), row['institution_change'], 
                'v', markersize=10, color='red', alpha=0.7)
    
    机构筹码增减通达信指标设置标题和标签
    ax1.set_title('机构筹码分析', fontsize=16)
    ax1.set_ylabel('价格')
    ax2.set_ylabel('机构筹码变化')
    
    plt.tight_layout()
    plt.show()

顺势而为 长期坚持 波段做T




学习分享



学术交流:我们专注于市场的学术交流与研究包括自用指标零滞后均线最速曲线,以及自动化程序量化学习。

分享知识:田都元帅,敬神常在,爱人如己,我为人人,与人为善,分享快乐!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/183141