用于获得个股MACD数据及每日收盘数据的python程序

9817 2025-05-03 21:06:39
用于获得个股MACD数据及每日收盘数据的python程序 几年前上一波股票牛市的时候,曾经编写了一个判断股价的python程序。最近几日股票市场又开

用于获得个股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('

(......)
')

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为一个元组,由每日的收盘价组成。

祝大家好运。

↓这是用于监控近期大盘可能上涨个股的程序,在上述代码获得macd数据后,对数据及即时股价进行分析,从而获得可能上涨的个股。 用于监控近期大盘可能上涨个股的完整程序

錘的解释|盘点一下额度较高的十大网贷平台?