用于获得个股MACD数据及每日收盘数据的python程序
程序员文章站
2022-04-09 23:44:22
用于获得个股MACD数据及每日收盘数据的python程序几年前上一波股票牛市的时候,曾经编写了一个判断股价的python程序。最近几日股票市场又开始比较火热,估计有的朋友可能需要进行股票数据的获得和分析。现在把那个程序中用于获得macd数据及收盘数据的部分公布出来,给有需要的朋友。import urllib.requestimport gzipimport jsonimport reimport socketimport timeimport threadingsocket.setdef...
用于获得个股MACD数据及每日收盘数据的python程序
几年前上一波股票牛市的时候,曾经编写了一个判断股价的python程序。最近几日股票市场又开始比较火热,估计有的朋友可能需要进行股票数据的获得和分析。现在把那个程序中用于获得macd数据及收盘数据的部分公布出来,给有需要的朋友。
import urllib.request
import gzip
import json
import re
import socket
import time
import threading
socket.setdefaulttimeout(5)
class ur(): #网络连接类
def __init__(self):
pass
def gethtml(self,url):
html=urllib.request.urlopen(url)
html=html.read()
return html
def gethtmll(self,url):
html=self.gethtml(url)
try:
html=html.decode('utf-8')
except:
try:
html=html.decode('gbk')
except:
try:
html=gzip.decompress(html).decode('utf-8')
except:
html=gzip.decompress(html).decode('gbk')
return html
class update(ur): #更新股票代码类
def __init__(self,n):
self.url=r'http://vip.stock.finance.sina.com.cn/corp/go.php/vRPD_NewStockIssue/page/%d.phtml'
self.n=int(n)
self.code=set()
def get(self):
for i in range(self.n):
i+=1
code=self.url % i
k=0
while 1:
k+=1
if k==4:
break
try:
html=super().gethtmll(code)
break
except:
continue
reg=re.compile('<div align="center">(......)</div>')
result=reg.findall(html)
for i in result:
try:
int(i)
except:
continue
i+='\n'
self.code.add(i)
try:
for i in open('stock\\list.dat','r'):
self.code.add(i)
except:
pass
txt=open('stock\\list.dat','w')
txt.close()
txt=open('stock\\list.dat','a')
for i in self.code:
txt.write(i)
txt.close()
class api(ur): #获得个股的json数据类
def __init__(self,code):
self.code=str(code).strip('*')
self.url=r"http://api.finance.ifeng.com/akdaily/?code=%s&type=last"
self.js=None
def get(self):
if int(self.code)<600000:
self.code='sz'+self.code
else:
self.code='sh'+self.code
url=self.url % self.code
while 1:
try:
html=super().gethtmll(url)
break
except:
continue
self.js=json.loads(html)
self.js=self.js['record']
class api60(api): #继承api类功能,数据源改为60分钟线数据
def __init__(self,code):
self.code=str(code).strip('*')
self.url=r'http://money.finance.sina.com.cn/quotes_service/api/jsonp_v2.php/a=/CN_MarketData.getKLineData?symbol=%s&scale=60&ma=no&datalen=1023'
def get(self):
self.js=None
if self.code[0]!='s':
if int(self.code)<600000:
self.code='sz'+self.code
else:
self.code='sh'+self.code
url=self.url % self.code
while 1:
try:
html=super().gethtmll(url)
break
except:
continue
reg=re.compile('{(.*?)}')
self.js=reg.findall(html)
self.js=[i.split(',') for i in self.js]
self.js=[i[4] for i in self.js]
reg=re.compile('"(.*?)"')
self.js=[reg.findall(i) for i in self.js]
self.js=[float(i[0]) for i in self.js]
class macd(api): #获得macd类
def __init__(self,code):
super().__init__(code)
super().get()
self.macd=[] #macd元组
self.day=[] #日收盘数据元组
def getmacd(self):
if len(self.js)!=0:
EMA1=float(self.js[0][3])
self.day.append(EMA1)
EMA2=EMA1
DIF=0
DEA=0
self.macd.append((0,DIF,DEA))
k=0
for i in self.js[1:]:
k+=1
EMA1=EMA1*11/13+float(i[3])*2/13
EMA2=EMA2*25/27+float(i[3])*2/27
self.day.append(i[3])
DIF=round((EMA1-EMA2),3)
DEA=round((DEA*8/10+DIF*2/10),3)
self.macd.append((k,DIF,DEA,EMA1,EMA2))
class macd60(api60): #获得60分钟macd
def __init__(self,code):
super().__init__(code)
def getmacd(self):
self.macd=[]
super().get()
EMA1=self.js[0]
EMA2=EMA1
DIF=0
DEA=0
self.macd.append((0,DIF,DEA))
k=0
for i in self.js[1:]:
k+=1
EMA1=EMA1*11/13+i*2/13
EMA2=EMA2*25/27+i*2/27
DIF=round((EMA1-EMA2),3)
DEA=round((DEA*8/10+DIF*2/10),3)
self.macd.append((k,DIF,DEA,EMA1,EMA2))
aa=macd('600004')
aa.getmacd()
aa=macd(‘600004’) 表示获得600004(白云机场)的股票数据,若要获得其它股票的数据直接更改6位股票代码。
aa.getmacd()为获得macd数据。
aa.macd为一个元组由每日的子元组组成,子元组包含 日期序号,Dif数据,Dea数据,Ema1(不需要考虑),Ema2(不需要考虑)。
若要获得60分钟线macd则使用macd60类初始化。
aa.day为一个元组,由每日的收盘价组成。
祝大家好运。
本文地址:https://blog.csdn.net/soar3033/article/details/107173301
上一篇: 网络 二层架构