Вопрос по ruby, python – Финансовые диаграммы / графики в Ruby или Python

12

Каковы мои лучшие варианты для создания финансового графика открытия-высокого-низкого-закрытия (OHLC) на языке высокого уровня, таком как Ruby или Python? В то время как есть много вариантов для построения графиков, я не видел каких-либо драгоценных камней или яиц с такой диаграммой.

http://en.wikipedia.org/wiki/Open-high-low-close_chart (но мне не нужна скользящая средняя или полосы Боллинджера)

JFreeChart может делать это в Java, но я хотел бы сделать мою кодовую базу как можно более маленькой и простой.

Спасибо!

Ваш Ответ

8   ответов
8

Вы можете использовать Pylab (matplotlib.finance) с Python. Вот некоторые примеры:http://matplotlib.sourceforge.net/examples/pylab_examples/plotfile_demo.html , Есть некоторые хорошие материалы специально по этой проблеме вНачало Python Визуализация.

Обновление: я думаю, что вы можете использоватьmatplotlib.finance.candlestick для эффекта японской свечи.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Eric the Red
4

Рассматривали ли вы использование R иquantmod пакет? Скорее всего, это именно то, что вам нужно.

Error: User Rate Limit Exceeded Eric the Red
17

Ты можешь использоватьMatplotlib и необязательныйbottom параметрmatplotlib.pyplot.bar, Затем вы можете использовать линиюplot указать цены открытия и закрытия:

Например:

#!/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()

создает сюжет так:

enter image description here

Очевидно, вы хотите упаковать это в функцию, которая нарисовала график, используя(open, close, min, max) кортежей (и вы, вероятно, не захотите случайным образом назначать цены открытия и закрытия).

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Eric the Red
Error: User Rate Limit Exceeded Eric the Red
Error: User Rate Limit Exceeded
0

Open Flash Chart - хороший выбор, если вам нравится внешний вид примеров. Я перешел на библиотеку JavaScript / Canvas, напримерFlot для HTML встроенных диаграмм, так как это более настраиваемый, и я получаю желаемый эффект без особых взломов (http://itprolife.worona.eu/2009/08/scatter-chart-library-moving-to-flot.html).

Error: User Rate Limit ExceededrubyError: User Rate Limit ExceededpythonError: User Rate Limit Exceeded
0

Это график акций, который я нарисовал всего несколько дней назад, используя Matplotlib. Я также опубликовал источник для вашей справки:StockChart_Matplotlib

4

Некоторые примеры финансовых графиков (OHLC) с использованием matplotlib можно найти здесь:

  • 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

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0

Пожалуйста, посмотрите на встраивание Open Flash Chart для WHIFF http://aaron.oirt.rutgers.edu/myapp/docs/W1100_1600.openFlashCharts Пример графика свечи находится прямо вверху. Это было бы особенно хорошо для встраивания в веб-страницы.

Error: User Rate Limit Exceeded
1

Вы можете использовать JRuby вместо Ruby? Это позволило бы вам использовать JFreeChart, плюс ваш код все еще был бы в Ruby

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Eric the Red

Похожие вопросы