2017-04-19 82 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,Dealable,對,日期時間,買價,賣價 5803730773,d,歐元/美元,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,歐元/美元,2017年4月9日17:01:47.843000000,1.058680,1.058980

回答

1

width設置似乎是錯的,width中的情節應該是fraction of day。在你的情況下,你將它設置爲0.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