欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-01-07 14:58:28
用于获得个股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

上一篇:

下一篇: