用ython浅析股票数据派森学python

本文将使用Python来可视化股票数据,比如绘制K线图,并且探究各项指标的含义和关系,最后使用移动平均线方法初探投资策略。

其中参数usecols=range(15)限制只读取前15列数据,parse_dates=[0]表示将第一列数据解析成时间格式,index_col=0则将第一列数据指定为索引。

10

11

12

13

14

15

16

import pandas as pd

import numpy as np

%matplotlib inline

%pylab inline

#读取数据

stock = stock[::-1]  #逆序排列

10

11

12

13

14

15

16

17

18

19

Data columns (total 14 columns):

open        20 non-null float64

high            20 non-null float64

close           20 non-null float64

low             20 non-null float64

volume          20 non-null float64

price_change    20 non-null float64

p_change        20 non-null float64

ma5             20 non-null float64

ma10            20 non-null float64

ma20            20 non-null float64

v_ma5           20 non-null float64

v_ma10          20 non-null float64

v_ma20          20 non-null float64

turnover        20 non-null float64

dtypes: float64(14)

memory usage: 2.3 KB

在观察每一列的名称时,我们发现’open’的列名前面似乎与其它列名不太一样,为了更清楚地查看,使用.columns得到该数据所有的列名如下:

Index(['    open', 'high', 'close', 'low', 'volume', 'price_change',

'p_change', 'ma5', 'ma10', 'ma20', 'v_ma5', 'v_ma10', 'v_ma20',

'turnover'],

dtype='object')

于是发现’open’列名前存在多余的空格,我们使用如下方法修正列名。

至此,我们完成了股票数据的导入和清洗工作,接下来将使用可视化的方法来观察这些数据。

首先,我们观察数据的列名,其含义对应如下:

这些指标总体可分为两类:

stock['close'].plot(grid=True)

如果我们将每日的开盘、收盘价和最高、最低价以折线的形式绘制在一起,难免显得凌乱,也不便于分析。那么有什么好的方法能够在一张图中显示出这四个指标?答案下面揭晓。

K线图

相传K线图起源于日本德川幕府时代,当时的商人用此图来记录米市的行情和价格波动,后来K线图被引入到股票市场。每天的四项指标数据用如下蜡烛形状的图形来记录,不同的颜色代表涨跌情况。

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

def pandas_candlestick_ohlc(stock_data, otherseries=None):

# 设置绘图参数,主要是坐标轴

mondays = WeekdayLocator(MONDAY)

alldays = DayLocator()

dayFormatter = DateFormatter('%d')

weekFormatter = DateFormatter('%b %d')

else:

weekFormatter = DateFormatter('%b %d, %Y')

# 创建K线图

stock_array[:,0] = date2num(stock_array[:,0])

candlestick_ohlc(ax, stock_array, colorup = "red", colordown="green", width=0.4)

# 可同时绘制其他折线图

if otherseries is not None:

for each in otherseries:

pandas_candlestick_ohlc(stock)

这里红色代表上涨,绿色代表下跌。

相对变化量

stock['return'].plot(grid=True)

第二种方法是计算每天的涨跌幅,但计算方式有两种:

这两者可能导致不同的分析结果,样例数据中的涨跌幅使用的是第一个公式,并乘上了100%。

stock['p_change'].plot(grid=True).axhline(y=0, color='black', lw=2)

为了解决第二种方法中的两难选择,我们引入第三种方法,就是计算价格的对数之差,公式如下:

close_price = stock['close']

small = stock[['close', 'price_change', 'ma20','volume', 'v_ma20', 'turnover']]

图中可以明显发现成交量(volume)和换手率(turnover)有非常明显的线性关系,其实换手率的定义就是:成交量除以发行总股数,再乘以100%。所以下面的分析中我们将换手率指标去除,这里使用了相关性关系来实现数据降维。

small = stock[['close', 'price_change', 'ma20','volume', 'v_ma20']]

cov

array([[ 1.        ,  0.30308764,  0.10785519,  0.91078009, -0.37602193],

[ 0.30308764,  1.        , -0.45849273,  0.3721832 , -0.25950305],

[ 0.10785519, -0.45849273,  1.        , -0.06002202,  0.51793654],

[ 0.91078009,  0.3721832 , -0.06002202,  1.        , -0.37617624],

[-0.37602193, -0.25950305,  0.51793654, -0.37617624,  1.        ]])

如果觉得看数字还是不够方便,我们继续将上述相关性矩阵转换成图形,如下图所示,其中用颜色来代表相关系数。我们发现位于(0,3)位置的相关系数非常大,查看数值达到0.91。这两个强烈正相关的指标是收盘价和成交量。

stock[['close','volume']].plot(secondary_y='volume', grid=True)

观察这两个指标的走势,在大部分时候股价上涨,成交量也上涨,反之亦然。但个别情况下则不成立,可能是成交量受到前期的惯性影响,或者还有其他因素。

