量化:從okex獲取k線資料,symbol(交易對), 去重處理,存入到mongodb資料庫
import json
import time
import pymongo
from threading import Thread
import pandas as pd
from urllib.request import Request, urlopen
pd.set_option('expand_frame_repr', False)
temp0 = []
temp1 = []
temp2 = []
temp3 = []
def get_url_data(url, retry_times=5):
"""
從API介面中獲取資料
:param url: API介面pytho
:param retry_times:最大嘗試次數
:return: API json格式資料
"""
# while True:
try:
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
request = Request(url=url, headers=headers)
b_data = urlopen(request, timeout=10).read()
str_data = b_data.decode('utf-8')
json_data = json.loads(str_data)
return json_data
except Exception as http_error:
if retry_times > 0:
return get_url_data(url, retry_times=retry_times - 1)
else:
print('嘗試失敗次數過多,已經放棄,錯誤資訊:%s' % http_error)
return None
def get_candle_from_okex(symbol, type='1min'):
"""
從okex交易所獲取k線資料
:param symbol: 交易對
:param type: 時間間隔
:return:時間點、開盤價、最高價、最低價、收盤價和交易量
"""
url = 'https://www.okex.com/api/v1/kline.do?symbol=%s&type=%s' % (symbol, type) # k線資料
# while True:
json_data = get_url_data(url)
if not json_data:
print('獲取資料錯誤!')
return None
info = json_data[-2]
timestamp = info[0] / 1000
time_array = time.localtime(timestamp)
date = time.strftime("%Y-%m-%d %H:%M:%S", time_array)
open, high, low, close, volume = info[1:]
msg = {'date': date, 'open': open, 'high': high, 'low': low, 'close': close, 'volume': volume}
data = {'symbol': symbol, 'msg': msg}
return data
def save_data_to_mongodb(symbol):
"""
將資料儲存在mongo資料庫中
:param symbol: 交易對
:return:
"""
client = pymongo.MongoClient(host='localhost', port=27017)
db = client['dadada']
coll = db[symbol]
if symbol == 'bch_usdt':
data = get_candle_from_okex(symbol)
if data:
date0 = data['msg']['date']
print(date0, temp0)
if temp0 != [] and date0 != temp0[0]: # 去重處理
temp0[0] = date0
coll.insert(data)
print('存入資料!')
elif temp0 == []:
print('temp0為空列表!')
temp0.append(date0)
coll.insert(data)
print('temp0為空列表,第一次存入資料!')
elif date0 == temp0[0]:
print('拋棄資料!')
if symbol == 'btg_usdt':
data = get_candle_from_okex(symbol)
if data:
date1 = data['msg']['date']
print(date1, temp1)
if temp1 != [] and date1 != temp1[0]:
temp1[0] = date1
coll.insert(data)
print('存入資料!')
elif temp1 == []:
temp1.append(date1)
coll.insert(data)
print('temp1為空列表, 第一次存入資料!')
elif date1 == temp1[0]:
print('拋棄資料!')
if symbol == 'xrp_usdt':
data = get_candle_from_okex(symbol)
if data:
date2 = data['msg']['date']
print(date2, temp2)
if temp2 != [] and date2 != temp2[0]:
temp2[0] = date2
coll.insert(data)
print('存入資料!')
elif temp2 == []:
temp2.append(date2)
coll.insert(data)
print('temp2不為空,第一次存入資料')
elif date2 == temp2[0]:
print('拋棄資料!')
if symbol == 'eos_usdt':
data = get_candle_from_okex(symbol)
if data:
date3 = data['msg']['date']
print(date3, temp3)
if temp3 != [] and date3 != temp3[0]:
temp3[0] = date3
coll.insert(data)
print('存入資料!')
elif temp3 == []:
temp3.append(date3)
coll.insert(data)
print('temp3不為空,第一次存入資料!')
elif date3 == temp3[0]:
print('拋棄資料!')
else:
pass
def main():
while True:
t1 = Thread(target=save_data_to_mongodb, args=('bch_usdt',))
t1.start()
t2 = Thread(target=save_data_to_mongodb, args=('btg_usdt',))
t2.start()
t3 = Thread(target=save_data_to_mongodb, args=('xrp_usdt',))
t3.start()
t4 = Thread(target=save_data_to_mongodb, args=('eos_usdt',))
t4.start()
t1.join()
t2.join()
t3.join()
t4.join()
if __name__ == '__main__':
main()
注意:程式碼冗餘比較多。去重處理,設定全域性變數用字典比用列表的效果要好許多。起執行緒可以用for in 迴圈建立指定數量的執行緒,程式碼要好看許多。
相關推薦
量化:從okex獲取k線資料,symbol(交易對), 去重處理,存入到mongodb資料庫
import json import time import pymongo from threading import Thread import pandas as pd from urllib.request import Request, urlopen
Elasticsearch從0到千萬級資料查詢實踐(非轉載)
1.es簡介 1.1 起源 https://www.elastic.co/cn/what-is/elasticsearch,es的起源,是因為程式設計師Shay Banon在使用Apache Lucene發現不太好用,然後手動改造升級的過程中發展起來的。(程式設計師就是需要有這種動力~)實際
量化交易:建立簽名、從okex平臺獲取ticker資料和k線資料
import hashlib import json import pandas as pd from urllib.request import Request, urlopen pd.set_option('expand_frame_repr', Fals
《機器學習實戰》第2章閱讀筆記3 使用K近鄰演算法改進約會網站的配對效果—分步驟詳細講解1——資料準備:從文字檔案中解析資料(附詳細程式碼及註釋)
本篇使用的資料存放在文字檔案datingTestSet2.txt中,每個樣本資料佔據一行,總共有1000行。 樣本主要包含以下3中特徵: (1)每年獲得飛行常客里程數 (2)玩視訊遊戲所耗時間百分比 (3)每週消費的冰淇淋公升數 在使用分類器之前,需要將處理的檔案格式
TuShare獲取K線數據
行數 股票代碼 期貨 ttl numpy 開始 asics mount start Tushare是一個免費、開源的python財經數據接口包。主要實現對股票等金融數據從數據采集、清洗加工 到 數據存儲的過程,能夠為金融分析人員提供快速、整潔、和多樣的便於分析的數據
敏捷轉型:從搭建TB級大資料應用說起
作者介紹 朱志,建設銀行廈門開發中心技術管理處負責人,目前主要負責大資料技術平臺規劃和技術資產管理。在銀行IT專案管理、資料分析、資料治理以及架構設計領域工作了十五年,曾領導過建總行人力資源專案、ERP報表專案、分行資料分析平臺ODSB專案、管理會計專案以及新一代資訊系統資料分析平臺的建設。 現在各
Spring原始碼:從FactoryBean獲取Bean的例項
主程式碼 詳細分析 主程式碼 類AbstractBeanFactory protected <T> T doGetBean(......){
不只是用於研究:使用Nvivo獲取各種定性資料
NVivo是一種幫助您輕鬆組織和分析無序資訊的軟體,讓您最終作出更好的決策。在本篇文章裡,將介紹使用NVivo獲取各種定性研究的資料。有任何建議和提示請在下方評論區留言,方便大家學習討論。 Nvivo不僅是做研究的軟體 也許人們被問到會不會使用NVivo時會回答道“我不用NVivo
Linux核心:從skb獲取udp頭,udp_hdr()獲取到是錯誤的udp頭
一、skb中獲取ip頭、udp頭 核心程式碼HOOK函式中: 從skb獲取ip頭,使用核心API ip_hdr(): #include <linux/ip.h> struct iphdr *iph; iph = ip_hdr(skb);
處理從第三方獲取的php資料介面,將其輸出純json格式
昨天找了很多獲取介面資料的網站,今天想要用用這些介面,結果發現不會用,主要是返回的資料格式不會用,好心塞呀像我這種php小白,搗鼓了很久很久,才把它搞懂,必須記下來希望當您遇到同樣問題的時候可以節約一點時間吧利用第三方提供的php程式碼,是下面這樣的<?php $met
vue慕課網音樂專案手記:32-如何獲取歌詞的資料,並解析jsonp的格式為json的格式
首先:在qq音樂的官網,能看到如下的歌詞資料這是一個jsonp的資料,但是官方對它做了一些加密,所以還是要通過node去強制改變請求頭。新建一個song.jsimport { commonParams } from './config' import axios from '
【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案(5.3) 登入功能的實現,豐富資料表、建立關聯
1 USE [wkmvc_db] 2 GO 3 /****** Object: Table [dbo].[SYS_CODE] Script Date: 2016/5/17 9:30:01 ******/ 4 SET ANSI_NULLS ON 5 GO 6 SET
bootstrap 表格列格式為進度條,並從後臺獲取進度的資料
@ApiOperation(value = "獲取進度", notes = "獲取進度") @RequestMapping(value = "/getProcess", method = RequestMethod.GET) @ResponseBody public Map getP
jquery $.ajax+php使用jsonp處理資料時,前端success :function無法獲取伺服器返回資料
說明:下面描述的過程前端使用的jQuery 前提下完成的 $.ajax+php開發應用時,由於某些原因,ajax必須使用跨域操作處理資料(jsonp)發現 success:function(msg){ alert(msg); } 不執行,但是ajax請求php的資料在後端
如何生成3分鐘,5分鐘,n分鐘K線資料
這裡討論的不是如何畫k線,而是如何生成特定週期k線的最高價,最低價,開盤價,收盤價。在vnpy的vn.trader的ctaDemo中,群主大人給出了生成1分鐘K線的資料的方法:只要tick.datetime.minute不同就是一條新的K線。但怎麼生成3分鐘,5分鐘,10分
《從零開始學Swift》學習筆記(Day 57)——Swift編碼規範之凝視規範:文件凝視、文檔凝視、代碼凝視、使用地標凝視
精品 -type mil 顯示 clas ber ansi tex text 原創文章。歡迎轉載。轉載請註明:關東升的博客 前面說到Swift凝視的語法有兩種:單行凝視(//)和多行凝視(/*...*/)。這裏來介紹一下他們的使用規範。 1、文件凝視文件凝視就在每個文
多線程一共就倆問題:1.線程安全(訪問共享數據) 2.線程通信(wait(),notify())
class 共享 問題 無法 not 安全 pos 三方 gpo 多線程一共就倆問題:1.線程安全(訪問共享數據) 2.線程通信(wait(),notify()) 1.線程安全,無非就是加鎖,訪問共享資源時,synchronized 2.線程通信,就是控制各個線程之間的
多線程學習-基礎(十二)生產者消費者模型:wait(),sleep(),notify()實現
都是 exce 生產 runnable 下午 util 庫存 jason 最大 一、多線程模型一:生產者消費者模型 (1)模型圖:(從網上找的圖,清晰明了) (2)生產者消費者模型原理說明: 這個模型核心是圍繞著一個“倉庫”的概念,生產者消費者都是圍繞著:“倉庫”
python程式設計:從入門到實踐學習筆記-Django入門(四)
建立其他網頁 我們接下來擴充“學習筆記”專案,建立兩個顯示資料的網頁,其中一個列出所有的主題,另一個顯示特定主題的所有條目。 模板繼承 編寫一個包含通用元素的父模板,並讓每個網頁都繼承這個模板,而不必在每個網頁中重複定義這些通用元素。這樣我們可以專注於開發每個網頁的獨特部分。1.父模板
python程式設計:從入門到實踐學習筆記-Django入門(二)
建立網頁:學習筆記主頁 使用django建立網頁通常分三個階段:定義URL、編寫檢視和編寫模板。 首先必須定義URL模式,其描述了URL是如何設計的,讓django知道如何將瀏覽器請求與網站URL匹配,以確定返回哪個網頁。每個URL都被對映到特定的檢視——檢視函式獲取並處理網頁所需的資料。檢視函