Py学习  »  Python

Python编程自动化:紫气东来/寻龙起爆通达信公式源码

量化对冲套利 • 2 月前 • 99 次点击  

朋友们大家好今天来学习这个紫气东来/寻龙起爆通达信指标算法,注意本指标源码用于通达信本文所述模型算法仅限学术探讨,指标公式作为知识免费分享,"基于开源数据集的理论推演",仅用于学习交流。

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

01 指标图例


图一

图二



02 Py源码


下方代码仅用于学习交流使用。

import pandas as pd
import numpy as np
import talib
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

def calculate_winner(close, window=250):
    winner = np.zeros(len(close))
    for i in range(len(close)):
        if i < window:
            winner[i] = np.nan
            continue
        current_price = close[i]
        window_prices = close[i - window:i]
        # 计算在窗口内低于当前价格的比例
        winner[i] = np.sum(window_prices <= current_price) / len(window_prices)
    return winner

def calculate_zshjj_zzljj(df):
    """计算紫气东来/寻龙起爆主力控盘和散户套牢指标"""
    # 计算获利盘比例
    df['winner_close'] = calculate_winner(df['close'])
    
    # 计算10%区间内的筹码
    df['winner_high'] = calculate_winner(df['close'] * 1.1)
    df['winner_low'] = calculate_winner(df['close'] * 0.9)
    df['winner_band'] = df['winner_high'] - df['winner_low']
    
    # 计算主力筹码和散户筹码
    df['ZLCM'] = talib.EMA(df['winner_close'] * 70, timeperiod=3)
    df['SHCM'] = talib.EMA(df['winner_band'] * 80, timeperiod=3)
    
    # 计算筹码系数
    df['ZSHTL'] = df['SHCM'] / (df['ZLCM'] + df['SHCM']) * 100
    df['ZZLKP'] = df['ZLCM'] / (df['ZLCM'] + df['SHCM']) * 100
    
    # 计算55日警戒线
    df['ZSHJJ'] = talib.EMA(df['ZSHTL'], timeperiod=55)
    df['ZZLJJ'] = talib.EMA(df['ZZLKP'], timeperiod=55)
    
    # 机构持仓比例
    df[ 'institutional_holding'] = df['ZZLKP']
    
    # 散户持仓比例
    df['retail_holding'] = df['ZSHTL'].astype(int)
    
    return df

def plot_chip_indicators(df):
    """绘制紫气东来/寻龙起爆筹码分布指标图"""
    fig, ax = plt.subplots(figsize=(147))
    
    # 设置x轴为日期
    ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
    plt.xticks(rotation=45)
    
    # 1. 绘制散户套牢筹码(灰色区域)
    ax.bar(df.index, df['ZSHTL'], color='gray', width=1, label='Retail Holding')
    
    # 2. 绘制主力控盘筹码(蓝色)
    mask_blue = df['ZZLKP'] > 20
    ax.bar(df.index, df['ZZLKP'], width=1, color='blue', alpha=0.6, label='Main Control')
    
    # 3. 绘制主力警戒线(黄色)
    ax.plot(df.index, df['ZZLJJ'], color='yellow', linewidth=2, label='Main Alert')
    
    # 4. 绘制散户警戒线(浅灰色)
    ax.plot(df.index, df['ZSHJJ'], color='lightgray', linestyle='--', label='Retail Alert')
    
    mask_top = df['ZZLKP'] > 95
    ax.bar(df.index[mask_top], df['ZZLKP'][mask_top], width=1, color='green', alpha=0.5, label='Top Risk')
    
    mask_pit = df['ZZLKP'] <= 10
    ax.bar(df.index[mask_pit], df['ZZLKP'][mask_pit], width=1, color='purple', alpha=0.7, label='Bottom Pit')
    
    # 设置图例和标题
    ax.set_title('Main Control and Retail Chips Distribution')
    ax.set_ylabel('Percentage (%)')
    ax.legend(loc='upper left')
    
    plt.tight_layout()
    plt.show()

if __name__ == "__main__":
    dates = pd.date_range(start='2023-01-01', periods=300, freq='D')
    np.random.seed(42)
    prices = np.cumprod(1 + np.random.randn(300) * 0.01) * 100
    
    df = pd.DataFrame({
        'date' : dates,
        'close': prices
    }).set_index('date')
    
    # 计算指标
    df = calculate_zshjj_zzljj(df)
    
    # 显示最后几行数据
    print("机构持仓比例:", df['institutional_holding'].iloc[-1])
    print("散户持仓比例:", df['retail_holding'].iloc[-1])
    
    # 绘制图表
    plot_chip_indicators(df[-100:])  # 仅显示最后100个数据点

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





学习分享



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

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/182717
 
99 次点击