文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何利用Jupyter Notekook做初步分析

2023-06-02 03:11

关注

这篇文章主要介绍如何利用Jupyter Notekook做初步分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

最近一段时间都是Jupyter Notebook做策略的最初版本设计,就是行情导入画图一类。

之前做个dataframe做分析容易,这个算是简化版本。

  1. 新建一个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()

如何利用Jupyter Notekook做初步分析

计算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))

如何利用Jupyter Notekook做初步分析

使用快慢均线策略,显示买入卖出点

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做初步分析

以上是“如何利用Jupyter Notekook做初步分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