Git Product home page Git Product logo

chipdistribution's Introduction

筹码分布

老哥们,觉得不错给个star吧(^-^)。

基本概念

“筹码分布”的准确的学术名称应该叫“流通股票持仓成本分布”。 右边的哪个柱状图就是筹码分布,体现的现有流通股票再股市中的分布状况。

相关概念

获利盘

获利盘是股票术语其中之一。获利盘一般是指股票交易中,能够卖出赚钱的那部分股票。每一只股票都有获利盘和套牢盘,套牢盘就是买入的股票亏本。 也就是说

成本分布

COST(10),表示10%获利盘的价格是多少,即有10%的持仓量在该价格以下,其余90%在该价格以上,为套牢盘,该函数仅对日线分析周期有效。 这个也是根据筹码分布就可以简单计算,cost和winner就像两个相反的东西

总之,筹码分布是形态分布计算的根本

如何计算

这里简单讲解两个简单的计算

基本的一些概念

  • 平均分布:将当日的换手筹码在当日的最高价和最低价之间平均分布。

  • 三角形分布:将当日的换手筹码在当日的最高价、最低价和平均价之间三角形分布。

  • 历史换手衰减系数:它是一个常数参数,我们用来赋予今天换手率,也既是当日被移动的成本的权重。如果今天的换手率是A,衰减系数是n,那么我们计算昨日的被移动的筹码的总量是A*n,如果n取值为1,就是一般意义上理解的今天换手多少,就有多少筹码被从作日的成本分布中被搬移;如果n是2,那么我们就放大了作日被移动的筹码的总量..这样的目的在于突出“离现在越近的筹码分布其含义越明显”。

每日成本算法是一个移动平均过程: 公式是:当日成本*(换手率历史换手衰减系数)+上一日成本分布图(1-换手率*历史换手衰减系数)

代码:(这里只是部分运算代码, 项目源码放在后面)


low = data['low']
high = data['high']
vol = data['volume']
TurnoverRate = data['TurnoverRate']
avg = data['avg']
date = data['date']

Chip ={}
ChipList ={}
Profit =[]


flag = True # start
import time
def calcuJUN(dateT,highT, lowT, volT, TurnoverRateT, A, minD):
#     print(highT, lowT, volT)
    
    x =[]
    
    l = (highT - lowT) / minD
    for i in range(int(l)):
        x.append(round(lowT + i * minD, 2))
    length = len(x)
    eachV = volT/length
    for i in Chip:
        Chip[i] = Chip[i] *(1 -TurnoverRateT * A)
    for i in x:
        if i in Chip:
            Chip[i] += eachV *(TurnoverRateT * A)
        else:
            Chip[i] = eachV *(TurnoverRateT * A)
    import copy
    print(dateT)
    ChipList[dateT] = copy.deepcopy(Chip)
            

    
def calcuSin(dateT,highT, lowT,avgT, volT,TurnoverRateT,minD,A):    
    x =[]
    
    l = (highT - lowT) / minD
    for i in range(int(l)):
        x.append(round(lowT + i * minD, 2))
    
    length = len(x)
    
    
    #计算仅仅今日的筹码分布
    tmpChip = {}
    eachV = volT/length
    
    
    #极限法分割去逼近
    for i in x:
        x1 = i
        x2 = i + minD
        h = 2 / (highT - lowT)
        s= 0
        if i < avgT:
            y1 = h /(avgT - lowT) * (x1 - lowT)
            y2 = h /(avgT - lowT) * (x2 - lowT)
            s = minD *(y1 + y2) /2
            s = s * volT
        else:
            y1 = h /(highT - avgT) *(highT - x1)
            y2 = h /(highT - avgT) *(highT - x2)
            
            s = minD *(y1 + y2) /2
            s = s * volT            
        tmpChip[i] = s
            
    
    for i in Chip:
        Chip[i] = Chip[i] *(1 -TurnoverRateT * A)
        
    for i in tmpChip:
        if i in Chip:
            Chip[i] += tmpChip[i] *(TurnoverRateT * A)
        else:
            Chip[i] = tmpChip[i] *(TurnoverRateT * A)
    import copy
    print(dateT)
    ChipList[dateT] = copy.deepcopy(Chip)
            

def calcu(date,highT, lowT,avgT, volT, TurnoverRateT,minD = 0.01, flag =1, AC=1):  #flag 使用哪个计算方式,    AC 衰减系数
    if flag ==1:
        calcuSin(dateT,highT, lowT,avgT, volT, TurnoverRateT,A=AC, minD=minD)
    elif flag ==2:
        calcuJUN(dateT,highT, lowT, volT, TurnoverRateT, A=AC, minD=minD)

    
for i in range(len(date)):
#     if i < 90:
#         continue
    
    highT = high[i]
    lowT = low[i]
    volT = vol[i]
    TurnoverRateT = TurnoverRate[i]
    avgT = avg[i]
    print(date[i])
    dateT = date[i]
    calcu(dateT,highT, lowT,avgT, volT, TurnoverRateT/100, flag=1)  # 东方财富的小数位要注意,兄弟萌。我不除100懵逼了
    

源码(实践出真知)

来代码,就很清楚了

首先获取数据, 我这里使用平安银行本地数据 格式是

  • 首先加载数据
  • 然后计算筹码分布
    def calcu(self,dateT,highT, lowT,avgT, volT, TurnoverRateT,minD = 0.01, flag=1 , AC=1):
        if flag ==1:
            self.calcuSin(dateT,highT, lowT,avgT, volT, TurnoverRateT,A=AC, minD=minD)
        elif flag ==2:
            self.calcuJUN(dateT,highT, lowT, volT, TurnoverRateT, A=AC, minD=minD)

    def calcuChip(self, flag=1, AC=1):  #flag 使用哪个计算方式,    AC 衰减系数
        low = self.data['low']
        high = self.data['high']
        vol = self.data['volume']
        TurnoverRate = self.data['TurnoverRate']
        avg = self.data['avg']
        date = self.data['date']

        for i in range(len(date)):
        #     if i < 90:
        #         continue

            highT = high[i]
            lowT = low[i]
            volT = vol[i]
            TurnoverRateT = TurnoverRate[i]
            avgT = avg[i]
            print(date[i])
            dateT = date[i]
            self.calcu(dateT,highT, lowT,avgT, volT, TurnoverRateT/100, flag=flag, AC=AC)  # 东方财富的小数位要注意,兄弟萌。我不除100懵逼了
  • 使用筹码分布计算获利盘

这是计算结果,可以看出,图形和通达信基本一致。 然后比对每一天的具体数值后, 基本偏差也不大于10%。和东方财富,同花顺等平台比对后也是基本精准的。

  • 三角分布使用极限逼近的方法去逼近,划分成一个个小区 仓库地址:github

总结

这里的筹码分布本质上其实也只是一个概率模型,能够较好的反应实际的筹码分布。通过三角分布或者均匀分布去进行运算,实践中可以考虑加入更多trick。

最后,这些指标,都只是参考。。。。

chipdistribution's People

Contributors

kengerlwl avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

chipdistribution's Issues

Winner函数是否有问题?

按照P求获利盘, 为什么要遍历ChipList所有数据, 不应该是按照当前周期的Chip数据计算吗?
for i in self.Chip:
self.Chip[i] = self.Chip[i] * (1 - TurnoverRateT * A)
for i in tmpChip:
if i in self.Chip:
self.Chip[i] += tmpChip[i] * (TurnoverRateT * A)
else:
self.Chip[i] = tmpChip[i] * (TurnoverRateT * A)
import copy
self.ChipList[dateT] = copy.deepcopy(self.Chip)
按照代码, ChipList是每个周期的存档, Chip是每周期更新的最终数据.

我想用10分钟线或者30分钟线计算最近一天的

      time  price  change  volume   amount type

0 09:25:04 7.87 -0.10 2443 1922641 卖盘
1 09:30:03 7.87 0.00 636 500120 卖盘
2 09:30:06 7.87 0.00 523 411353 买盘
3 09:30:10 7.87 0.00 389 306014 买盘
4 09:30:12 7.87 0.00 741 582160 买盘
。。。。。。。。。。。。。。。

我现在拿到的是这种数据,这种能不能计算筹码分布。这个数据缺少了换手 的那列的数据

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.