<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          使用baoStock+talib畫一個股票籌碼圖

          共 9605字,需瀏覽 20分鐘

           ·

          2022-04-17 10:51

          在股市中,籌碼就是交易最真實(shí)的刻畫,我們摸索了一年,最后還是決定罷黜百家,獨(dú)尊籌碼。就是說炒股首先是趨勢,其次才是戰(zhàn)術(shù)。時代創(chuàng)造英雄,但很少有英雄創(chuàng)造時代。股市應(yīng)該服從趨勢第一的原則。在正向趨勢內(nèi)的波濤才是水手展現(xiàn)才華的地方。所以這塊作者借此機(jī)會再用python畫一個籌碼圖。稍微寫個筆記,當(dāng)做打發(fā)周末的美好時光了。
          1. 籌碼類

          class Chip:
          index=0
          open=0
          close=0
          max=0
          min=0
          avc_price=0
          chouMa=0
          def __init__(self,index,open,close,max,min,avc_price,chouMa): self.index=index self.open=open self.close=close self.max=max self.min=min self.avc_price=avc_price self.chouMa=chouMa
          def getChouMa(self): return self.chouMa

          def getOpen(self): return self.open
          def getClose(self): return self.close
          def getAvcPrice(self): return self.avc_price
          def getMax(self): return self.max
          def getMin(self): return self.min
          def getIndex(self): return self.index
          def print(self): print("日期:"+str(self.getIndex())+" 籌碼:"+str(self.getChouMa())+" 最高:"+str(self.getMax())+" 最低:"+str(self.getMin())+" 平均:"+str(self.getAvcPrice()))

          2、籌碼計(jì)算

          # 籌碼量的計(jì)算from src.NewTun.Chip import Chip

          class ChipCalculate:
          isProd=False shuanJian = 1
          # 1.價(jià)格和籌碼量的分布 price_vol = {}
          # 2.每個交易日的籌碼量 DayChouMaList = []

          # 倒敘計(jì)算每日的籌碼量 # 傳入的數(shù)據(jù)id,open,high,low,close,volume,typePrice,trun # 0, 1, 2, 3, 4, 5, 6, 7 def getDataByShowLine(self, data,prod): self.isProd=True result = [] dataLength = len(data) csdnAvcPrice = [] TtodayChouma = [] TTprice = 0 TTmax = 0 shuanjian = 0????????#?保障顯示120天的籌碼線 # 倒敘計(jì)算每日的籌碼量,當(dāng)日的籌碼分布和最近的120天有關(guān)系????????for?k?in?range(len(data)?-?120): self.DayChouMaList.clear() # 倒數(shù)第k日的基本數(shù)據(jù) Baseline = data[dataLength - 1 - k] if Baseline[8] < 1: continue # 拿到id baseIndex = int(Baseline[0]) currentPrice = float(Baseline[4]) for i in range(120): if i < 1: continue line = data[dataLength - k - i] if line[8] < 1: continue if line[0] == '': index = 0 else: index = int(line[0]) open = float(line[1]) close = float(line[4]) max = float(line[2]) min = float(line[3]) vol = 0 if line[5] == '': vol = 0 else: vol = float(line[5]) avc_price = float(line[6]) if line[7] == '': line[7] = 0 if data[dataLength - i][8] == '' or data[dataLength - i][8] == None or float( data[dataLength - i][8]) < 1: continue if i == 1: currentChouMa = vol chip = Chip(index, open, close, max, min, avc_price, currentChouMa) shuanjian = (1 - float(data[dataLength - i][7]) / 100) self.DayChouMaList.append(chip) else: value = 0 if data[dataLength - i][5] != '': value = float(data[dataLength - i][5]) chouma = shuanjian * value shuanjian = shuanjian * (1 - float(data[dataLength - i][7]) / 100) chip = Chip(index, open, close, max, min, avc_price, chouma) self.DayChouMaList.append(chip) # 倒序計(jì)算完每日的籌碼量,然后將籌碼平均分布到當(dāng)日的價(jià)格上 todayChouma, tmax, csdn ,maxVolprice,myUp= self.adviseChouMa2Price() if k == 0: TtodayChouma = todayChouma TTmax = tmax csdnTemp = [] csdnTemp.append(baseIndex) csdnTemp.append(csdn) csdnTemp.append(TtodayChouma) csdnTemp.append("") csdnTemp.append(TTmax) t = 0 if currentPrice * 100 > maxVolprice: # 當(dāng)前的價(jià)格大于籌碼的平均價(jià)格 t = 1 else: t = 0 csdnTemp.append(t) csdnTemp.append(myUp)
          if csdn * 100 >= maxVolprice and t == 1: csdnTemp.append(1) else: csdnTemp.append(0) result.append(csdnTemp) return result
          # 將每日的籌碼分布到價(jià)格上
          def adviseChouMa2Price(self): length = len(self.DayChouMaList) self.price_vol.clear() for i in range(length): # 當(dāng)日的籌碼 chouma = self.DayChouMaList[i].getChouMa() index = self.DayChouMaList[i].getIndex() open = self.DayChouMaList[i].getOpen() close = self.DayChouMaList[i].getClose() max = self.DayChouMaList[i].getMax() min = self.DayChouMaList[i].getMin() avcPrice = self.DayChouMaList[i].getAvcPrice() # 移入地時候,矩形和三角形的面積比為3比7,其中矩形的籌碼分布占0.3,三角形占0.7 # 1.先算矩形部分的籌碼遷移,將每股價(jià)格精確到分。 maoshu = round((max - min), 2) * 100 if maoshu <= 0: continue # 得到矩形部分籌碼量 everyMao = chouma * 0.3 / maoshu for j in range(int(maoshu)): # 從最小價(jià)格向最大價(jià)格進(jìn)行逐個籌碼分布 key = j + round(min * 100) # 如果已經(jīng)包含了當(dāng)前價(jià)格,那么就進(jìn)行累加 if self.price_vol.__contains__(key): volTemp = self.price_vol.get(key) volTemp = volTemp + everyMao self.price_vol[key] = volTemp else: # 當(dāng)前價(jià)格上的籌碼量 self.price_vol[key] = everyMao # 三角形一半的籌碼量 totalChouma = chouma * 0.35 # 將三角形的籌碼分布到價(jià)格上 for j in range(int(maoshu / 2)): # 從下往上 if min * 100 + j < avcPrice * 100: key = int(j + min * 100) # -- max # ----- # ----------- avrageprice # ------- # ------ min # 看是遞增還是遞減的,k大于零表示遞增,k小于零表示遞減 k = (avcPrice - min) / ((max - min) / 2) # 當(dāng)前價(jià)格上應(yīng)該分配的籌碼在三角形半上所占據(jù)的比列多少 ditVol = (j * k) / (((avcPrice - min) * (max - min) / 2) / 2) ditChouma = totalChouma * ditVol # 下三角籌碼分配 if self.price_vol.__contains__(key): volTemp = self.price_vol[key] volTemp = volTemp + ditChouma self.price_vol[key] = volTemp else: self.price_vol[key] = ditChouma # 上三角籌碼分布 if self.price_vol.__contains__(int(max * 100 - j)): volTemp = self.price_vol[int(max * 100 - j)] volTemp = volTemp + ditChouma self.price_vol[int(max * 100 - j)] = volTemp else: self.price_vol[int(max * 100 - j)] = ditChouma choumaList = [] isFirst = 1 totalVol = 0 totalPrice = 0 tmax = 0 #籌碼峰價(jià)格 maxVolprice=0 #weight價(jià)格 weightPrice=0 for i in sorted(self.price_vol): # 這里的i就表示價(jià)格 if isFirst == 1: isFirst = 0 cm = [] # 尋找最大的籌碼量 if self.price_vol[i] > tmax: tmax = self.price_vol[i] maxVolprice = i # 計(jì)算當(dāng)日的各個價(jià)格上的籌碼量之和 totalVol = totalVol + self.price_vol[i] # 計(jì)算當(dāng)前價(jià)格上籌碼的累計(jì)大小 totalPrice = totalPrice + i * self.price_vol[i] # 封裝當(dāng)前價(jià)格和價(jià)格上的籌碼量 cm.append(i) cm.append(self.price_vol[i]) choumaList.append(cm) if totalVol == 0: csdn = 0 return choumaList, 0, tmax, csdn,0,0 else: csdn = round((totalPrice / totalVol) / 100, 2) myUp=1 if self.isProd==True: close = self.DayChouMaList[0].getClose() downPower=0 upPower=0 for i in sorted(self.price_vol): # 這里的i就表示價(jià)格 #戰(zhàn)斗力對比 tP=close-round(i/100,2) if tP<0: downPower=downPower+(tP*self.price_vol[i]) if tP>0: upPower=upPower+(tP*self.price_vol[i]) result=upPower+downPower if result>=0: myUp=1 else: myUp=0????????????return?choumaList,?tmax,?csdn,maxVolprice,myUp

          3、籌碼作圖

          # 籌碼計(jì)算import time
          import numpy as npimport pandas as pdimport talibfrom matplotlib import pyplot as plt
          from src.NewTun.ChipCalculate import ChipCalculateimport baostock as bs
          class?ParseChouMa:????#畫160的窗口期籌碼????window?=?160
          def doParseByCode(self,code): endTime = time.strftime('%Y-%m-%d', time.localtime(time.time())) lg = bs.login() rs = bs.query_history_k_data_plus(code, "date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,isST", start_date="2018-01-01", end_date=endTime, frequency="d", adjustflag="2") data_list = [] while (rs.error_code == '0') & rs.next(): data_list.append(rs.get_row_data()) result = pd.DataFrame(data_list, columns=rs.fields) start = len(result) - self.window result = result.loc[:, ['date', 'open', 'high', 'low', 'close', 'volume', 'turn']] if code == 'sh.000001': result['temp'] = 100 result['open'] = talib.DIV(result['open'], result['temp']) result['high'] = talib.DIV(result['high'], result['temp']) result['low'] = talib.DIV(result['low'], result['temp']) result['close'] = talib.DIV(result['close'], result['temp']) result = result[-self.window:] chipCalculateList = [] for index, row in result.iterrows(): if index>=start: temp = [] temp.append(index-start) print(index-start) temp.append(row['open']) temp.append(row['high']) temp.append(row['low']) temp.append(row['close']) temp.append(row['volume']) temp.append(row['close']) temp.append(row['turn']) temp.append(1) chipCalculateList.append(temp) index=[] closePrice=[] for i in range(len(chipCalculateList)): index.append(chipCalculateList[i][0]) close=chipCalculateList[i][4] close=round(float(close), 2) closePrice.append(close) return chipCalculateList,index,closePrice
          # K線的展示 def show(self,choumaList,TavcPrice,tmax,index,closePrice): fig=plt.figure() ax=fig.add_axes([0.1,0.35,0.6,0.6]) # 畫平均成本 ax.plot(index, closePrice, color="green") cmx=fig.add_axes([0.7,0.35,0.2,0.6]) chouMalit=np.array(choumaList) for item in chouMalit: item[0]=item[0]*1.0/100 cmx.barh(chouMalit[:,0],chouMalit[:,1],color="Turquoise",align="center",height=0.01) cmx.barh(TavcPrice,tmax,color="red",height=0.02) fig.show()????????pass

          4、demo演示

          parseFile=ParseChouMa()chipCalculateList,index,closePrice=parseFile.doParseByCode("sh.000001")calcualate = ChipCalculate()resultEnd = calcualate.getDataByShowLine(chipCalculateList, True)parseFile.show(resultEnd[0][2],resultEnd[0][1],resultEnd[0][4],index,closePrice)

          5、與通達(dá)信、騰訊自選股籌碼圖的對比

          上證指數(shù)的籌碼分布:

          通達(dá)信


          對比發(fā)現(xiàn)跟通達(dá)信的籌碼差距還挺大。我們按真實(shí)的價(jià)格去重新算一下。發(fā)現(xiàn)還是那樣,所以到底哪個比較靠譜吶?我們再看看其他的股票。

          金證股份

          看看通達(dá)信的籌碼

          手機(jī)app

          發(fā)現(xiàn)差別還挺大的,我們再對比雙匯發(fā)展。


          手機(jī)app


          我們再對比一下冀中能源

          通達(dá)信

          手機(jī)app

          西麥?zhǔn)称?/strong>

          通達(dá)信

          手機(jī)app


          6、總結(jié):

          如開題所說,股票的籌碼決定趨勢,這是我們研究籌碼的動機(jī)。經(jīng)過以上實(shí)驗(yàn),作者憑個人經(jīng)驗(yàn),本算法將籌碼計(jì)算周期設(shè)置為120的時候所繪制的籌碼圖跟軟件上差異最小。當(dāng)然因?yàn)槊糠N軟件的算法都不一樣,因此所繪制的籌碼圖也并非相同。從現(xiàn)實(shí)來說,我們通過算法假設(shè)去演繹現(xiàn)實(shí)往往有理想的成分在里邊。因此算法也只能給出一個大概的方向,作者覺得這應(yīng)該就已經(jīng)夠了。當(dāng)然假設(shè)以后能發(fā)現(xiàn)更好的算法,作者也會第一時間分享出來,本次文章就到這里了,周么愉快。

          春天來了,大家出去走走~
          瀏覽 134
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天堂网在线中文 | 校园激情一区 | 成人四级无码片 | 操B电影 av无码aV天天aV天天爽 | 精品勉费|