【问题标题】:Plot intraday candlestick with python用 python 绘制日内烛台
【发布时间】:2017-04-19 22:41:59
【问题描述】:

我开始创建一个有趣的程序来绘制日内烛台,但我很难做到。如果有人可以帮助我。

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,Pair,DateTime,Bid,Ask 5803730773,D,EUR/USD,2017-04-09 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,EUR/USD,2017-04-09 17:00:41.593000000,1.058710,1.058970 5803731109,D,EUR/USD,2017-04-09 17:01:47.843000000,1.058680,1.058980

【问题讨论】:

    标签: python candlestick-chart


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2018-12-16
      • 2022-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-12
      • 1970-01-01
      • 2021-02-28
      相关资源
      最近更新 更多