精华内容
下载资源
问答
  • 在用python的matplotlib和numpy库绘制股票K线均线的整合效果(含从网络接口爬取数据和验证交易策略代码)一文里,我讲述了通过爬虫接口得到股票数据并绘制出K线均线图形的方式,在本文里,将在此基础上再引入成交量...

         在用python的matplotlib和numpy库绘制股票K线均线的整合效果(含从网络接口爬取数据和验证交易策略代码)一文里,我讲述了通过爬虫接口得到股票数据并绘制出K线均线图形的方式,在本文里,将在此基础上再引入成交量效果图,并结合量价理论,给出并验证一些交易策略。

    1 成交量对量化分析的意义

        美国的股市分析家葛兰碧(Joe Granville)在他所著的《股票市场指标》一书里提出著名的“量价理论”。“量价理论”的核心思想是,任何对股价的分析,如果离开了对成交量的分析,都将是无本之木,无水之源,因为成交量的增加或萎缩都表现出一定的股价趋势。

        成交量是指时间单位内已经成交的股数或总手数。成交量能反应出股市交易中的供求关系,其中道理是比较浅显易懂的,当股票供不应求时,大家争相购买,成交量就很大了,反之当供过于求时,则说明市场交易冷淡,成交量必然萎缩。

        广义的成交量包括成交股数(Volumn或Vol)、成交金额(AMOUNT,时间单位内已经成交的总金额数)和换手率(TUN,股票每天成交量除以股票的流通总股本所得的比率),而狭义则是指成交股数。我们用yahoo接口得到的数据里,有表示成交股数的Volumn列,其中的单位是“手”,一手为100股,在本部分里,我们是通过Volumn列数据绘制股票的成交量信息。

    2 引入成交量

        在K线和均线整合成交量的效果图里,出于美观的考虑,我们对整合的效果提出了如下三点要求。

        第一,绘制上下两个子图,上图放K线和均线,下图放成交量效果。

        第二,上下两个子图共享x轴,也就是说,两者x轴的刻度标签和间隔应该是一样的。

        第三,通过柱状图来绘制成交量图,如果当天股票上涨,成交量图是红色,下跌则是绿色。   

        在如下的drawKMAAndVol.py案例,我们将实现增加成交量图的效果。

    1    #!/usr/bin/env python
    2    #coding=utf-8
    3    import pandas as pd
    4    import matplotlib.pyplot as plt 
    5    from mpl import candlestick_ochl
    6    from matplotlib import MultipleLocator
    7    #根据指定代码和时间范围,获取股票数据
    8    df = pd.read_csv('D:/stockData/ch7/600895.csv',encoding='gbk')
    9    #设置大小,共享x坐标轴
    10    figure,(axPrice, axVol) = plt.subplots(2, sharex=True, figsize=(15,8))
    11    #调用方法,绘制K线图 
    12    candlestick_ochl(ax = axPrice,          opens=df["Open"].values, closes=df["Close"].values,                 highs=df["High"].values, lows=df["Low"].values,
    13                      width=0.75, colorup='red', colordown='green')
    14    axPrice.set_title("600895张江高科K线图和均线图")#设置子图标题
    15    df['Close'].rolling(window=3).plot(ax=axPrice,color="red",label='3天均线')
    16    df['Close'].rolling(window=5).plot(ax=axPrice,color="blue",label='5天均线')
    17    df['Close'].rolling(window=10).plot(ax=axPrice,color="green",label='10天均线')
    18    axPrice.legend(loc='best') #绘制图例
    19    axPrice.set_ylabel("价格(单位:元)")
    20    axPrice.grid(True) #带网格线
    21    #如下绘制成交量子图
    22    #直方图表示成交量,用for循环处理不同的颜色
    23    for index, row in df.iterrows():
    24        if(row['Close'] >= row['Open']):
    25            axVol.bar(row['Date'],row['Volume']/1000000,width = 0.5,color='red')
    26        else:    
    27            axVol.bar(row['Date'],row['Volume']/1000000,width = 0.5,color='green')
    28    axVol.set_ylabel("成交量(单位:亿手)")#设置y轴标题
    29    axVol.set_title("600895张江高科成交量")#设置子图的标题
    30    axVol.set_ylim(0,df['Volume'].max()/100000000*1.2)#设置y轴范围
    31    xmajorLocator = MultipleLocator(5) #将x轴主刻度设置为5的倍数
    32    axVol.xaxis.set_major_locator(xmajorLocator)
    33    axVol.grid(True) #带网格线
    34    #旋转x轴的展示文字角度
    35    for xtick in axVol.get_xticklabels():
    36        xtick.set_rotation(15)
    37    plt.rcParams['font.sans-serif']=['SimHei']
    38    plt.show()

        从第8行到第20行,我们一方面是从csv文件里读取数据,另一方面在第一个子图里绘制了K线和均线图。这部分的代码和之前很相似,不过请大家注意两个点。

        第一,在第10行里,不仅设置了绘图区域的大小,更通过sharex=True语句,设置了axPrice和axVol这两个子图共享x轴。

        第二,第二,在第14、18、19和第20行,由于是在K线图和均线图的axPrice子图里操作,所以若干方法的调用主体是axPrice对象,而不是之前的pyplot.plt对象。

        从第23行到第36行里,我们在axVol子图里绘制了成交量图的效果。请大家注意第23行到第27行的for循环,在其中,我们通过第24行的if语句,比较收盘价和开盘价,以判断当天股票是涨是跌,在此基础上,通过第25行或第27行的bar方法,设置当日成交量图的填充颜色。从上述代码能看出,成交量是在自于csv文件里的Volume列。

        在绘制成交量图的时候有两个细节请大家注意一下。

        第一,在第25行、第27行和第30行里,当我们设置y轴的刻度值和范围时,我们除以了一个相同的数,这是因为在第28行我们设置y轴文字时,指定了y轴成交量的单位是“亿手“。

        第二, 本次是通过第35行和第36行的for循环,设置了“x轴文字旋转”的效果,从代码里我们能看到,本案例中的旋转角度是15度。

        上述代码的运行效果如下图所示,从中大家能看两个x轴刻度一致的子图,且在成交量子图里,上涨日和下跌日的成交量填充色分别是红色和绿色。

    3 成交量与股价的关系

        成交量和股价间也存在着八大规律,通过下图,我们能感受到这些规律,其中纵坐标表示价(即股价),横坐标表示量(即成交量)。

        我们能看出量价之间的八种关系,即量增价平、量增价升、量平价升、量缩价升、量减价平、量缩价跌、量平价跌、量跌价升,随着上述周期过程,股价也完成了一个从涨到跌的完整循环,下面我们来具体解释一下。

        1.量增价平:股价经过持续下跌进入到低位状态,出现了成交量增加但股价平稳的现象,此时不同天的成交量高度落差可能比较明显,这说明该股在底部积聚上涨动力。

        2.量增价升:成交量在低价位区持续上升,同时伴随着股价上涨趋势,这说明股价上升得到了成交量的支撑,后市将继续看好,这是中短线的买入信号。

        3.量平价升:在股价持续上涨的过程中,如果多日的成交量保持等量水平,建议在这一阶段中可以适当增加仓位。

        4.量缩价升:成交量开始减少,但股价依然在上升,此时应该视情况继续持股。但如果还没有买入的投资者就不宜再重仓介入,因为股价已经有了一定的涨幅,价位开始接近上限。

        5.量减价平:股价经长期大幅度上涨后,成交量显著减少,股价也开始横向调整不再上升,这是高位预警的信号。这个阶段里一旦有风吹草动,比如突然拉出大阳线和大阴线,建议应出货离场,做到落袋为安。

       6.量缩价跌:成交量在高位继续减少,股价也开始进入下降通道,这是明确的卖出信号。如果还出现缩量阴跌,这说明股价底部尚远,不会轻易止跌。

        7.量平价跌:成交量停止减少,但股价却出现急速下滑现象,这说明市场并没有形成一致看空的共识。股谚有“多头不死,跌势不止“的说法,出现“量平价跌”的情况,说明主力开始逐渐退出市场,这个阶段里,应继续观望或者出货,别轻易去买入以所谓的“抢反弹”。

        8. 量增价跌:股价经长期大幅下跌之后,有可能出现成交量增加的情况,此时的操作原则是建议卖出,或者空仓观望。如果低价区成交量有增加,则说明有资金在此价位区间接盘,预示后期有望形成底部并出现反弹。但如果出现量增价跌,则建议应清仓出局。

        在下文里,我们将通过Python语言验证量价理论中的两个规则。

    4 验证“量增价平“的买点

        在如下的calBuyPointByVol.py案例中,我们将验证“量增价平“的买点。在这段代码里我们做了三件事,第一是通过yahoo接口得到了指定股票指定范围内的交易数据,第二通过pandas接口保存得到的数据,以便日后验证,第三通过遍历dataframe对象,计算量和价的关系,从而获得买点日期。    

    1    #!/usr/bin/env python
    2    #coding=utf-8
    3    import pandas_datareader
    4    import pandas as pd
    5    import numpy as np
    6    #涨幅是否大于指定比率
    7    def isMoreThanPer(lessVal,highVal,per):
    8        if np.abs(highVal-lessVal)/lessVal>per/100:
    9            return True
    10        else:
    11            return False        
    12    #涨幅是否小于指定比率
    13    def isLessThanPer(lessVal,highVal,per):
    14        if np.abs(highVal-lessVal)/lessVal<per/100:
    15            return True
    16        else:
    17            return False
    18    code='600895.ss'
    19    stock = pandas_datareader.get_data_yahoo(code,'2018-09-01','2018-12-31')
    20    #删除最后一行,因为get_data_yahoo会多取一天数据
    21    stock.drop(stock.index[len(stock)-1],inplace=True)
    22    #保存在本地
    23    stock.to_csv('D:\\stockData\ch7\\60089520181231.csv')
    24    #从文件里得到数据
    25    df = pd.read_csv('D:/stockData/ch7/60089520181231.csv',encoding='gbk')
    26    cnt=0    
    27    while cnt<=len(df)-1:
    28        try:
    29            #规则1,连续三天收盘价变动不超过3%
    30            if isLessThanPer(df.iloc[cnt]['Close'],df.iloc[cnt+1]['Close'],3) and isLessThanPer(df.iloc[cnt]['close'],df.iloc[cnt+2]['Close'],3) :
    31                #规则2,连续三天成交量涨幅超过75%
    32                if isMoreThanPer(df.iloc[cnt]['Volume'],df.iloc[cnt+1]['volume'],75) and isMoreThanPer(df.iloc[cnt]['Volume'],df.iloc[cnt+2]['Volume'],75) :
    33                    print("Buy Point on:" + df.iloc[cnt]['Date'])
    34        except: 
    35            pass                
    36        cnt=cnt+1

        在第7行定义的isMoreThanPer方法里,我们比较了高价和低价,以判断是否超过由参数per指定的涨幅。在第13行的isLessThanPer方法里,我们判断了跌幅是否超过per指定的范围。由于这两个功能经常会用到,所以我们把它们封装成函数。

        从第18行到第25行,我们完成了获取并保存数据的动作,并用df对象保存了待遍历的股票数据(即张江高科2018-09-01到2018-12-31的数据)。

        在第27行到第36行按日期遍历股票数据时,我们制定了如下规则,连续三天股票的收盘价变动范围不超过5%(即价平)且3天成交量的涨幅过75%(即量增),把满足条件的日期打印出来。运行后,我们能看到11月2日这个买点。

        在之前代码基础上改写下,把时间范围改成2018-09-01到2018-12-31,再运行下,能看到如下图所示的效果。    

        从中我们能看到验证后的结果:在11月2日之后,股票的涨幅比较明显,确实是个合适的买点,从中我们能看出 “量增价平”的指导意义。

    5 验证“量减价平“的卖点

        在如下calSellPointByVol.py案例中,我们同样是分析张江高科2018-09-01到2018-12-31的交易数据,本次我们制定的策略是,第一,还是连续三天股票的收盘价变动范围不超过5%(即价平),第二,较第一日相比,第二日和第三日的成交量下降幅度超过75%(即量减)。    

    1    #!/usr/bin/env python
    2    #coding=utf-8
    3    import pandas_datareader
    4    import pandas as pd
    5    import numpy as np
    6    #涨幅是否大于指定比率
    7    def isMoreThanPer(lessVal,highVal,per):
    8        if np.abs(highVal-lessVal)/lessVal>per/100:
    9            return True
    10        else:
    11            return False        
    12    #涨幅是否小于指定比率
    13    def isLessThanPer(lessVal,highVal,per):
    14        if np.abs(highVal-lessVal)/lessVal<per/100:
    15            return True
    16        else:
    17            return False
    18    #本次直接从文件里得到数据
    19    df = pd.read_csv('D:/stockData/ch7/60089520181231.csv',encoding='gbk')
    20    cnt=0    
    21    while cnt<=len(df)-1:
    22        try:
    23            #规则1,连续三天收盘价变动不超过3%
    24            if isLessThanPer(df.iloc[cnt]['Close'],df.iloc[cnt+1]['Close'],3) and isLessThanPer(df.iloc[cnt]['Close'],df.iloc[cnt+2]['close'],3) :
    25                #规则2,连续三天成交量跌幅超过75%
    26                if isMoreThanPer(df.iloc[cnt+1]['Volume'],df.iloc[cnt]['Volume'],75) and isMoreThanPer(df.iloc[cnt+2]['Volume'],df.loc[cnt]['Volume'],75) :
    27                    print("Sell Point on:" + df.iloc[cnt]['Date'])
    28        except: 
    29            pass                
    30        cnt=cnt+1

        上述代码和之前calBuyPointByVol.py案例很相似,只不过我们适当变更了第26行判断“成交量”的if条件。上述代码运行后,我们能得到的卖点是2018-12-05,从上图里我们能看出,在这段时间之后的若干交易日里,张江高科的股价确实有下跌现象。

    6 求推荐,后文预告与版权说明

        在本系列的后面文章中,将陆续通过python绘制成交量、KDJ、MACD、RSI,BIAS和OBV等指标,而且还会用Python编写针对这些指标的交易策略,敬请关注。

        本文用了我将近2个小时,如果大家感觉好,请帮忙推荐下。

        关于转载有如下的说明。

        1 本文文字和代码均属原创,可转载,但谢绝用于商业用户。

        2 转载时请用链接的方式,给出原文出处,同时写明原作者是hsm_computer。

        3 在转载时,请原文转载 ,如要在转载修改本文,请事先告知,谢绝在转载时通过修改本文达到有利于转载者的目的。

    展开全文
  • 在用python的matplotlib和numpy库绘制股票K线均线的整合效果(含从网络接口爬取数据和验证交易策略代码)一文里,我讲述了通过爬虫接口得到股票数据并绘制出K线均线图形的方式,在本文里,将在此基础上再引入成交量...

         在用python的matplotlib和numpy库绘制股票K线均线的整合效果(含从网络接口爬取数据和验证交易策略代码)一文里,我讲述了通过爬虫接口得到股票数据并绘制出K线均线图形的方式,在本文里,将在此基础上再引入成交量效果图,并结合量价理论,给出并验证一些交易策略。

    1 成交量对量化分析的意义

        美国的股市分析家葛兰碧(Joe Granville)在他所著的《股票市场指标》一书里提出著名的“量价理论”。“量价理论”的核心思想是,任何对股价的分析,如果离开了对成交量的分析,都将是无本之木,无水之源,因为成交量的增加或萎缩都表现出一定的股价趋势。

        成交量是指时间单位内已经成交的股数或总手数。成交量能反应出股市交易中的供求关系,其中道理是比较浅显易懂的,当股票供不应求时,大家争相购买,成交量就很大了,反之当供过于求时,则说明市场交易冷淡,成交量必然萎缩。

        广义的成交量包括成交股数(Volumn或Vol)、成交金额(AMOUNT,时间单位内已经成交的总金额数)和换手率(TUN,股票每天成交量除以股票的流通总股本所得的比率),而狭义则是指成交股数。我们用yahoo接口得到的数据里,有表示成交股数的Volumn列,其中的单位是“手”,一手为100股,在本部分里,我们是通过Volumn列数据绘制股票的成交量信息。

    2 引入成交量

        在K线和均线整合成交量的效果图里,出于美观的考虑,我们对整合的效果提出了如下三点要求。

        第一,绘制上下两个子图,上图放K线和均线,下图放成交量效果。

        第二,上下两个子图共享x轴,也就是说,两者x轴的刻度标签和间隔应该是一样的。

        第三,通过柱状图来绘制成交量图,如果当天股票上涨,成交量图是红色,下跌则是绿色。   

        在如下的drawKMAAndVol.py案例,我们将实现增加成交量图的效果。

    1    #!/usr/bin/env python
    2    #coding=utf-8
    3    import pandas as pd
    4    import matplotlib.pyplot as plt 
    5    from mpl import candlestick_ochl
    6    from matplotlib import MultipleLocator
    7    #根据指定代码和时间范围,获取股票数据
    8    df = pd.read_csv('D:/stockData/ch7/600895.csv',encoding='gbk')
    9    #设置大小,共享x坐标轴
    10    figure,(axPrice, axVol) = plt.subplots(2, sharex=True, figsize=(15,8))
    11    #调用方法,绘制K线图 
    12    candlestick_ochl(ax = axPrice,          opens=df["Open"].values, closes=df["Close"].values,                 highs=df["High"].values, lows=df["Low"].values,
    13                      width=0.75, colorup='red', colordown='green')
    14    axPrice.set_title("600895张江高科K线图和均线图")#设置子图标题
    15    df['Close'].rolling(window=3).plot(ax=axPrice,color="red",label='3天均线')
    16    df['Close'].rolling(window=5).plot(ax=axPrice,color="blue",label='5天均线')
    17    df['Close'].rolling(window=10).plot(ax=axPrice,color="green",label='10天均线')
    18    axPrice.legend(loc='best') #绘制图例
    19    axPrice.set_ylabel("价格(单位:元)")
    20    axPrice.grid(True) #带网格线
    21    #如下绘制成交量子图
    22    #直方图表示成交量,用for循环处理不同的颜色
    23    for index, row in df.iterrows():
    24        if(row['Close'] >= row['Open']):
    25            axVol.bar(row['Date'],row['Volume']/1000000,width = 0.5,color='red')
    26        else:    
    27            axVol.bar(row['Date'],row['Volume']/1000000,width = 0.5,color='green')
    28    axVol.set_ylabel("成交量(单位:亿手)")#设置y轴标题
    29    axVol.set_title("600895张江高科成交量")#设置子图的标题
    30    axVol.set_ylim(0,df['Volume'].max()/100000000*1.2)#设置y轴范围
    31    xmajorLocator = MultipleLocator(5) #将x轴主刻度设置为5的倍数
    32    axVol.xaxis.set_major_locator(xmajorLocator)
    33    axVol.grid(True) #带网格线
    34    #旋转x轴的展示文字角度
    35    for xtick in axVol.get_xticklabels():
    36        xtick.set_rotation(15)
    37    plt.rcParams['font.sans-serif']=['SimHei']
    38    plt.show()

        从第8行到第20行,我们一方面是从csv文件里读取数据,另一方面在第一个子图里绘制了K线和均线图。这部分的代码和之前很相似,不过请大家注意两个点。

        第一,在第10行里,不仅设置了绘图区域的大小,更通过sharex=True语句,设置了axPrice和axVol这两个子图共享x轴。

        第二,第二,在第14、18、19和第20行,由于是在K线图和均线图的axPrice子图里操作,所以若干方法的调用主体是axPrice对象,而不是之前的pyplot.plt对象。

        从第23行到第36行里,我们在axVol子图里绘制了成交量图的效果。请大家注意第23行到第27行的for循环,在其中,我们通过第24行的if语句,比较收盘价和开盘价,以判断当天股票是涨是跌,在此基础上,通过第25行或第27行的bar方法,设置当日成交量图的填充颜色。从上述代码能看出,成交量是在自于csv文件里的Volume列。

        在绘制成交量图的时候有两个细节请大家注意一下。

        第一,在第25行、第27行和第30行里,当我们设置y轴的刻度值和范围时,我们除以了一个相同的数,这是因为在第28行我们设置y轴文字时,指定了y轴成交量的单位是“亿手“。

        第二, 本次是通过第35行和第36行的for循环,设置了“x轴文字旋转”的效果,从代码里我们能看到,本案例中的旋转角度是15度。

        上述代码的运行效果如下图所示,从中大家能看两个x轴刻度一致的子图,且在成交量子图里,上涨日和下跌日的成交量填充色分别是红色和绿色。

    3 成交量与股价的关系

        成交量和股价间也存在着八大规律,通过下图,我们能感受到这些规律,其中纵坐标表示价(即股价),横坐标表示量(即成交量)。

        我们能看出量价之间的八种关系,即量增价平、量增价升、量平价升、量缩价升、量减价平、量缩价跌、量平价跌、量跌价升,随着上述周期过程,股价也完成了一个从涨到跌的完整循环,下面我们来具体解释一下。

        1.量增价平:股价经过持续下跌进入到低位状态,出现了成交量增加但股价平稳的现象,此时不同天的成交量高度落差可能比较明显,这说明该股在底部积聚上涨动力。

        2.量增价升:成交量在低价位区持续上升,同时伴随着股价上涨趋势,这说明股价上升得到了成交量的支撑,后市将继续看好,这是中短线的买入信号。

        3.量平价升:在股价持续上涨的过程中,如果多日的成交量保持等量水平,建议在这一阶段中可以适当增加仓位。

        4.量缩价升:成交量开始减少,但股价依然在上升,此时应该视情况继续持股。但如果还没有买入的投资者就不宜再重仓介入,因为股价已经有了一定的涨幅,价位开始接近上限。

        5.量减价平:股价经长期大幅度上涨后,成交量显著减少,股价也开始横向调整不再上升,这是高位预警的信号。这个阶段里一旦有风吹草动,比如突然拉出大阳线和大阴线,建议应出货离场,做到落袋为安。

       6.量缩价跌:成交量在高位继续减少,股价也开始进入下降通道,这是明确的卖出信号。如果还出现缩量阴跌,这说明股价底部尚远,不会轻易止跌。

        7.量平价跌:成交量停止减少,但股价却出现急速下滑现象,这说明市场并没有形成一致看空的共识。股谚有“多头不死,跌势不止“的说法,出现“量平价跌”的情况,说明主力开始逐渐退出市场,这个阶段里,应继续观望或者出货,别轻易去买入以所谓的“抢反弹”。

        8. 量增价跌:股价经长期大幅下跌之后,有可能出现成交量增加的情况,此时的操作原则是建议卖出,或者空仓观望。如果低价区成交量有增加,则说明有资金在此价位区间接盘,预示后期有望形成底部并出现反弹。但如果出现量增价跌,则建议应清仓出局。

        在下文里,我们将通过Python语言验证量价理论中的两个规则。

    4 验证“量增价平“的买点

        在如下的calBuyPointByVol.py案例中,我们将验证“量增价平“的买点。在这段代码里我们做了三件事,第一是通过yahoo接口得到了指定股票指定范围内的交易数据,第二通过pandas接口保存得到的数据,以便日后验证,第三通过遍历dataframe对象,计算量和价的关系,从而获得买点日期。    

    1    #!/usr/bin/env python
    2    #coding=utf-8
    3    import pandas_datareader
    4    import pandas as pd
    5    import numpy as np
    6    #涨幅是否大于指定比率
    7    def isMoreThanPer(lessVal,highVal,per):
    8        if np.abs(highVal-lessVal)/lessVal>per/100:
    9            return True
    10        else:
    11            return False        
    12    #涨幅是否小于指定比率
    13    def isLessThanPer(lessVal,highVal,per):
    14        if np.abs(highVal-lessVal)/lessVal<per/100:
    15            return True
    16        else:
    17            return False
    18    code='600895.ss'
    19    stock = pandas_datareader.get_data_yahoo(code,'2018-09-01','2018-12-31')
    20    #删除最后一行,因为get_data_yahoo会多取一天数据
    21    stock.drop(stock.index[len(stock)-1],inplace=True)
    22    #保存在本地
    23    stock.to_csv('D:\\stockData\ch7\\60089520181231.csv')
    24    #从文件里得到数据
    25    df = pd.read_csv('D:/stockData/ch7/60089520181231.csv',encoding='gbk')
    26    cnt=0    
    27    while cnt<=len(df)-1:
    28        try:
    29            #规则1,连续三天收盘价变动不超过3%
    30            if isLessThanPer(df.iloc[cnt]['Close'],df.iloc[cnt+1]['Close'],3) and isLessThanPer(df.iloc[cnt]['close'],df.iloc[cnt+2]['Close'],3) :
    31                #规则2,连续三天成交量涨幅超过75%
    32                if isMoreThanPer(df.iloc[cnt]['Volume'],df.iloc[cnt+1]['volume'],75) and isMoreThanPer(df.iloc[cnt]['Volume'],df.iloc[cnt+2]['Volume'],75) :
    33                    print("Buy Point on:" + df.iloc[cnt]['Date'])
    34        except: 
    35            pass                
    36        cnt=cnt+1

        在第7行定义的isMoreThanPer方法里,我们比较了高价和低价,以判断是否超过由参数per指定的涨幅。在第13行的isLessThanPer方法里,我们判断了跌幅是否超过per指定的范围。由于这两个功能经常会用到,所以我们把它们封装成函数。

        从第18行到第25行,我们完成了获取并保存数据的动作,并用df对象保存了待遍历的股票数据(即张江高科2018-09-01到2018-12-31的数据)。

        在第27行到第36行按日期遍历股票数据时,我们制定了如下规则,连续三天股票的收盘价变动范围不超过5%(即价平)且3天成交量的涨幅过75%(即量增),把满足条件的日期打印出来。运行后,我们能看到11月2日这个买点。

        在之前代码基础上改写下,把时间范围改成2018-09-01到2018-12-31,再运行下,能看到如下图所示的效果。    

        从中我们能看到验证后的结果:在11月2日之后,股票的涨幅比较明显,确实是个合适的买点,从中我们能看出 “量增价平”的指导意义。

    5 验证“量减价平“的卖点

        在如下calSellPointByVol.py案例中,我们同样是分析张江高科2018-09-01到2018-12-31的交易数据,本次我们制定的策略是,第一,还是连续三天股票的收盘价变动范围不超过5%(即价平),第二,较第一日相比,第二日和第三日的成交量下降幅度超过75%(即量减)。    

    1    #!/usr/bin/env python
    2    #coding=utf-8
    3    import pandas_datareader
    4    import pandas as pd
    5    import numpy as np
    6    #涨幅是否大于指定比率
    7    def isMoreThanPer(lessVal,highVal,per):
    8        if np.abs(highVal-lessVal)/lessVal>per/100:
    9            return True
    10        else:
    11            return False        
    12    #涨幅是否小于指定比率
    13    def isLessThanPer(lessVal,highVal,per):
    14        if np.abs(highVal-lessVal)/lessVal<per/100:
    15            return True
    16        else:
    17            return False
    18    #本次直接从文件里得到数据
    19    df = pd.read_csv('D:/stockData/ch7/60089520181231.csv',encoding='gbk')
    20    cnt=0    
    21    while cnt<=len(df)-1:
    22        try:
    23            #规则1,连续三天收盘价变动不超过3%
    24            if isLessThanPer(df.iloc[cnt]['Close'],df.iloc[cnt+1]['Close'],3) and isLessThanPer(df.iloc[cnt]['Close'],df.iloc[cnt+2]['close'],3) :
    25                #规则2,连续三天成交量跌幅超过75%
    26                if isMoreThanPer(df.iloc[cnt+1]['Volume'],df.iloc[cnt]['Volume'],75) and isMoreThanPer(df.iloc[cnt+2]['Volume'],df.loc[cnt]['Volume'],75) :
    27                    print("Sell Point on:" + df.iloc[cnt]['Date'])
    28        except: 
    29            pass                
    30        cnt=cnt+1

        上述代码和之前calBuyPointByVol.py案例很相似,只不过我们适当变更了第26行判断“成交量”的if条件。上述代码运行后,我们能得到的卖点是2018-12-05,从上图里我们能看出,在这段时间之后的若干交易日里,张江高科的股价确实有下跌现象。

    6 求推荐,后文预告与版权说明

        在本系列的后面文章中,将陆续通过python绘制成交量、KDJ、MACD、RSI,BIAS和OBV等指标,而且还会用Python编写针对这些指标的交易策略,敬请关注。

        本文用了我将近2个小时,如果大家感觉好,请帮忙推荐下。

        关于转载有如下的说明。

        1 本文文字和代码均属原创,可转载,但谢绝用于商业用户。

        2 转载时请用链接的方式,给出原文出处,同时写明原作者是hsm_computer。

        3 在转载时,请原文转载 ,如要在转载修改本文,请事先告知,谢绝在转载时通过修改本文达到有利于转载者的目的。

    转载于:https://www.cnblogs.com/JavaArchitect/p/11162005.html

    展开全文
  • 通达信源代码

    2018-10-23 10:11:42
    通达信行情delphi,c++源代码 增加对股指期货数据的支持 Get_Futures_KDays() 获取股指期货日K线图 Get_Furures_Deals() 获取股指期货分笔交易 Get_Futures_Mins() 实时成交 Get_TestRealFutures() 实时盘口,...
  • Android代码-ikvStockChart

    2019-08-07 12:14:19
    支持在 XML 布局文件和代码中设置各个线条颜色、大小配置 支持左滑、右滑加载 支持长按高亮、短按点击、双指缩放事件 支持 fling 滑动 支持 MACD、RSI、KDJ、BOLL 四个指标 支持自定义的指标显示方式 > 附带的程序...
  • 股票交易中使用连续竞价的方式对买卖双方进行撮合成交,根据 1、价格优先:买单的话,价格高的排在价格低的前面;卖单的话,价格低的排在前面。 2、时间优先:同一价格的挂单,按照时间顺序排队 原则进行交易,[连续...
  • 金融大数据课程代码,加百力出品 《基础篇》10节课目录及内容介绍: 01、课程介绍 介绍课程的意义、基本结构、课程讲述方法 02、R基础知识 介绍:变量赋值、分支结构、循环结构、函数使用、获取帮助等知识 03、R常用...
  • 5.3.1 添加配送方式:每一个配送方式都是针对一个物流公司并且结合物流公司的到达地区和收费标准设置的 支持为网店添加多种配送方式 支持不同的地区设置不同的起重和续重价格 支持配送方式与支付方式的关联: ...
  • (求大佬赐代码)【已解决,实际是连续的,设置下线宽就看出来了。其他两个问题继续求解~】 3 如何对成交量的部分作一个区分?如内盘对应的成交量柱形显示为绿色,外盘对应的成交量柱形显示为红色。 第一次...
  • 辛辛苦苦经营的店,成交量都上去了,一下子就被举报处罚了,又要重新来过的心情相信大家都是明白的。或者 我们宝贝 已经是热销,排在前面,也许我们辛辛苦苦打造的爆款,被同行恶意举报下架,我们遭受的损失...
  • 2007年被CBS Interactive以2.8亿美元价格收购,是目前欧洲Web 2.0网站中成交价最高的纪录。 Last.fm使用的音乐推荐方式称为“Audioscrobbler”。该系统提供安装在使用者的电脑播放程式或随身听装置的插件,记录...
  • 5.3.1 添加配送方式:每一个配送方式都是针对一个物流公司并且结合物流公司的到达地区和收费标准设置的 支持为网店添加多种配送方式 支持不同的地区设置不同的起重和续重价格 支持配送方式与支付方式的关联: ...
  • 交易以拍卖的方式完成。其完整功能如下所示: (1)用户注册。 (2)用户登陆注销。 (3)浏览正在拍卖的商品。 (4)查看商品出价记录。 (5)普通用户登陆后可以: ①添加自己要拍卖的商品。 ②对正在拍卖的商品进行竞价。 ③...
  • 适当的友情链接可以提高商城的浏览量,从而提高商品的成交率。 19、商城信息模块 包括商城的简介、付款方式、版权声明、版权信息、联系方式等。 二、商城会员后台功能 1、购物信息模块 可以查看用户的类型,...
  • 2、txt方式接入股票代码,xml高速输出。接入方便,操作简单。 3、行情来源,不便透露太多,保证速度。不限量的查询方式。主要的电脑够带宽与性能足,全推数据不是问题。  4、本系统可以安装在内存上运行,安装...
    API亮点:
    1、本API拥有20条高速服务器线路并发获取行情
    2、txt方式接入股票代码,xml高速输出。接入方便,操作简单。
    3、行情来源,不便透露太多,保证速度。不限量的查询方式。主要的电脑够带宽与性能足,全推数据不是问题。 
    4、本系统可以安装在内存上运行,安装方法请加扣扣:捌 贰 柒 柒 零 柒 柒 柒     或搜索:股神论坛


    本API适用范围:

    webServer、手机行情开发、自动交易系统、模拟抄股系统,行情应用软件、行情数据分析、逐笔成交实时数据导出、高速行情预警、等等都能实现!


    图片说明:


    展开全文
  • 在这些文章里,将用Python工具绘制各种股票指标,在讲述各股票指标的含义以及计算方式的同时,验证基于各种指标的交易策略,本文是第一篇,通过K线和均线案例讲述Numpy,Maplotlib等相关库的用法,并且还用代码案例...

        本人最近在尝试着发表“以股票案例入门Python编程语言”系列的文章,在这些文章里,将用Python工具绘制各种股票指标,在讲述各股票指标的含义以及计算方式的同时,验证基于各种指标的交易策略,本文是第一篇,通过K线和均线案例讲述Numpy,Maplotlib等相关库的用法,并且还用代码案例来验证买卖的交易策略。在本系列的后面文章中,将陆续通过python绘制成交量、KDJ、MACD、RSI和OBV等指标,而且还会用Python编写针对这些指标的交易策略,敬请关注。

    1 K线整合均线的案例

        均线也叫移动平均线(Moving Average,简称MA),是指某段时间内的平均股价(或指数)连成的曲线,通过它我们能清晰地看到股价的历史波动,从而能进一步预测未来价格的发展趋势。

        均线一般分短期、中期和长期这三类。

        1 通常把5天和10天移动平均线称为短期均线,一般供短线投资者参照。

        2一般把20天、30天和60天移动平均线作为中期均线,一般供中线投资者参考。

        3 一般120天和250天(甚至更长)移动平均线称为长期均线,一般供长线投资者参考。

        不过在实践中,我们一般需要综合地观察短期中期和长期均线,从中能分析出市场的多空趋势。比如,如果某股价格的三类均线均上涨,且短期中期长期均线是从上到下排列,则说明该股价格趋势向上;反之如果并列下跌,且长期中期短期均线从上到下排列,则说明股价趋势向下。

        讲完概念了,我们通过rolling方法绘制均线。    

    1	#!/usr/bin/env python
    2	#coding=utf-8
    3	import pandas as pd
    4	import matplotlib.pyplot as plt 
    5	from mpl_finance import candlestick_ochl  
    6	#从文件里得到数据
    7	df = pd.read_csv('D:/stockData/ch6/600895.csv',encoding='gbk')
    8	#设置图的位置
    9	fig = plt.figure()
    10	ax = fig.subplot(111)
    11	#调用方法,绘制K线图 
    12	candlestick_ochl(opens=df["Open"].values, closes=df["Close"].values, highs=df["High"].values, lows=df["Low"].values,width=0.75, colorup='red', colordown='green')
    13	df['Close'].rolling(window=3).mean().plot(color="red",label='3天均线')
    14	df['Close'].rolling(window=5).mean().plot(color="blue",label='5天均线')
    15	df['Close'].rolling(window=10).mean().plot(color="green",label='10天均线')
    16	plt.legend(loc='best') #绘制图例
    17	#设置x轴的标签 
    18	plt.xticks(range(len(df.index.values)),df.index.values,rotation=30 ) 
    19	ax.grid(True) #带网格线
    20	plt.title("600895张江高科的K线图")
    21	plt.show()
    

        从第13行到第15行里,通过rolling方法,根据每天的收盘价,计算了3天、5天和10天均线,并为每种均线设置了图例,在第16行里,通过legend方法设置了图例的位置。上述代码的运行效果如下图所示,从中我们不仅能看到这段时间内的K线图,还能看到3根均线。    

        

    2 K线整合均线的改进版案例

        在本例中,我们将做如下两点改进,其中请大家着重观察操作坐标轴的ax对象。  

        第一,为了更灵活地得到股市数据,这里是根据开始时间和结束时间,先是调用get_data_yahoo接口,从yahoo的接口里获取股票数据,同时为了留一份数据,所以会把从接口爬取到的数据保存到本地csv文件,做完之后再绘制图形。

        第二,在之前的案例中,x轴的刻度是每个交易日的日期,但如果显示的时间范围过长,那么时间刻度就会太密集,影响美观效果,所以这里将只显示主刻度。改进后的代码如下所示。

    1	#!/usr/bin/env python
    2	#coding=utf-8
    3	import pandas_datareader
    4	import pandas as pd
    5	import matplotlib.pyplot as plt 
    6	from mpl_finance import candlestick2_ochl
    7	from matplotlib.ticker import MultipleLocator 
    8	#根据指定代码和时间范围,获取股票数据
    9	code='600895.ss'
    10	stock = pandas_datareader.get_data_yahoo(code,'2019-01-01','2019-03-31')
    11	#删除最后一行,因为get_data_yahoo会多取一天数据
    12	stock.drop(stock.index[len(stock)-1],inplace=True)
    13	#保存在本地
    14	stock.to_csv('D:\\stockData\ch7\\600895.csv')
    15	df = pd.read_csv('D:/stockData/ch7/600895.csv',encoding='gbk',index_col=0)
    16	#设置窗口大小
    17	fig, ax = plt.subplots(figsize=(10, 8))
    18	xmajorLocator   = MultipleLocator(5) #将x轴主刻度设置为5的倍数
    19	ax.xaxis.set_major_locator(xmajorLocator)
    20	#调用方法,绘制K线图 
    21	candlestick2_ochl(ax = ax, 
    22	opens=df["Open"].values,closes=df["Close"].values, highs=df["High"].values, lows=df["Low"].values,width=0.75, colorup='red', colordown='green')
    23	#如下是绘制3种均线
    24	df['Close'].rolling(window=3).mean().plot(color="red",label='3天均线')
    25	df['Close'].rolling(window=5).mean().plot(color="blue",label='5天均线')
    26	df['Close'].rolling(window=10).mean().plot(color="green",label='10天均线')
    27	plt.legend(loc='best') #绘制图例
    28	ax.grid(True) #带网格线
    29	plt.title("600895张江高科的K线图")
    30	plt.rcParams['font.sans-serif']=['SimHei']
    31	plt.setp(plt.gca().get_xticklabels(), rotation=30) 
    32	plt.show()
    

        相比之前代码,这段代码有四个改进点。

        第一,从第9行到第14行里,我们通过第五章分析过的get_data_yahoo方法,传入股票代码、开始和结束时间这三个参数,从yahoo接口里获得股票交易的数据。

        请注意该方法返回的数据会比传入的结束时间多一天,比如我们传入的结束时间是2019-03-31,但它会返回后一天(即2019-04-01)的数据,所以得通过第12行的drop方法,删除stock对象(该对象类型是dataframe)最后一行的数据。删除的时候是通过stock.index[len(stock)-1]指定删除长度减1的索引值,因为索引值是从0开始,而且需要指定inplace=True,否则的话,删除的结果无法更新到stock这个dataframe里。

        第二,在第17行里,通过figsize方法设置了窗口的大小尺寸。

        第三,通过第18行和第19行的代码,设置了主刻度是5的倍数。之所以设置成5的倍数,是因为一般一周的交易日是5天。但这里不能简单地把主刻度设置成每周一,因为某些周一有可能是股市休市的法定假日。

        第四,由于无需在x轴上设置每天的日期,所以这里无需再调用plt.xticks方法,但是得调用如第31行所示的代码,设置x轴刻度的旋转角度,否则x轴展示的时间依然有可能会重叠。

        这段代码的运行效果如下图所示,从中大家能看到改进后的效果,而且,由于本次展示的股票时间段变长了(是3个月),所以相比drawKAndMA.py案例,均线的效果更为明显,尤其是三日均线,更是几乎贯穿于整个交易日范围。

        

    3 葛兰碧均线八大买卖法则

       在均线实践理论中,投资专家葛兰碧创造的八项买卖法则可谓经典,具体的细节如下图所示。

        

        1 移动平均线从下降逐渐转为平水平,且有超上方抬头迹象,而股价从均线下方突破时,为买进信号,如上图中的A点。

        2 股价于移动平均线之上运行时下跌,但未跌破均线,此时股价再次上扬,此时为买入信号,如图中的C点。

        3 股价位于均线上运行,下跌时破均线,但均线呈上升趋势,不久股价回到均线之上时,为买进信号,如图中的B点。

        4 股价在均线下方运行时大跌,远离均线时向均线靠近,此时为买进时机,如图中的D点。

        5 均线的上升趋势逐渐变平,且有向下迹象,而股价从均线上方向下穿均线,为卖出信号,如图中的E点。

        6 股价向上穿过均线,不过均线依然保持下跌趋势,此后股价又下跌回均线下方,为卖出信号,如图中的F点。

        7 股价运行在均线下方,出现上涨,但未过均线就再次下跌,此为卖出点,如图中的G点。

        8 股价在均线的上方运行,连续上涨且继续远离均线,这种趋势说明随时会出现获利回吐的卖盘打压,此时是卖出的时机,如前图中的H点。

    4 通过DataFrame对象验证均线的买点策略

        根据上述八大买卖原则,我们在张江高科2019年1月到3月的交易数据内,用pandas库里的dataframe等对象,根据5日均线计算参考买点,代码如下所示。    

    1	#!/usr/bin/env python
    2	#coding=utf-8
    3	import pandas as pd
    4	#从文件里得到数据
    5	df = pd.read_csv('D:/stockData/ch7/600895.csv',encoding='gbk')
    6	maIntervalList = [3,5,10]
    7	#虽然在后文里只用到了5日均线,但这里演示设置3种均线
    8	for maInterval in maIntervalList:
    9	    df['MA_' + str(maInterval)] = df['Close'].rolling(window=maInterval).mean()
    10	cnt=0    
    11	while cnt<=len(df)-1:
    12	    try:
    13	        #规则1,收盘价连续三天上扬
    14	        if df.iloc[cnt]['Close']<df.iloc[cnt+1]['Close'] and df.iloc[cnt+1]['Close']<df.iloc[cnt+2]['Close']:
    15	            #规则2,5日均线连续三天上扬
    16	            if df.iloc[cnt]['MA_5']<df.iloc[cnt+1]['MA_5'] and df.iloc[cnt+1]['MA_5']<df.iloc[cnt+2]['MA_5']:
    17	                #规则3,第3天,收盘价上穿5日均线
    18	                if df.iloc[cnt+1]['MA_5']>df.iloc[cnt]['Close'] and df.iloc[cnt+2]['MA_5']<df.iloc[cnt+1]['Close']:     
    19	                    print("Buy Point on:" + df.iloc[cnt]['Date'])
    20	    except: #有几天是没5日均线的,所以用except处理异常
    21	        pass:                
    22	    cnt=cnt+1
    

        虽然在计算参考买点时,只用到了5日均价,但在第8行和第9行的for循环里,我们通过rolling方法,还是计算了3日、5日和10日的均价,并把计算后的结果记录到当前行的MA_3、MA_5和MA_10这三列中,这样做的目的是为了演示动态创建列的做法。

        在第11行到第22行的while循环里,我们依次遍历了每天的交易数据,并在第14行,第16行和第18行里,通过三个if语句,设置了3个规则。由于在前几天是没有5日均价了,且在遍历最后2天交易数据时,在执行诸如df.iloc[cnt+2]['Close']的语句中会出现索引越界,所以在while循环里我们用到了try…except异常处理语句。

        运行上述代码,我们能看到的结果是:Buy Point on:2019-03-08,结合上图,我们能看到3月8日之后的交易日里,股价有一定程度的上涨,所以能证实基于均线的“买”原则,但影响股价的因素太多,大家应全面分析,切勿在实战中只用这原则来买卖股票。

    5 通过DataFrame验证均线的卖点策略

        同样地,根据5日均线计算参考买点,在如下案例中,我们计算了张江高科2019年1月到3月内的卖点。    

    1	#!/usr/bin/env python
    2	#coding=utf-8
    3	import pandas as pd
    4	#从文件里得到数据
    5	df = pd.read_csv('D:/stockData/ch7/600895.csv',encoding='gbk')
    6	maIntervalList = [3,5,10]
    7	#虽然在后文里只用到了5日均线,但这里演示设置3种均线
    8	for maInterval in maIntervalList:
    9	    df['MA_' + str(maInterval)] = df['Close'].rolling(window=maInterval).mean()
    10	cnt=0    
    11	while cnt<=len(df)-1:
    12	    try:
    13	        #规则1,收盘价连续三天下跌
    14	        if df.iloc[cnt]['Close']>df.iloc[cnt+1]['Close'] and df.iloc[cnt+1]['Close']>df.iloc[cnt+2]['Close']:
    15	            #规则2,5日均线连续三天下跌
    16	            if df.iloc[cnt]['MA_5']>df.iloc[cnt+1]['MA_5'] and df.iloc[cnt+1]['MA_5']>df.iloc[cnt+2]['MA_5']:
    17	                #规则3,第3天,收盘价下穿5日均线
    18	                if df.iloc[cnt+1]['MA_5']<df.iloc[cnt]['Close'] and df.iloc[cnt+2]['MA_5']>df.iloc[cnt+1]['Close']:     
    19	                    print("Sell Point on:" + df.iloc[cnt]['Date'])
    20	    except: #有几天是没5日均线的,所以用except处理异常
    21	        pass                
    22	    cnt=cnt+1
    

        运行后,我们能得到两个卖点:2019-01-23和2019-01-23,这同样能在上图描述的K线图里得到验证。

    6 求推荐,后文预告与版权说明

        在本系列的后面文章中,将陆续通过python绘制成交量、KDJ、MACD、RSI和OBV等指标,而且还会用Python编写针对这些指标的交易策略,敬请关注。

        本文用了我将近3个小时,如果大家感觉好,请帮忙推荐下。

        关于转载有如下的说明。

        1 本文文字和代码均属原创,可转载,但谢绝用于商业用户。

        2 转载时请用链接的方式,给出原文出处,同时写明原作者是hsm_computer。

        3 在转载时,请原文转载 ,如要在转载修改本文,请事先告知,谢绝在转载时通过修改本文达到有利于转载者的目的。

        

    转载于:https://www.cnblogs.com/JavaArchitect/p/11014215.html

    展开全文
  • 用Python读取CSV文件的5种方式

    万次阅读 2020-08-17 13:39:10
    有股票代码,价格,日期,时间,价格变动和成交量。这个数据集其实就是一个表格数据,有自己的头部和身体。 第一招:简单的读取 我们先来看一种简单读取方法,先用csv.reader()函数读取文件的句柄f生成一个csv的句柄...
  • 逗猫 Funcat将同花顺,通达信,文华财经等的指标公式移植到了Python中。 Funcat适合做股票,期货,合约,加密数字货币的量化分析与量化交易。 原作者\垂直tushare接口已经不再维护,牛市以来,为...成交量: VOLUME V
  • 成交量统计 我的第一个WordPress插件。 我最初是基于一个文件插件Hello Dolly的。 我修改了简单的插件,以计算每年的帖子数量,并获取每个类别的帖子数量。 最初,该插件只是将所有这些信息放在单个WordPress帖子中...
  • 公司拥有的软件产品表:产品代码,产品名称,供应商代码,库存数量,产品价格 销售合同表:合同号,合同日期,客户代码,雇员代码,合同金额,交货日期,交货地点,交货方式 合同所含软件产品表:合同号,产品代码,...
  • 先将对应字段指向系统参数实体,然后进EditUI将Query去除,在regBindings方法中对该字段添加过滤至子项不是分录字段的添加... //成交方式//prmtturnoverMode为字段对应的页面F7选择框对象分录字段添加代码为 DCUti...
  • 报关准备

    2019-10-04 22:04:49
    一、接单 提货单的换取1.确认提单的有效性 2....报关单的数据、金额、贸易方式、成交方式等与报关资料一致,表头表体净重一致1.核实确认拟申报货物适用的海关海关程序性管理制度2.核实拟申报货物...
  • 2、老数据有几种方式,我用的并不是最优的,先从安居客爬取所有小区入库(安居客反爬比较强,锁也是增量爬取),链家查询每个小区成交房源数据。 3、还有更好的策略,只是练习,所以没有完善,总共5万多数据,抓了4...
  • 界面优化。更大气,好看。 2,增加了客户资料按时间段分配给其他不同业务员功能。...3,成交战败明细查看窗体增加了回访次数字段。 4,优化了全局代码。 5,窗体图片采用链接方式展现,速度更快,程序更小。
  • 1交易性金融资产初始确认: 可以细分为两个交易: 第一个,交易性金融资产录入: 根据债券的形成方式,分别对应不同的主产品号,一般情况下有三种形成方式: ...成交单编号,形成方式,债券代码, 发行日期...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 152
精华内容 60
关键字:

成交方式代码