2017-04-19 7 views
0

私は、日中の燭台をプロットするという楽しいプログラムを作り始めましたが、私はそれに苦労しました。もし誰かがそれを手伝ってくれたら。日中の燭台をpythonでプロットする

import numpy as np 
import pandas as pd 

def main(filename): 
    df = pd.read_csv(filename, sep = ',', parse_dates = ['DateTime']) 

    del df['Tid'] 
    del df['Dealable'] 
    del df['Pair'] 
    del df['Ask'] 

    df = df.set_index(['DateTime']) 

    df.index = pd.to_datetime(df.index, unit='s') 

    # group every 1 minutes and create OHLC 
    data = df.resample('1Min').ohlc() 

    # groupe our ohlc data 
    ohlc_data = data.reset_index() 
    ohlc_data['DateTime'] = ohlc_data['DateTime'].apply(mdates.date2num) 

    plt.close('all') 
    fig = plt.figure() 
    ax = plt.subplot2grid((1,1), (0,0)) 
    ax.xaxis_date() 
    ax.xaxis.set_major_formatter(mdates.DateFormatter('%y-%m-%d %H:%M:%S')) 
    plt.xticks(rotation=45) 
    plt.xlabel("Date") 
    plt.ylabel("Price") 
    plt.title("EURUSD") 
    candlestick_ohlc(ax, ohlc_data.values, width=.6, colorup='#53c156', colordown='#ff1717') 
    plt.show() 

if __name__ == "__main__": 
    main("EUR_USD.csv") 

フォームのEUR_USD.csvファイル: TIDは、取引可能、ペアは、日時、入札は、掲載し 5803730773、D、EUR/USD、2017年4月9日17:00:04.343000000,1.058550,1.059050 5803730842、D、EUR/USD、2017-04-09 17:00:38.593000000,1.058660,1.058960 5803730879、D、EUR/USD、2017-04-09 17:00:39.343000000,1.058680,1.058980 5803730894、D 、ユーロ/米ドル、2017年4月9日17:00:41.593000000,1.058710,1.058970 5803731109、D、EUR/USD、2017年4月9日17:01:47.843000000,1.058680,1.058980

答えて

1

あなたwidth設定は思わ間違っている、プロット内のはfraction of dayである必要があります。あなたのケースでは、それを.6(51840秒)に設定していますが、データは1分(60秒)ごとにサンプリングされます。ここであなたのコードは異なる幅で修正されています。下記を参照してください。

from matplotlib.finance import candlestick_ohlc 
import matplotlib.dates as mdates 
import numpy as np 
import pandas as pd 

def main(filename): 
    df = pd.read_csv(filename, sep = ',', parse_dates = True, index_col = ['DateTime']) 
    print 'raw data' 
    print df 

    """Creating open high low and close from bid price at every 1 min. in your case, you will get different values for the first minute 
    but for second minute high, low, close and open and are all same""" 

    ohlc_data = df.resample('1Min')['Bid'].ohlc() 
    print 'ohlc data' 
    print ohlc_data 
    ohlc_data = ohlc_data.reset_index() 
    ohlc_data['DateTime'] = ohlc_data['DateTime'].apply(mdates.date2num) 

    #plot 
    plt.close('all') 
    fig = plt.figure() 
    ax = plt.subplot2grid((1,1), (0,0)) 
    ax.xaxis_date() 
    ax.xaxis.set_major_formatter(mdates.DateFormatter('%y-%m-%d %H:%M:%S')) 
    plt.xticks(rotation=45) 
    plt.xlabel("Date") 
    plt.ylabel("Price") 
    plt.title("EURUSD") 
    # width should in terms of fraction of day, here i choose width of 0.25 min 
    candlestick_ohlc(ax, ohlc_data.values,width = 0.25/(24*60), colorup='#53c156', colordown='#ff1717') 
    plt.show() 

if __name__ == "__main__": 
    main("EUR_USD.csv") 

これは完璧に動作

raw data 
           Tid Dealable  Pair  Bid  Ask 
DateTime                
2017-04-09 17:00:04.343 5803730773  D EUR/USD 1.05855 1.05905 
2017-04-09 17:00:38.593 5803730842  D EUR/USD 1.05866 1.05896 
2017-04-09 17:00:39.343 5803730879  D EUR/USD 1.05868 1.05898 
2017-04-09 17:00:41.593 5803730894  D EUR/USD 1.05871 1.05897 
2017-04-09 17:01:47.843 5803731109  D EUR/USD 1.05868 1.05898 

ohlc data 

         open  high  low close 
DateTime            
2017-04-09 17:00:00 1.05855 1.05871 1.05855 1.05871 
2017-04-09 17:01:00 1.05868 1.05868 1.05868 1.05868 

enter image description here

+0

感謝を作り出します! – Kiritan

関連する問題