程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python量化-如何獲取實時股票信息

編輯:Python

如何獲取實時股票信息

股票信息的接口有很多,之前大家常用的是新浪的,但在年初的時候,新浪的接口突然不能使用,給大家造成了很大的困擾,為此網上也有很多教程教大家如何從新浪獲取數據,跟著教程弄了半天也不行,索性換到126(也就是網易了),感覺速度都還不錯。

首先我們看下接口地址:http://api.money.126.net/data/feed/1000001,money.api

其中的1000001就是股票代碼了,跟新浪的不同,他的第一位代表交易所,後面6位是股票代碼

  • 0:上交所
  • 1:深交所
  • 2:北交所

先通過浏覽器看下數據結構:

_ntes_quote_callback({
"1000001": {
"code": "1000001",
"percent": 0.002113,
"high": 14.25,
"askvol3": 1026758,
"askvol2": 810700,
"askvol5": 290493,
"askvol4": 461100,
"price": 14.23,
"open": 14.2,
"bid5": 14.18,
"bid4": 14.19,
"bid3": 14.2,
"bid2": 14.21,
"bid1": 14.22,
"low": 14.11,
"updown": 0.03,
"type": "SZ",
"bidvol1": 323600,
"status": 0,
"bidvol3": 244200,
"bidvol2": 673474,
"symbol": "000001",
"update": "2022/06/25 17:59:57",
"bidvol5": 343500,
"bidvol4": 145200,
"volume": 86604061,
"askvol1": 817268,
"ask5": 14.27,
"ask4": 14.26,
"ask1": 14.23,
"name": "平安銀行",
"ask3": 14.25,
"ask2": 14.24,
"arrow": "↑",
"time": "2022/06/24 16:00:58",
"yestclose": 14.2,
"turnover": 1227798687.09
}
});

可以看出_ntes_quote_callback()中的就是標准的json數據,我們只要通過正則表達式就可以取出。

我們先定義一個數據結構:

class NetTick:
def __init__(self, dict={}):
self.name = dict.get('name') # 股票名稱
self.yestclose = dict.get('yestclose') # 昨日收盤價
self.bidvol5 = dict.get('bidvol5') # 買5數量
self.bidvol4 = dict.get('bidvol4') # 買4數量
self.bidvol3 = dict.get('bidvol3') # 買3數量
self.bidvol2 = dict.get('bidvol2') # 買2數量
self.bidvol1 = dict.get('bidvol1') # 買1數量
self.bid5 = dict.get('bid5') # 買5價格
self.bid4 = dict.get('bid4') # 買4價格
self.bid3 = dict.get('bid3') # 買3價格
self.bid2 = dict.get('bid2') # 買2價格
self.bid1 = dict.get('bid1') # 買1價格
self.askvol5 = dict.get('askvol5') # 賣5數量
self.askvol4 = dict.get('askvol4') # 賣4數量
self.askvol3 = dict.get('askvol3') # 賣3數量
self.askvol2 = dict.get('askvol2') # 賣2數量
self.askvol1 = dict.get('askvol1') # 賣1數量
self.ask5 = dict.get('ask5') # 賣5價格
self.ask4 = dict.get('ask4') # 賣4價格
self.ask3 = dict.get('ask3') # 賣3價格
self.ask2 = dict.get('ask2') # 賣2價格
self.ask1 = dict.get('ask1') # 賣1價格
self.symbol = dict.get('symbol') # 股票代碼 第一位1:深交所 0:上交所 2北交所
self.volume = dict.get('volume') # 成交量
self.price = dict.get('price') # 當前價格
self.open = dict.get('open') # 開盤價
self.low = dict.get('low') # 最低價
self.high = dict.get('high') # 最高價
self.code = dict.get('code') # 去除標記為的股票代碼
self.turnover = dict.get('turnover') # 成交額
self.percent = dict.get('percent') # 漲跌幅
self.updown = dict.get('updown') # 漲跌金額

