Exemple #1
0
def yield_rate_plot(data: pd.DataFrame, stocks: []):
    """
    收益率图表
    :param data: 数据
    :param stocks: 股票
    :return:
    """
    time = data.loc[(data["symbol"] == stocks[0])]['time']
    time = timestamp_2_date(time.tolist())
    min_date = time[0]
    max_date = time[-1]

    df = pd.DataFrame(index=time[1:])

    for stock in stocks:
        stock_data = data.loc[(data['symbol'] == stock)]
        logging.info('%s data size %s', stock, len(stock_data))
        ln_return_rate = log_yield_rate(list(stock_data['close']))
        df[stock] = np.cumsum(ln_return_rate)
        print(np.cumsum(ln_return_rate))

    g = sns.lineplot(data=df)
    # X轴刻度设置
    g.format_xdata = dates.AutoDateFormatter(dates.MonthLocator())

    plt.legend()
    plt.title('ETF累计收益率({0} - {1})'.format(date_2_month(min_date),
                                           date_2_month(max_date)))
    plt.show()
Exemple #2
0
def week_line_overlay_plot(data: pd.DataFrame, stocks: []):
    time = data.loc[(data["symbol"] == stocks[0])]['time']
    time = timestamp_2_date(time)

    df = pd.DataFrame(index=time)
    for stock in stocks:
        stock_data = data.loc[(data["symbol"] == stock)]
        df[stock] = normalize(stock_data, 'close')

    g = sns.lineplot(data=df)

    # X轴刻度设置
    g.format_xdata = dates.AutoDateFormatter(dates.WeekdayLocator())

    plt.legend()
    plt.show()
Exemple #3
0
def linear_regression_plot(data: pd.DataFrame, stocks: [], base_stock: str):
    """
    线性回归图
    :param data: 数据
    :param stocks: 票代码
    :return: 基准票代码
    """
    spy_data = data.loc[(data['symbol'] == base_stock)]
    return_spy = spy_data['close'].pct_change().dropna()

    time = timestamp_2_date(spy_data['time'].tolist())
    min_date = time[0]
    max_date = time[-1]

    m, n = subplot_num(len(stocks) - 1)
    fig = plt.figure()
    idx = 1
    for stock in stocks:
        if stock == base_stock:
            continue

        stock_data = data.loc[(data["symbol"] == stock)]

        logging.info("%s data size %s", stock, len(stock_data))

        return_stock = list(stock_data['close'].pct_change().dropna())
        alpha_spy, beta_spy = alpha_beta(return_spy, return_stock)

        x2 = np.linspace(return_spy.min(), return_spy.max(), 100)
        y_hat = x2 * beta_spy + alpha_spy

        ax = fig.add_subplot(m, n, idx)
        ax.scatter(list(return_spy), return_stock, alpha=0.3)
        ax.plot(x2, y_hat, alpha=0.9)

        plt.xlabel('{0} Return'.format(base_stock))
        plt.ylabel('{0} Return'.format(stock))

        idx += 1

    plt.suptitle('以{0}为基准的线性回归({1} - {2})'.format(base_stock,
                                                  date_2_month(min_date),
                                                  date_2_month(max_date)))
    plt.show()
Exemple #4
0
def line_overlay_plot(data: pd.DataFrame, stocks: [],
                      plotDateType: PlotDateType):
    """
    拆线叠加图
    :param data:
    :param stocks:
    :param plotDateType:
    :return:
    """
    time = data.loc[(data["symbol"] == stocks[0])]['time']
    time = timestamp_2_date(time.tolist())
    min_date = time[0]
    max_date = time[-1]

    df = pd.DataFrame(index=time)
    for stock in stocks:
        stock_data = data.loc[(data["symbol"] == stock)]
        # logging.info(timestamp_2_month(stock_data['time']))
        stock_data = list(normalize(stock_data, 'close'))

        logging.info('%s %s', stock, len(stock_data))

        df[stock] = stock_data

    g = sns.lineplot(data=df)

    # X轴刻度设置
    date_locator = None
    if plotDateType == PlotDateType.MONTH:
        date_locator = dates.AutoDateFormatter(dates.MonthLocator())
    elif plotDateType == PlotDateType.WEEK:
        date_locator = dates.AutoDateFormatter(dates.WeekdayLocator())
    elif plotDateType == PlotDateType.DAY:
        date_locator = dates.AutoDateFormatter(dates.DateLocator())

    g.format_xdata = date_locator
    # 鼠标hover 事件
    # plt.gcf().canvas.mpl_connect('motion_notify_event', onpick)
    plt.title('ETF价格叠加图({0} - {1})'.format(date_2_month(min_date),
                                           date_2_month(max_date)))
    plt.legend()
    plt.show()
Exemple #5
0
def correlation_coefficient_plot(data: pd.DataFrame, stocks: []):
    """
    计算关联系数
    :param data:
    :param stocks:
    :return:
    """
    time = data.loc[(data["symbol"] == stocks[0])]['time']
    time = timestamp_2_date(time.tolist())
    min_date = time[0]
    max_date = time[-1]

    df = pd.DataFrame()
    for stock in stocks:
        stock_data = data.loc[(data["symbol"] == stock)]
        df[stock] = stock_data['close'].values

    corr = df.corr()

    plt.figure(figsize=(12, 10))
    foo = sns.heatmap(corr, vmax=0.6, square=True, annot=True)
    plt.show()