zoukankan      html  css  js  c++  java
  • 金叉死叉量化交易--matplotlib绘图案例

    首先应该明白在matplotlib中画出图是不能直接标记的,标记只能借助annotate函数,对于散点图的图例显示问题,可以先将散点坐标集中起来,然后画图,显示图例

    #显示所有列
    pd.set_option('display.max_columns', None)
    pd.set_option('max_colwidth',500)
    
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
    plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号
    
    from sklearn.preprocessing import StandardScaler
    import datetime
    
    #读取A股指数日行情
    df = DataSource('AShareEODPrices').read(start_date='2018-01-01', end_date='2018-05-01')
    data = df[df['instrument'] == '000002.SZ']
    
    dropcols=['crncy_code', 'object_id', 'opdate', 'opmode', 's_dq_tradestatus', 's_info_windcode']
    data=data.drop(dropcols,axis=1)
    
    data['ma5'] = data['s_dq_avgprice'].rolling(5).mean()
    data['ma10'] = data['s_dq_avgprice'].rolling(10).mean()
    
    # 去掉前10个为nan的行
    data = data.dropna()
    data = data.reset_index(drop=True)

    以下为画图部分

    f,ax = plt.subplots(figsize = (10,8))
    
    plt.plot(data["ma5"],"r-")
    plt.plot(data["ma10"],"b-")
    
    ax.set_xticklabels(data["date"], rotation=45)
    
    golden=data[list((data["ma5"]>=data["ma10"]) & (data["ma5"]<data["ma10"]).shift(1))].index
    black=data[(data["ma5"]<=data["ma10"]) & (data["ma5"]>data["ma10"]).shift(1)].index
    
    
    type1_x = []
    type1_y = []
    type2_x = []
    type2_y = []
    
    for i in black:
        #lin3 = plt.scatter(i, data['ma5'][i], color='', marker='o', edgecolors='g', s=100)  
        
        type1_x.append(i)
        type1_y.append(data['ma5'][i])
        
        ax.annotate('B', xy=(i,data['ma5'][i]), xytext=(0, 20),
                xycoords='data',textcoords='offset points', fontsize=12,
                    arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=0"
                ))
    
    plt.scatter(type1_x, type1_y, color='', marker='o', edgecolors='g', s=100,label="sicha")  
         
    for i in golden:
        type2_x.append(i)
        type2_y.append(data['ma5'][i])
        
        #plt.scatter(i, data['ma5'][i], color='', marker='^', edgecolors='y', s=100)  
        ax.annotate('G', xy=(i,data['ma5'][i]), xytext=(0, 20),
                xycoords='data',textcoords='offset points', fontsize=12,
                    arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=0"
                ))
       
    plt.scatter(type2_x, type2_y, color='', marker='^', edgecolors='y', s=100,label="jincha")  
    
    plt.xlabel(u"time")
    plt.ylabel(u"price")
    
    plt.legend()
    plt.show()

     图为:

  • 相关阅读:
    zabbix 添加 微信、邮件 媒介详解
    zabbix使用之常用功能使用心得
    Nginx1.8源码包编译安装
    httpd启动显示Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName'
    apache-httpd2.4编译安装
    apache-httpd2.2编译安装
    MYSQL5.7源码包编译安装
    MYSQL常见安装错误集:[ERROR] --initialize specified but the data directory has files in it. Abort
    MYSQL启用数据库错误:ERROR 2002 (HY000)
    编译mysql时CMake Error at cmake/readline.cmake:85 (MESSAGE)
  • 原文地址:https://www.cnblogs.com/xiaodongsuibi/p/10844510.html
Copyright © 2011-2022 走看看