通過研究,我們發現126的接口支持多個股票查詢,那我們可以定義兩個方法,一個查單個,一個查多個,具體實現如下:

import requests
import re
from models.nettick import NetTick
from utils.packages import * class NetEaseData:
@staticmethod
def get_realtime_data(symbol):
"""
網易的實時數據接口
:param symbol: 股票代碼
:return: Tick
"""
code = NetEaseData.convert_market(symbol)
try:
response = requests.get("http://api.money.126.net/data/feed/{},money.api".format(code)).text
re_find = NetEaseData.__re_find(response)
if re_find is not None:
find_stock = re_find.get(code)
if find_stock is not None:
return NetTick(find_stock) except Exception as e:
logger.error('請求網易接口出錯,錯誤信息:{}'.format(e)) return None @staticmethod
def convert_market(other_market_code=str):
"""
轉換通用股票代碼 sz sh bj開頭+股票代碼
"""
if other_market_code[0:2].lower() == 'sh':
return '0' + other_market_code[2:]
elif other_market_code[0:2].lower() == 'sz':
return '1' + other_market_code[2:]
else:
return '2' + other_market_code[2:] @staticmethod
def get_realtime_datas(symbols=[]):
"""
網易的實時數據接口
:param symbols: 股票代碼列表
:return: Ticks列表
"""
codes = [NetEaseData.convert_market(code) for code in symbols]
result = []
try:
response = requests.get("http://api.money.126.net/data/feed/{},money.api".format(','.join(codes))).text
re_find = NetEaseData.__re_find(response)
if re_find is not None:
for code in re_find:
item = re_find[code]
result.append(NetTick(item))
except Exception as e:
logger.error('請求網易接口出錯,錯誤信息:{}'.format(e)) return result @staticmethod
def __re_find(response):
find = re.findall(r"_ntes_quote_callback\((.*)\);", response)
if len(find) >= 1:
return to_obj(find[-1]) return None if __name__ == '__main__':
ticks = NetEaseData.get_realtime_datas(['sh588000', 'sz000001', 'bj831010'])
[print(tick.symbol, tick.name, tick.price) for tick in ticks]
tick = NetEaseData.get_realtime_data('sz127045')
print(tick.symbol, tick.name, tick.price)

使用也非常簡單

  • NetEaseData.get_realtime_data:獲取單個股票
  • NetEaseData.get_realtime_datas : 獲取多個股票數據

這裡我股票代碼用的是兼容原有新浪模式的,你可以自己做下修改。

目前正在升級自己的量化平台,也會將之前的一些代碼公布出來,如果喜歡請點個推薦,謝謝

