Py学习  »  Python

Python编程学动量自动化:主力持仓筹码分布通达信指标源码

量化对冲套利 • 12 月前 • 545 次点击  

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

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

01 指标图例


图一

图二

02 指标源码





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

class StockAnalysis:
    def __init__(self, stock_code, period="1d", interval="1m"):
        self.stock_code = stock_code
        self.data = yf.download(stock_code, period=period, interval=interval)
        self.data = self.data.rename(columns={'Open''OPEN''High''HIGH''Low''LOW''Close''CLOSE''Volume''VOL'})
        self.data['CAPITAL'] = 1e8
    def winner(self, price_ratio):
        cost = self.data['CLOSE'].values[-1] * price_ratio
        return np.mean(self.data['CLOSE'] <= cost) * 100
    
    def calculate_winner_values(self):
        # 计算获利盘主力持仓筹码分布指标源码
        self.data['获利盘'] = self.data['CLOSE'].apply(lambda x: self.winner(1))  # 获利盘:WINNER(C)*100
        
        # 计算活筹
        c1_075 = self.data['CLOSE'] * 1.075
        c0_925 = self.data['CLOSE'] * 0.925
        self.data['活筹'] = (self.data.apply(lambda row: self.winner(row.name, c1_075[row.name]) - self.winner(row.name, c0_925[row.name]), axis=1)) * 100
        
        # 计算获利纵横
        self.data['获利纵横'] = self.data['获利盘'] - self.data['活筹']
        
        # 计算换手率
        self.data['换手率'] = (self.data['VOL'] / self.data['CAPITAL']) * 100
        
        # 计算量比(简化版)
        self.data['量比' ] = self.data['VOL'] / self.data['VOL'].mean()
        
        # 计算主力仓位
        self.data['主力仓位'] = self.data.apply(lambda row: self.winner(row.name, row['CLOSE'] / 1.20), axis=1) * 100
        
        # 计算主力控盘系数
        zlcm = self.data['获利盘'].ewm(span=3, adjust=False).mean() * 70
        shcm = ((self.data.apply(lambda row: self.winner(row.name, row['CLOSE'] * 1.10) - self.winner(row.name, row['CLOSE'] * 0.90), axis=1)) * 80).ewm(span=3, adjust=False).mean()
        self.data['主力控盘系数'] = (zlcm / (zlcm + shcm)) * 100
        
        # 计算穿筹量
        self.data['穿筹量'] = (self.data['获利盘'] - self.data['获利盘'].shift(1)) * 100
        
    def plot_cost_bands(self):
        # 绘制成本分布带
        plt.figure(figsize=(128))
        
        cost_levels = [99.999080706050403020100.01]
        colors = ['red''green''magenta''yellow''cyan''red''green''magenta''yellow''cyan']
        
        for i in range(len(cost_levels)-1):
            lower = self.data['CLOSE'].quantile(cost_levels[i]/100)
            upper = self.data['CLOSE'].quantile(cost_levels[i+1]/100)
            plt.fill_between(self.data.index, lower, upper, color=colors[i], alpha=0.3)
        
        # 绘制关键价格线
        plt.axhline(self.data['CLOSE'].quantile(0.9999), color='red', linestyle='--', linewidth=2, label='顶筹价')
        plt.axhline(self.data['CLOSE'].quantile(0.5), color='red' , linestyle='--', linewidth=2, label='中筹价')
        plt.axhline(self.data['CLOSE'].quantile(0.0001), color='cyan', linestyle='--', linewidth=2, label='底筹价')
        
        # 绘制收盘价
        plt.plot(self.data['CLOSE'], color='blue', linewidth=2, label='收盘价')
        
        plt.title(f'{self.stock_code} 成本分布图')
        plt.xlabel('时间')
        plt.ylabel('价格')
        plt.legend()
        plt.grid(True)
        plt.show()
        
    def display_info(self):
        # 显示今日波幅和价差
        high = self.data['HIGH'].max()
        low = self.data['LOW'].min()
        close = self.data['CLOSE'].values[-1]
        open_price = self.data['OPEN'].values[0]
        
        price_range = high - low
        price_range_percent = (price_range / low) * 100
        
        print(f"今日最大振幅: {price_range_percent:.2f}%")
        print(f"今日高低价差: {price_range:.2f}元")
        print(f"开盘价: {open_price:.2f}")
        print(f"最高价: {high:.2f}")
        print(f"最低价: {low:.2f}")
        print(f"收盘价: {close:.2f}")

if __name__ == "__main__":
    stock = StockAnalysis("AAPL"
    stock.calculate_winner_values()
    stock.plot_cost_bands()
    stock.display_info()

主力持仓筹码分布指标源码赋值:若是否最后一个周期则将最近DDCS1周期置为1XG2赋值:若是否最后一个周期则将最近DINGBUTS1周期置为1XD2赋值:若是否最后一个周期则将最近DDTS2周期置为1当满足条件显示顶底=1ANDXG2时,在GDCS23和GDCS23位置之间画柱状线,宽度为2,1不为0则画空心柱., 画淡蓝色当满足条件显示顶底=1ANDXG1时,在GDCS13和GDCS13位置之间画柱状线,宽度为2,1不为0则画空心柱., 画淡蓝色当满足条件显示顶底=1ANDXD2时,在DDCS23和DDCS23位置之间画柱状线,宽度为2,1不为0则画空心柱.,画淡红色


    
当满足条件显示顶底=1ANDXD1时,在DDCS13和DDCS13位置之间画柱状线,宽度为2,1不为0则画空心柱.,画淡红色AAT赋值:顶底周期2日前的最高价=2*顶底周期2+1日内最高价的最高值AA1T赋值:顶底周期2日前的最低价=2*顶底周期2+1日内最低价的最低值QYT赋值:若AAT则将最近顶底周期2+1周期置为1QY1T赋值:若AA1T则将最近顶底周期2+1周期置为1CCT赋值:QYT的顶底周期2日过滤 AND 最高价=顶底周期2+1日内最高价的最高值CC1T赋值:QY1T的顶底周期2日过滤 AND 最低价=顶底周期2+1日内最低价的最低值DDDT赋值:上次CCT距今天数DD1T赋值:上次CC1T距今天数GDTST赋值:如果CCT,返回到最后交易的周期,否则返回0DDTST赋值:如果CC1T,返回到最后交易的周期,否则返回0DINGBUTST赋值:如果DDDT,返回DDDT日前的GDTST,否则返回GDTSTDDTS1T赋值:如果DD1T,返回DD1T日前的DDTST,否则返回DDTST



03 指标源码


通达信复制下方代码即可,下方代码仅用于学习交流使用。

获利盘:WINNER(C)*100,COLORYELLOW,NODRAW;活筹:(WINNER(C*1.075)-WINNER(C*0.925))*100,COLORFFFFFF,NODRAW;获利纵横:获利盘-活筹,NODRAW,COLORMAGENTA;换手率:VOL/CAPITAL*100,COLORWHITE,NODRAW;预测换手:IF(CURRBARSCOUNT=1&&PERIOD=5,换手率*240/FROMOPEN,DRAWNULL),NODRAW;量比:DYNAINFO(17),NODRAW,COLORWHITE;主力仓位:WINNER(C/1.20)*100,COLORWHITE,NODRAW;ZLCM:=EMA(WINNER(C)*70,3);SHCM:=EMA((WINNER(C*1.10)-WINNER(C*0.90))*80,3);主力控盘系数:(ZLCM/(ZLCM+SHCM))*100,COLORYELLOW,NODRAW;【穿筹量】:(WINNER(CLOSE)-REF(WINNER(C),1))*100,NODRAW,COLORMAGENTA;STICKLINE(1,COST(99.99),COST(90),6,0),COLORRED;STICKLINE(1,COST(90),COST(80),6,0),COLORGREEN;STICKLINE(1,COST(80),COST(70),6,0),COLORMAGENTA;STICKLINE(1,COST(70),COST(60),6,0),COLORYELLOW;STICKLINE(1,COST(60),COST(50),6,0),COLORCYAN;STICKLINE(1,COST(50),COST(40),6,0),COLORRED;STICKLINE(1,COST(40),COST(30),6,0),COLORGREEN;STICKLINE(1,COST(30),COST(20),6,0),COLORMAGENTA;STICKLINE(1,COST(20),COST(10),6,0),COLORYELLOW;STICKLINE(1,COST(10),COST(0.01),6,0),COLORCYAN;DRAWBAND(COST(99.99),RGB(250,0,0),COST(90),RGB(250,0,0));DRAWBAND(COST(90.00),RGB(0,250,0),COST(80.00),RGB(0,250,0));DRAWBAND(COST(80.00),RGB(200,110,250),COST(70.00),RGB(200,100,250));DRAWBAND(COST(70.00),RGB(250,200,0),COST(60.00),RGB(250,200,0));DRAWBAND(COST(60.00),RGB(0,150,250),COST(50.00),RGB(0,150,250));DRAWBAND(COST(50.00),RGB(250,0,0),COST(40.00),RGB(0,250,0));DRAWBAND(COST(40.00),RGB(0,250,0),COST(30.00),RGB(0,250,0));DRAWBAND(COST(30.00),RGB(200,110,250),COST(20.00),RGB(200,110,250));DRAWBAND(COST(20.00),RGB(250,200,0),COST(10.00),RGB(250,200,0));DRAWBAND(COST(10.00),RGB(0,150,250),COST(00.01),RGB(0,150,250));顶筹价:COST(99.99),COLORRED,LINETHICK2;中筹价:COST(50),COLORRED,LINETHICK2;底筹价:COST(0.01),COLORCYAN,LINETHICK2;收盘价:C,COLORBLUE,LINETHICK2;今日波幅:=100*(DYNAINFO(5)-DYNAINFO(6))/DYNAINFO(6);今日价差:=DYNAINFO(5)-DYNAINFO(6);DRAWTEXT_FIX(1,0.000,0.000,0,STRCAT(STRCAT('今日最大振幅:',CON2STR(今日波幅,2)),'%')),COLORWHITE;DRAWTEXT_FIX(1,0.120,0.000,0,STRCAT(STRCAT('今日高低价差:',CON2STR(今日价差,2)),'元')),COLORWHITE;

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




学习分享



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

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

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