吴军老师曾讲述他的投资经验,大意是说好的投资方式不是做预测,而是能在合适的时机做出合适的应对和决策。同样股市也没法预测,我们能做的是选择恰当的策略应对不同的情况。

好的指标是能驱动决策的。在上面的分析中我们一直没有使用的一类指标是5、10、20日均价,它们又称为移动平均值,下面我们就使用这项指标来演示一个简单的股票交易策略。(警告:这里仅仅是演示说明,并非投资建议。)

10

11

12

13

14

15

import datetime

# 从yahoo中获取google的股价数据。

#修改索引和列的名称,以适应本文的分析

数据中只有每天的价格和成交量,所以我们需要自己算出5日均价和10日均价,并将均价的折线图(也称移动平均线)与K线图画在一起。

pandas_candlestick_ohlc(goog, ['ma5','ma20'])

观察上图,我们发现5日均线与K线图较为接近,而20日均线则更平坦,可见移动平均线具有抹平短期波动的作用,更能反映长期的走势。比较5日均线和20日均线,特别是关注它们的交叉点,这些是交易的时机。移动平均线策略,最简单的方式就是:当5日均线从下方超越20日均线时,买入股票,当5日均线从上方越到20日均线之下时,卖出股票。

为了找出交易的时机,我们计算5日均价和20日均价的差值,并取其正负号,作于下图。当图中水平线出现跳跃的时候就是交易时机。

goog['ma5-20'] = goog['ma5'] - goog['ma20']

goog['diff'].plot(ylim=(-2,2)).axhline(y=0, color='black', lw=2)

为了更方便观察,上述计算得到的均价差值,再取其相邻日期的差值,得到信号指标。当信号为1时,表示买入股票;当信号为-1时,表示卖出股票;当信号为0时,不进行任何操作。

goog['signal'].plot(ylim=(-2,2))

从上图中看出,从今年初到现在,一共有两轮买进和卖出的时机。到目前为止,似乎一切顺利,那么让我们看下这两轮交易的收益怎么样吧。

"operation": "Buy"}),

"operation": "Sell"})

])

trade

上述表格列出了交易日期、操作和当天的价格。但很遗憾地发现,这两轮交易的卖出价都小于买入价,实际上按上述方法交易我们亏本了!!!

你是否很愤怒呢?原来分析到现在,都是假的呀!我之前就警告过,这里的分析只是演示移动平均线策略的思想,而并非真正的投资建议。股票市场是何其的复杂多变,又如何是一个小小的策略所能战胜的呢?

那么这个策略就一无是处吗?非也!如果考虑更长的时间跨度,比如5年、10年,并考虑更长的均线,比如将20日均线和50日均线比较;虽然过程中也有亏损的时候,但赢的概率更大。也就是说,在更长的时间尺度上该策略也是可行的。但即使你赚了,又能跑赢大盘吗?这时候还需用到其他方法,比如合理配置投资比例等。

THE END
0.如何找到期货K线图的均线?这种均线分析方法有哪些实际应用?在期货交易中,K线图是投资者分析市场走势的重要工具。而均线作为K线图中的一个关键指标,能够帮助投资者识别趋势、判断买卖点。本文将详细介绍如何在期货K线图中找到均线,并探讨这种分析方法的实际应用。 一、如何在期货K线图中找到均线 均线(Moving Average,简称MA)是通过计算一定周期内的平均价格来平滑价格波动的一种jvzquC41o0nfz~s0eqs0h~ywtgy04976/36.394436>:5:<30jznn
1.WT9宽语言量化交易软件使用说明书. 可用于K线图公式/独立算法交易模型; . 常见思路:获取账户信息、盘口高频数据等实现精细化下单; . 函数用法如下,更多使用方法请在软件右上方菜单【量化】->“函数列表”中查看: 注: 1、两种指令可同时用于一个公式中; 2、交易需写入下单委托函数A_SendOrder,信号指令只在图表上显示信号标识,不能下单委托。 (二)模 jvzquC41yy}/ynsjwc4dqv3ep1tfyhlwkfk0oz4xkg}4/:3jvor
2.使用Python画股票的K线图的方法步骤python这篇文章主要介绍了使用Python画股票的K线图的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧导言 本文简单介绍了如何从网易财经获取某支股票的价格数据,并根据价格数据画出相应的日K线图。有助于新手了解并使用Python的相关功能。包括jvzquC41yy}/lk:30pku1jwvkerf1:;638;/j}r
3.通达信千档行情及买卖队列使用图解拾荒网A、分时图、K线图界面十档买卖盘: level2提供十档行情;买一,卖一的明细在买卖队列上进行揭示(显示买一和卖一的前50笔队列)。 买卖队列中委托数量的颜色说明 : 买卖队列中委托数量的基本颜色有两种: 1. 普通委托(图示中以黄色表示) 2. 大单委托(图示中以紫色表示) jvzq<84yyy422qzcpi4dp8qgxgr31;5376ebnu3jvor