Python量化-如何獲取實時股票信息的更多相關文章

  1. python獲取實時股票信息

    Python3獲取股票行情數據(中國個股/中國指數/全球指數) #!/usr/local/bin/python3 #coding=utf-8 #source http://www.cnblogs.co ...

  2. python量化分析系列之---5行代碼實現1秒內獲取一次所有股票的實時分筆數據

    python量化分析系列之---5行代碼實現1秒內獲取一次所有股票的實時分筆數據 最近工作太忙了,有一個星期沒有更新文章了,本來這一期打算分享一些對龍虎榜數據的分析結果的,現在還沒有把數據內的價值很好 ...

  3. 金融量化分析-python量化分析系列之---使用python獲取股票歷史數據和實時分筆數據

    財經數據接口包tushare的使用(一) Tushare是一款開源免費的金融數據接口包,可以用於獲取股票的歷史數據.年度季度報表數據.實時分筆數據.歷史分筆數據,本文對tushare的用法,已經存在的 ...

  4. Python腳本:獲取股票信息

    在水木上看到有人在問到想用python去獲取股票的信息,sina finance上面的那些數據的是通過js控制的,會根據股票代碼去獲取實時信息然後根據用戶友好的方式展示出來.首先,新浪的一個url讓我 ...

  5. 人臉檢測及識別python實現系列(1)——配置、獲取實時視頻流

    人臉檢測及識別python實現系列(1)——配置.獲取實時視頻流 1. 前言 今天用多半天的時間把QQ空間裡的幾篇年前的舊文搬到了這裡,算是完成了博客搬家.QQ空間裡還剩下一些記錄自己數學學習路線的學 ...

  6. 目前比較流行的Python量化開源框架匯總(交易+風險分析工具)

     注:點擊框架名稱通往Github talib talib的簡稱是Technical Analysis Library,主要功能是計算行情數據的技術分析指標 numpy 介紹:一個用python實現的 ...

  7. 中國的 Python 量化交易工具鏈有哪些

    摘抄自知乎:https://www.zhihu.com/question/28557233 如題,提問的范圍限於適合中國大陸金融市場使用的工具鏈,所以IbPy和Quotopian之類主要面向歐美市場的 ...

  8. Python量化交易

    資料整理: 1.python量化的一個github 代碼 2.原理 + python基礎 講解 3.目前發現不錯的兩個量化交易 學習平台: 聚寬和優礦在量化交易都是在15年線上布局的,聚寬是15年的新 ...

  9. python執行shell獲取硬件參數寫入mysql

    最近要獲取服務器各種參數,包括cpu.內存.磁盤.型號等信息.試用了Hyperic HQ.Nagios和Snmp,它們功能都挺強大的,但是於需求不是太符,亦或者太heavy. 於是乎想到用python ...

  10. 運用Python語言編寫獲取Linux基本系統信息(三):Python與數據庫編程,把獲取的信息存入數據庫

    運用Python語言編寫獲取Linux基本系統信息(三):Python與數據庫編程 有關前兩篇的鏈接: 運用Python語言編寫獲取Linux基本系統信息(一):獲得Linux版本.內核.當前時間 運 ...

隨機推薦

  1. Photoshop將普通照片快速制作二次元漫畫風格效果

    今天為大家分享Photoshop將普通照片快速制作二次元漫畫風格效果,教程很不錯,對於喜歡漫畫的朋友可以參考本文,希望能對大家有所幫助! 一提到日本動畫電影,大家第一印象肯定是宮崎駿,但是日本除了宮崎 ...

  2. page object

    http://www.51testing.com/html/76/316176-849962.html

  3. oracle11gRAC環境使用RMAN增量備份方案

    轉摘:http://blog.itpub.net/29819001/viewspace-1320977/ [[email protected] ~]$ rman target /Recovery Manager: R ...

  4. MVC 實現計算頁面執行時間

    使用 ActionFilterAttribute 來實現: public class PerformanceActionAttribute:ActionFilterAttribute { public ...

  5. Windows下Android Studio長時間停留在Building "Project Name" Gradle project info畫面的解決方法

    問題描述: 創建好一個Android項目後,Android Studio長時間停留在Building [Project Name] Gradle project info畫面不動. 原因: 此時And ...

  6. 使用POI創建Excel文件下載

    POIExcelUtils.java: package com.saicfc.pmpf.internal.manage.utils; import java.io.File; import java. ...

  7. 啟動apache服務時報錯【the requested operation has failed】

    想要解決錯誤,首先要找到錯誤的原因. 使用ApacheMonitor.exe啟動apache服務看不到任何錯誤的原因. 找到問題原因:cmd--命令端--切換到apache的bin目錄,執行如下命令: ...

  8. Python全國二級等級考試(2019)

    一.前言 2018年9月隨著全國計算機等級考試科目中加入“二級Python”,也確立了Python在國內的地位,豬哥相信Python語言勢必會像PS那般普及.不久的將來,誰會Python誰就能獲得女神 ...

  9. sublime text3插件增強側邊欄的功能文件的復制粘貼

    快捷鍵ctrl + shift +p 輸入  install package 回車,調出插件搜索器, 在搜索欄中輸入 SideBarEnhancements 回車安裝插件. 在側邊欄中的各種操作功能增 ...

  10. django - 總結

    0.html-socket import socket def handle_request(client): request_data = client.recv(1024) print(" ...


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved