2016-09-16 3 views
1

Ich versuche, OHLC Candlestick-Diagramm (1Min) für einen kompletten Tag zu plotten und zeigen wollen 'Stunden' als Major Locator und Min als kleinere Locator. Stunden-Locator sollte als bis Ende der Daten angezeigt werden Major Locator 09:00 10:00 11:00 und so weiter.Probleme bei der Plotting Intraday OHLC Diagramm mit Matplotlib

enter image description here

Ich bin nicht in der Lage zu verstehen, welche Fehler ich tue und warum die Zeit ab 22.00 Uhr und EHTS- Kerzen sind nicht sichtbar.

Wenn Sie auch mit Volumen-Overlay auf Ohlc-Diagramm helfen können, wäre es eine große Hilfe. link to data file

from datetime import datetime, date, timedelta 
import matplotlib.pyplot as plt 
import matplotlib.dates as mdates 
import matplotlib.gridspec as grd 
from matplotlib.transforms import Bbox 
from matplotlib.finance import candlestick_ohlc, volume_overlay3, volume_overlay 
#from matplotlib.finance import candlestick 
from matplotlib.backends.backend_pdf import PdfPages 
from matplotlib.dates import DateFormatter, WeekdayLocator, DayLocator, MONDAY, HourLocator, MinuteLocator 


import numpy as np 
import pandas as pd 


def plot_underlying_hft_data(filename): 


    #Read the data and filtered out the required rows and columns 
    print("Reading File.. ", filename) 
    tempdata = pd.read_csv(filename, index_col = ['Date']) 
    tempdata = tempdata.loc[(tempdata.index == '2016-09-16')] 

    tempdata['Datetime'] = pd.to_datetime(tempdata['Datetime'], format='%Y-%m-%d %H:%M:%S') 
    print(tempdata) 

    HourLocator 

    hour = HourLocator()  
    minute = MinuteLocator() 
    hourformatter = DateFormatter('%H:%M') 

    #tempdata['Datetime'] = tempdata['Datetime'].apply(lambda datetimevar : datetime) 

    tempdata['DatetimeNum'] = mdates.date2num(tempdata['Datetime'].dt.to_pydatetime()) 

    quotes = [tuple(x) for x in tempdata[['DatetimeNum', 'Open', 'High', 'Low', 'Close', 'Volume']].to_records(index=False)] 

    #print(quotes)  
    title_name_ohlc = 'OHLC Intraday Chart' 
    #print(title_name_ohlc) 
    plt.figure(figsize = (12,6)) 
    #plt.title(title_name_ohlc) 
    ax1 = plt.subplot2grid((1,1), (0,0), axisbg='w') 

    ax1.set_ylabel('Price', fontsize=12, fontweight = 'bold') 
    ax1.set_title(title_name_ohlc, fontsize=14, fontweight = 'bold') 
    ax1.set_ylabel('Price', fontsize=12, fontweight = 'bold') 
    ax1.set_title(title_name_ohlc, fontsize=14, fontweight = 'bold') 
    print(tempdata['DatetimeNum'].min(), tempdata['DatetimeNum'].max()) 
    ax1.set_ylim(bottom = tempdata['DatetimeNum'].min(), top = tempdata['DatetimeNum'].max()) 

    ax1.xaxis.set_major_locator(hour) 
    ax1.xaxis.set_minor_locator(minute) 
    ax1.xaxis.set_major_formatter(hourformatter) 
    #ax1.grid(True) 
    candlestick_ohlc(ax1, quotes, width=1, colorup='g', colordown='r', alpha = 1.0) 
    plt.setp(plt.gca().get_xticklabels(), rotation=45, horizontalalignment='right') 
    plt.show() 

plot_underlying_hft_data("data.csv") 

     #print(tempdata.head(5)) 

Antwort

3

Ich war bei der Definition der xlimits und Breite in der Aufzeichnung der Graph tun Fehler. Ich reparierte nach dem Lesen der Dokumentation und einiger Treffer und Versuche und bekam die Ausgabe wie gewünscht. enter image description here

def plot_underlying_hft_data(filename): 


#Read the data and filtered out the required rows and columns 
print("Reading File.. ", filename) 
tempdata = pd.read_csv(filename, index_col = ['Date']) 
tempdata = tempdata.loc[(tempdata.index == '2016-09-16')].tail(751) 
print(tempdata.head(5)) 
tempdata.set_index(['Datetime'], inplace = True) 
print(tempdata.head(5)) 

