日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 依据某几列累加求和_如何用Python找出OBV金叉的股票?

發布時間:2024/10/12 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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金叉的股票?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。