如何利用Jupyter Notekook做初步分析
发表于:2024-11-29 作者:千家信息网编辑
千家信息网最后更新 2024年11月29日,这篇文章主要介绍如何利用Jupyter Notekook做初步分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!最近一段时间都是Jupyter Notebook做策略的最初版本
千家信息网最后更新 2024年11月29日如何利用Jupyter Notekook做初步分析
这篇文章主要介绍如何利用Jupyter Notekook做初步分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
最近一段时间都是Jupyter Notebook做策略的最初版本设计,就是行情导入画图一类。
之前做个dataframe做分析容易,这个算是简化版本。
新建一个DataAnalyzer 类,这个简单很多,支持从csv和mongodb导入行情数据,和从1分钟k线整合不同分钟k线
下面是导入1分钟螺纹钢数据,整合为5分钟K线
from pymongo import MongoClient, ASCENDINGimport pandas as pdimport numpy as npfrom datetime import datetimeimport talibimport matplotlib.pyplot as pltimport scipy.stats as st%matplotlib inline%config InlineBackend.figure_format = 'retina'class DataAnalyzer(object): """ """ def __init__(self, exportpath="C:\Project\\", datformat=['datetime', 'high', 'low', 'open', 'close','volume']): self.mongohost = None self.mongoport = None self.db = None self.collection = None self.df = pd.DataFrame() self.exportpath = exportpath self.datformat = datformat self.startBar = 2 self.endBar = 12 self.step = 2 self.pValue = 0.015 def db2df(self, db, collection, start, end, mongohost="localhost", mongoport=27017, export2csv=False): """读取MongoDB数据库行情记录,输出到Dataframe中""" self.mongohost = mongohost self.mongoport = mongoport self.db = db self.collection = collection dbClient = MongoClient(self.mongohost, self.mongoport, connectTimeoutMS=500) db = dbClient[self.db] cursor = db[self.collection].find({'datetime':{'$gte':start, '$lt':end}}).sort("datetime",ASCENDING) self.df = pd.DataFrame(list(cursor)) self.df = self.df[self.datformat] self.df = self.df.reset_index(drop=True) path = self.exportpath + self.collection + ".csv" if export2csv == True: self.df.to_csv(path, index=True, header=True) return self.df def csv2df(self, csvpath, dataname="csv_data", export2csv=False): """读取csv行情数据,输入到Dataframe中""" csv_df = pd.read_csv(csvpath) self.df = csv_df[self.datformat] self.df["datetime"] = pd.to_datetime(self.df['datetime']) # self.df["high"] = self.df['high'].astype(float) # self.df["low"] = self.df['low'].astype(float) # self.df["open"] = self.df['open'].astype(float) # self.df["close"] = self.df['close'].astype(float) # self.df["volume"] = self.df['volume'].astype(int) self.df = self.df.reset_index(drop=True) path = self.exportpath + dataname + ".csv" if export2csv == True: self.df.to_csv(path, index=True, header=True) return self.df def df2Barmin(self, inputdf, barmins, crossmin=1, export2csv=False): """输入分钟k线dataframe数据,合并多多种数据,例如三分钟/5分钟等,如果开始时间是9点1分,crossmin = 0;如果是9点0分,crossmin为1""" dfbarmin = pd.DataFrame() highBarMin = 0 lowBarMin = 0 openBarMin = 0 volumeBarmin = 0 datetime = 0 for i in range(0, len(inputdf) - 1): bar = inputdf.iloc[i, :].to_dict() if openBarMin == 0: openBarmin = bar["open"] if highBarMin == 0: highBarMin = bar["high"] else: highBarMin = max(bar["high"], highBarMin) if lowBarMin == 0: lowBarMin = bar["low"] else: lowBarMin = min(bar["low"], lowBarMin) closeBarMin = bar["close"] datetime = bar["datetime"] volumeBarmin += int(bar["volume"]) # X分钟已经走完 if not (bar["datetime"].minute + crossmin) % barmins: # 可以用X整除 # 生成上一X分钟K线的时间戳 barMin = {'datetime': datetime, 'high': highBarMin, 'low': lowBarMin, 'open': openBarmin, 'close': closeBarMin, 'volume' : volumeBarmin} dfbarmin = dfbarmin.append(barMin, ignore_index=True) highBarMin = 0 lowBarMin = 0 openBarMin = 0 volumeBarmin = 0 if export2csv == True: dfbarmin.to_csv(self.exportpath + "bar" + str(barmins)+ str(self.collection) + ".csv", index=True, header=True) return dfbarminexportpath = "C:\\Project\\"DA = DataAnalyzer(exportpath)#数据库导入start = datetime.strptime("20190920", '%Y%m%d')end = datetime.now()dfrb8888 = DA.db2df(db="VnTrader_1Min_Db", collection="rb8888", start = start, end = end,export2csv=True)dfrb5min = DA.df2Barmin(dfrb8888,5,crossmin=1, export2csv=True)dfrb5min.tail()
2. 计算5分钟K线的参照,包括标准差,rsi,5分钟均线,和40分钟均线
logdata = pd.DataFrame()logdata['close'] =(dfrb5min['close'])# logdata['tr'] = talib.ATR(np.array(dfrb8888['high']), np.array(dfrb8888['low']), np.array(dfrb8888['close']) ,1)# logdata['atr'] = talib.ATR(np.array(dfrb8888['high']), np.array(dfrb8888['low']), np.array(dfrb8888['close']) ,20)logdata['std20'] = talib.STDDEV( np.array(dfrb5min['close']) ,20)logdata['rsi30'] = talib.RSI(np.array(dfrb5min['close']) ,30)logdata['sma5'] = talib.SMA(np.array(dfrb5min['close']) ,5)logdata['sma40'] = talib.SMA(np.array(dfrb5min['close']) ,40)logdata.plot(subplots=True,figsize=(18,16))
3. 使用快慢均线策略,显示买入卖出点
closeArray = np.array(logdata['close'])listup,listdown = [],[]for i in range(1,len(logdata['close'])): if logdata.loc[i,'sma5'] > logdata.loc[i,'sma40'] and logdata.loc[i-1,'sma5'] < logdata.loc[i-1,'sma40']: listup.append(i) elif logdata.loc[i,'sma5'] < logdata.loc[i,'sma40'] and logdata.loc[i-1,'sma5'] > logdata.loc[i-1,'sma40']: listdown.append(i)fig=plt.figure(figsize=(18,6))plt.plot(closeArray, color='y', lw=2.)plt.plot(closeArray, '^', markersize=5, color='r', label='UP signal', markevery=listup)plt.plot(closeArray, 'v', markersize=5, color='g', label='DOWN signal', markevery=listdown)plt.legend()plt.show()
以上是"如何利用Jupyter Notekook做初步分析"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
数据
行情
分析
均线
时间
内容
数据库
版本
策略
篇文章
整合
输入
不同
价值
兴趣
多种
小伙
小伙伴
就是
快慢
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全于会计信息化
软件开发可行性分哪些
视屏软件开发
安徽云网络技术服务价格
天津乐歪网络技术有限公司
地心守护者服务器
我的世界服务器没有红石权限
北京放心软件开发价格标准
万德数据库股票收益
北京大数据软件开发收费报价表
世界根服务器
黄慧婷 网络安全
网络安全工作总结及部署
公需课 网络安全填空题
第一代服务器叫什么服务器
一年级网络安全手抄报模板图片
网络营销外包服务器
宝胜网络技术
建行开发的应用软件开发工具
服务器的硬盘怎么初始化
IAEA网络安全法规
数据库系统 萨
福建信睿网络技术岗
网络安全防范工作的口号
交通网络安全事件应急预案
数据库 orcle
频频有礼服务器出错
库存 软件开发
没有公网ip如何建立游戏服务器
90后创建软件开发公司