python 依据某几列累加求和_如何用Python找出OBV金叉的股票?
話不多說先上代碼,此代碼經過反復驗證,確認計算結果與通達信完全一致,這里周期取30日:
#請使用前復權的日K線數據import os#緩存數據class SecurityData: code = '' #股票代碼 name = '' #股票名稱 value = 0 #數值#定義列表lst = []#打開日志文件fs = open(r'C:\Py\result.txt','a+')#循環遍歷所有的日K線文件for root, dirs, files in os.walk(r'C:\Py\day'): for file in files: #寫日志 print('正在計算' + file) #打開日K線文件 fs2 = open(os.path.join(root,file), 'r', True) #索引 pos = 0 #數據索引 dataPos = 0 #股票名稱 sName = '' #符合條件的數量 duoCount = 0 #上次均值 lastClose = 0 #OBV obv = 0 #周期 m = 30 #保存數據的集合 lstObv = [] #上次均值 lastObvMa = 0 #循環遍歷每一行 while True: #讀取該行 line = fs2.readline() #沒有行的時候退出 if not line: break #去除前2行和尾行 if pos > 1 and len(line) > 20: #重置數量 duoCount = 0 #分割字符串 strs = line.split(',') #成交量 volume = float(strs[5]) #收盤價 closePrice = float(strs[4]) if dataPos == 0: lastClose = closePrice if closePrice > lastClose: obv = obv + volume elif closePrice < lastClose: obv = obv - volume lstObv.append(obv) #真實計算周期 realN = m if dataPos < m: realN = dataPos + 1 #數值的和 startIndex = dataPos - m + 1 if startIndex < 0: startIndex = 0 sum = 0 if dataPos > m: #高性能求和 sum = lastObvMa * m + obv - lstObv[startIndex - 1] else: #計算和 thisLst = lstObv[startIndex:dataPos + 1] for cVal in thisLst: sum = sum + cVal #計算MA obvMa = sum / realN if (dataPos > 0) and (obv > obvMa) and (lstObv[dataPos - 1] < lastObvMa): duoCount = duoCount + 1 lastObvMa = obvMa lastClose = closePrice #累加索引 dataPos = dataPos + 1 elif pos == 0: sName = line[line.find(' ') + 1 : line.find(' 日線')] #累加索引 pos = pos + 1 #保存到列表中 securityData = SecurityData() securityData.code = file[0 : 8] securityData.value = duoCount securityData.name = sName lst.append(securityData) #關閉文件流 fs2.close()#給列表排序from operator import attrgetterlst2 = sorted(lst, key=attrgetter('value'), reverse=True)#輸出結果count = 0for val in lst2: if val.value >= 1: print(str(count + 1) + ',' + val.name + ',' + val.code + ',OBV金叉') fs.write(str(count + 1) + ',' + val.name+ ',' + val.code + ',OBV金叉\r\n') count = count + 1#關閉文件流fs.close()新建一個文件,命名為OBV.py,并將上述代碼粘貼到你的文件中。
按照教程下載所有A股的前復權數據,并放到一個文件夾中:
如何免費輕松獲得最完整可靠的股票期貨等歷史數據?
修改Python中的文件和文件夾路徑為你的路徑:
如果沒有安裝Python,就到這個地址下載安裝一下:
https://www.python.org/ftp/python/3.9.0/python-3.9.0-amd64.exe
注意第一個界面的Add to Path一定要勾上。
打開命令提示行,輸入python C:\PY\OBV.py
輸入回車運行腳本,得到如下結果:
result.txt中也輸出了結果:
打開圖形K線驗證結果:
第一個,皖通高速,SH600012,的確是超賣
第二個,四川路橋,SH600039,的確是超賣
第三個,國機汽車,SH600335,的確是超賣
結論:
1.計算結果完全正確,而且是完全對應通達信的;
2.可以直接運行,得到結果文件result.txt,怎么用看你的;
3.可以修改代碼,例如修改輸入結果文件的格式;
4.不止用于A股,什么品種,數據,包括1分鐘,5分鐘,60分鐘線也都可以;
5.可以用來做交易回測,超賣和超買只是把if (dataPos > 0) and (obv > obvMa) and (lstObv[dataPos - 1] < lastObvMa):改成if (dataPos > 0) and (obv < obvMa) and (lstObv[dataPos - 1] > lastObvMa):。
6.可以把代碼嵌入你的Python中,用來做實時監控。
總結
以上是生活随笔為你收集整理的python 依据某几列累加求和_如何用Python找出OBV金叉的股票?的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 14年别克昂科拉的副驾驶坐怎样调高低?
- 下一篇: python dict遍历_Python
