Python量化还在为历史资料伤脑筋的朋友看过来(2)
Python量化还在为历史资料伤脑筋的朋友看过来(2)
Python量化还在为历史资料伤脑筋的朋友看过来(2)
接着上一讲;我们今天将来解决,如何把分钟线变成想要的其他分钟或小时线。接着我们利用这些资料来进行绘制k线。直接进入主题走起。
上次讲到,如果输入了以下的程式码,我们可以得到一分钟的股价成交资料。
from pytdx.reader import TdxLCMinBarReader, TdxFileNotFoundException
reader = TdxLCMinBarReader()
df = reader.get_df("D:/new_tdx/vipdoc/sz/minline/sz000417.lc1")
df.tail(10)
现在有了一分钟的资料,所以几乎可以转换成任何一个时间的价格资料。要达到这个目的,必须要使用一个Python的指令; “Resample“。这是一个重新对序列资料整形打包的函式。这里有几个注意点,所以我必须要花一些篇幅来做详细的介绍。首先进入以下的程式码。
df_1HK = df.resample('1H').agg({'open': 'first',
'high': 'max',
'low': 'min',
'close': 'last',
'volume': 'sum'})
df_1HK.tail()
这段程式码的意思是去创造一个df_1HK的Data frame。而它的来源是之前一分钟的那个df的Data frame。启用它重新塑形的指令,(1H)是指我们要想得到一个小时的资料。后面的附加参数是给它解析时的一些参考。比如开盘价就是第1笔资料。而最高就是这个时间段里面最高的价位。最低则相反。收盘为最后一个成交价。而成交量是这个期间所有成交量的加总。接下来看看执行程式执行之后的输出。
可以看到一分钟的资料,现在已经顺利的转换为小时的资料了。但问题跟着也被发现了。可以看到12点的这一笔资料里面是空白的。那是因为我们有中午的休息时间,并没有交易资料。这个必须把它清除掉,所以把这个指令做一些修改。
df_1HK = df.resample('1H').agg({'open': 'first',
'high': 'max',
'low': 'min',
'close': 'last',
'volume': 'sum'}).dropna()
df_1HK.tail()
我们在后面加上了 .dropna();这个指令写的很直白,就是把空白(NaN)的资料直接删掉。加好以后我们接着执行来看看结果。
这个指令果然把这些空白的资料移除了。事实上这里还有一个坑,但是必须要把它放到后面去讲。因为还没有绘图之前,你并不能够了解到我说的这个坑是什么。
Python是被认证与推荐的金融分析重要程式语言。许多的金融与统计上面的分析图表都要Python的 matplotlib套件来完成。一些统计的图形在Python上面来绘制,也是一种还算愉快的经验。但是绘制我们所需要的k线股价分析图表,在之前它就是一个很讨厌的活,绝对是一个苦不堪言的设计经验。但是这几年官方已经把matplotlib关于金融方面的绘图,转到另外一个新的套件上面。那就是我们现在要介绍的"mplfinance"这一套。
在这个绘图套件上面绘制所需要的金融方面的图形,简直不要太方便了。几乎是一行指令就可以产生理想中的图形。当然在使用前,我们必须要先把它引入;输入以下的指令。
import mplfinance as mpf
然后现在来输入一个最简短的指令来完成它的基本绘制。
mpf.plot(df_1HK)
不要说你不相信,我也不相信。这样简短的指令就有办法把图形画出来了。当然这里有几个要注意的,只是我们很巧都避过了。首先它要求必须要是一个以日期排序的资料;第二、资料里面必须要包含开高低收与成交量。缺一不可。很巧的是我们从通达信软件历史资料库当中取得的就是这样的格式,所以没有转换的烦恼。
然后一个更振奋人心的消息;我们可以随意的在这张图当中进行区块的放大,以及资料的前后移动。所以现在我们一次把非常长的资料丢进来,也不怕显示的时候挤成一堆了。
接下来在之前的指令后面再加一些小东西,让它变成最常看的k线。
mpf.plot(df_1HK, type = 'candle')
结果出来还觉得满意吗?有没有什么地方觉得怪怪的呢?是不是多了许多横线出来?这就是我之前说的另外一个转移小时线的坑。这个横线就是在收盘15点之后,事实上已经没有成交资料了。但是它占据了一笔资料位置。这是因为现在取样时的参考位置与方向。从目前的资料看来就知道。我们的位置设定在15:00的时候。是从这个位置向后选一个小时的时间。而实际的需求应该是这个15:00整点是一个时间段的结束。所以再回头去把那个分钟变小时的程式段,我们整理成为以下这样子。
df_1HK = df.resample('1H',closed='right').agg({'open': 'first',
'high': 'max',
'low': 'min',
'close': 'last',
'volume': 'sum'}).dropna()
df_1HK.tail()
这样的改变之后,结果会是像这样。
看起来应该没有问题的,我们再来把图画出来。
看看这样是不是正确又好看多了?最后再把这张图的资讯弄的完整一点;让我们加上成交量与移动平均线。这样就成为了一个基本的完整图形了。一步一步来,先把成交量给加上去。
mpf.plot(df_1HK, type ='candle', volume = True)
接下来再加上移动平均线,整张图就完整又完美了。
mpf.plot(df_1HK, type='candle', volume=True, mav=(4, 9, 18))
学会了就玩起来吧!那么这篇就先讲到这里,下次我们继续。如果这篇文章对你有帮助或喜欢,欢迎点赞并给我关注,谢谢。
留言
張貼留言