2009-07-06 15 views
12

RubyまたはPythonのような高水準言語で財務上のオープン・ハイ・ロー・クローズ(OHLC)チャートを作成するための最良の選択肢は何ですか?グラフ作成には多くのオプションがあるようですが、この種のグラフでは宝石や卵は見ていません。RubyまたはPythonの財務チャート/グラフ

http://en.wikipedia.org/wiki/Open-high-low-close_chart(私は移動平均やボリンジャーバンドを必要としない)

はJFreeChartは、Javaでこれを行うことができますが、私はできるだけ私のコードベースは、などの小型でシンプルな作りにしたいと思います。

ありがとうございます!

答えて

17

matplotlibとオプションのbottomパラメータはmatplotlib.pyplot.barです。その後、開閉の価格を示すためにラインplotを使用することができます。

例えば:、明らかに

enter image description here

あなたがしたいと思います:

#!/usr/bin/env python 
import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib import lines 

import random 


deltas = [4, 6, 13, 18, 15, 14, 10, 13, 9, 6, 15, 9, 6, 1, 1, 2, 4, 4, 4, 4, 10, 11, 16, 17, 12, 10, 12, 15, 17, 16, 11, 10, 9, 9, 7, 10, 7, 16, 8, 12, 10, 14, 10, 15, 15, 16, 12, 8, 15, 16] 
bases = [46, 49, 45, 45, 44, 49, 51, 52, 56, 58, 53, 57, 62, 63, 68, 66, 65, 66, 63, 63, 62, 61, 61, 57, 61, 64, 63, 58, 56, 56, 56, 60, 59, 54, 57, 54, 54, 50, 53, 51, 48, 43, 42, 38, 37, 39, 44, 49, 47, 43] 


def rand_pt(bases, deltas): 
    return [random.randint(base, base + delta) for base, delta in zip(bases, deltas)] 

# randomly assign opening and closing prices 
openings = rand_pt(bases, deltas) 
closings = rand_pt(bases, deltas) 

# First we draw the bars which show the high and low prices 
# bottom holds the low price while deltas holds the difference 
# between high and low. 
width = 0 
ax = plt.axes() 
rects1 = ax.bar(np.arange(50), deltas, width, color='r', bottom=bases) 

# Now draw the ticks indicating the opening and closing price 
for opening, closing, bar in zip(openings, closings, rects1): 
    x, w = bar.get_x(), 0.2 

    args = { 
    } 

    ax.plot((x - w, x), (opening, opening), **args) 
    ax.plot((x, x + w), (closing, closing), **args) 


plt.show() 

は、このようなプロットを作成します(open, close, min, max)タプルを使用してプロットを描いた関数でこれをパッケージ化します(そして、あなたはおそらくあなたの開始価格と終了価格をランダムに割り当てたくないでしょう)。

+0

この種類のグラフには開いたり閉じたりしません。 –

+0

@Eric開始価格と終了価格のティックを描くコードを追加しました。私はウィキペディアのページでチャートを見たときにそれらを見ませんでした(...私は財政的な人ではないので、彼らはそこにいるはずがないと考えました:)。 –

+0

@Aaron - ニース!ありがとう! –

4

Rとquantmodパッケージの使用を検討しましたか?それはおそらくあなたが必要とするものを正確に提供します。

+0

これは有望に見えます!私はできるだけ早くそれをチェックします。ありがとう! –

8

PythonでPylab(matplotlib.finance)を使用することができます。いくつか例があります:http://matplotlib.sourceforge.net/examples/pylab_examples/plotfile_demo.htmlBeginning Python Visualizationにこの問題に関する具体的な資料があります。

更新:日本のローソク足の効果にはmatplotlib.finance.candlestickを使うことができると思います。

+0

残念ながら、私が探しているグラフのタイプはありません。 –

+0

更新がより近づくかどうかを確認する – unmounted

+0

http://matplotlib.sourceforge.net/examples/pylab_examples/finance_demo.html – Piotr

1

RubyではなくJRubyを自由に使用できますか?それでJFreeChartを使用できるようになりました。あなたのコードはまだRubyにあります。

+1

Pythonを使用する傾向がある方は、jythonにも同じことが適用されます。 – Autoplectic

+0

この状況で、Pythonよりjythonを使用する利点は何ですか? –

+0

Eric:Rubyと同じこと - Jythonを使用するとJavaクラスにアクセスできるため、JFreeChartを使用することができます –

0

例を見るのが好きな方は、Open Flash Chartをお勧めします。私はより埋め込み型チャートのためにFlotのようなJavaScript/Canvasライブラリに移動しました。カスタマイズが可能で、多くのハッキング(http://itprolife.worona.eu/2009/08/scatter-chart-library-moving-to-flot.html)がなくても効果が得られます。

+0

**ルビー**または** python **のチャート作成ツールを質問しています。フラッシュまたはjavascriptのいずれか... – user1055604

0

これは私があなたの参考のために、あまりにもソースを掲載しました、matplotlibのを使用してわずか数日前に描き株価チャート:matplotlibのを使用して、金融プロット(OHLC)についてStockChart_Matplotlib

4

いくつかの例をここで見つけることができます:

  • finance demo

    #!/usr/bin/env python 
    from pylab import * 
    from matplotlib.dates import DateFormatter, WeekdayLocator, HourLocator, \ 
        DayLocator, MONDAY 
    from matplotlib.finance import quotes_historical_yahoo, candlestick,\ 
        plot_day_summary, candlestick2 
    
    # (Year, month, day) tuples suffice as args for quotes_historical_yahoo 
    date1 = (2004, 2, 1) 
    date2 = (2004, 4, 12) 
    
    
    mondays = WeekdayLocator(MONDAY)  # major ticks on the mondays 
    alldays = DayLocator()    # minor ticks on the days 
    weekFormatter = DateFormatter('%b %d') # Eg, Jan 12 
    dayFormatter = DateFormatter('%d')  # Eg, 12 
    
    quotes = quotes_historical_yahoo('INTC', date1, date2) 
    if len(quotes) == 0: 
        raise SystemExit 
    
    fig = figure() 
    fig.subplots_adjust(bottom=0.2) 
    ax = fig.add_subplot(111) 
    ax.xaxis.set_major_locator(mondays) 
    ax.xaxis.set_minor_locator(alldays) 
    ax.xaxis.set_major_formatter(weekFormatter) 
    #ax.xaxis.set_minor_formatter(dayFormatter) 
    
    #plot_day_summary(ax, quotes, ticksize=3) 
    candlestick(ax, quotes, width=0.6) 
    
    ax.xaxis_date() 
    ax.autoscale_view() 
    setp(gca().get_xticklabels(), rotation=45, horizontalalignment='right') 
    
    show() 
    

enter image description here

+0

コードサンプルが短い場合は、リンクが死んでしまうために答えに含めてください。そのため、人々はクリックスルーする必要はありません。 – agf

+0

追加された最初の例は、2番目の例は長すぎますIMHOです。 – karlacio