用于获得个股MACD数据及每日收盘数据的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('<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为一个元组,由每日的收盘价组成。

祝大家好运。

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

  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

soar3033

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值