#tempdata['Datetime'] = pd.to_datetime(tempdata['Datetime'], format='%Y-%m-%d %H:%M:%S') 
#print(tempdata) 

#hour = HourLocator(interval = 1)  
minute = MinuteLocator(interval = 30) 
hourformatter = DateFormatter('%H:%M') 

#tempdata['Datetime'] = tempdata['Datetime'].apply(lambda datetimevar : datetime) 
tempdata["Datetime"] = pd.to_datetime(tempdata.index) 
tempdata.Datetime = mdates.date2num(tempdata.Datetime.dt.to_pydatetime()) 
#print(tempdata.head(5)) 

quotes = [tuple(x) for x in tempdata[['Datetime', 'Open', 'High', 'Low', 'Close', 'Volume']].to_records(index=False)] 

#print(quotes)  
title_name_ohlc = 'OHLC Intraday Chart' 
#print(title_name_ohlc) 
plt.figure(figsize = (18,10)) 
#plt.title(title_name_ohlc) 
ax1 = plt.subplot2grid((1,1), (0,0), axisbg='w') 

ax1.set_ylabel('Price', fontsize=12, fontweight = 'bold') 
ax1.set_title(title_name_ohlc, fontsize=14, fontweight = 'bold') 
ax1.set_ylabel('Price', fontsize=12, fontweight = 'bold') 
ax1.set_xlabel('Time', fontsize=12, fontweight = 'bold') 
ax1.set_title(title_name_ohlc, fontsize=14, fontweight = 'bold') 
#print(tempdata['DatetimeNum'].min(), tempdata['DatetimeNum'].max()) 
ax1.set_xlim(tempdata['Datetime'].min(), tempdata['Datetime'].max()) 

ax1.xaxis.set_major_locator(minute) 
#ax1.xaxis.set_minor_locator(minute) 
ax1.xaxis.set_major_formatter(hourformatter) 
ax1.axhline(y=262.32, linewidth=1.5, color='g', alpha = 0.7, linestyle = "dashed") 
ax1.axhline(y=260.33, linewidth=2, color='g', alpha = 0.7, linestyle = "dashed") 
ax1.axhline(y=258.17, linewidth=2.5, color='g', alpha = 0.7, linestyle = "dashed") 
ax1.axhline(y=256.18, linewidth=3, color='b', alpha = 1, linestyle = "dashed") 
ax1.axhline(y=254.02, linewidth=2.5, color='r', alpha = 0.7, linestyle = "dashed") 
ax1.axhline(y=252.03, linewidth=2, color='r', alpha = 0.7, linestyle = "dashed") 
ax1.axhline(y=249.87, linewidth=1.5, color='r', alpha = 0.7, linestyle = "dashed") 

#['256.18', '254.02', '252.03', '249.87', '258.17', '260.33', '262.32'] 
ax1.grid(True) 

#ax1.grid(True) 
candlestick_ohlc(ax1, quotes, width = 1/(24*60*2.5), alpha = 1.0, colorup = 'g', colordown ='r') 
plt.setp(plt.gca().get_xticklabels(), horizontalalignment='center') 

pad = 0.25 
yl = ax1.get_ylim() 
print(yl) 
ax1.set_ylim(yl[0]-(yl[1]-yl[0])*pad,yl[1]*1.005) 

Datetime = [x[0] for x in quotes] 
Datetime = np.asarray(Datetime) 
Volume = [x[5] for x in quotes] 
Volume = np.asarray(Volume) 

ax2 = ax1.twinx() 
ax2.set_position(matplotlib.transforms.Bbox([[0.125,0.125],[0.9,0.27]])) 
width = 1/(24*60*4) 
ax2.bar(Datetime, Volume, color='blue', width = width, alpha = 0.75) 
ax2.set_ylim([0, ax2.get_ylim()[1] * 1]) 
ax2.set_ylabel('Volume', fontsize=12, fontweight = 'bold') 
yticks = ax2.get_yticks() 
ax2.set_yticks(yticks[::1]) 
#ax2.grid(True) 
#report_pdf.savefig(pad_inches=0.5, bbox_inches= 'tight') 
#plt.close() 
plt.show() 
+0

Würden Sie Ihre Datei oder eine ähnliche Datei erneut hochladen? Der Link funktioniert nicht mehr. Ich stehe hier vor einem ähnlichen Problem. Vielen Dank. – StayFoolish

Verwandte Themen