What are my best options for creating a financial open-high-low-close (OHLC) chart in a high level language like Ruby or Python? While there seem to be a lot of options for graphing, I haven't seen any gems or eggs with this kind of chart.
在Ruby或Python等高级语言中创建金融开放-高-低-关闭(OHLC)图表的最佳选择是什么?虽然似乎有很多图形绘制的选项,但我还没有见过任何有这种图表的宝石或蛋。
http://en.wikipedia.org/wiki/Open-high-low-close_chart (but I don't need the moving average or Bollinger bands)
http://en.wikipedia.org/wiki/Open-high-low-close_chart(但我不需要移动平均线或Bollinger带)
JFreeChart can do this in Java, but I'd like to make my codebase as small and simple as possible.
JFreeChart可以在Java中实现这一点,但是我希望代码库尽可能地小和简单。
Thanks!
谢谢!
8 个解决方案
#1
17
You can use matplotlib and the the optional bottom
parameter of matplotlib.pyplot.bar. You can then use line plot
to indicate the opening and closing prices:
您可以使用matplotlib和matplotlib.pyplot.bar的可选底部参数。然后你可以用线条图来表示开盘价和收盘价:
For example:
例如:
#!/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()
creates a plot like this:
创造一个这样的情节:
Obviously, you'd want to package this up in a function that drew the plot using (open, close, min, max)
tuples (and you probably wouldn't want to randomly assign your opening and closing prices).
显然,您希望将其打包到使用元组(open、close、min、max)绘制图的函数中(您可能不希望随机分配开盘价和收盘价)。
#2
8
You can use Pylab (matplotlib.finance
) with Python. Here are some examples: http://matplotlib.sourceforge.net/examples/pylab_examples/plotfile_demo.html . There is some good material specifically on this problem in Beginning Python Visualization.
您可以在Python中使用Pylab (matplotli .finance)。这里有一些示例:http://matplotlib.sourceforge.net/examples/pylab_examples/plotfile_demo.html。在Python可视化的开头,有一些关于这个问题的很好的材料。
Update: I think you can use matplotlib.finance.candlestick for the Japanese candlestick effect.
更新:我想你可以用matplotli .finance。日本烛台效应的烛台。
#3
4
Have you considered using R and the quantmod package? It likely provides exactly what you need.
你考虑过使用R和quantmod包吗?它可能提供了您所需要的东西。
#4
4
Some examples about financial plots (OHLC) using matplotlib can be found here:
一些使用matplotlib的金融阴谋(OHLC)的例子可以在这里找到:
-
融资演示
#!/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()
- finance work 2
- 金融工作2
#5
1
Are you free to use JRuby instead of Ruby? That'd let you use JFreeChart, plus your code would still be in Ruby
您可以使用JRuby而不是Ruby吗?这样您就可以使用JFreeChart,并且您的代码仍然在Ruby中
#6
0
Please look at the Open Flash Chart embedding for WHIFF http://aaron.oirt.rutgers.edu/myapp/docs/W1100_1600.openFlashCharts An example of a candle chart is right at the top. This would be especially good for embedding in web pages.
请查看嵌入的打开的Flash格式http://aaron.oirt.rutgers.edu/myapp/docs/W1100_1600.openFlashCharts示例中的蜡烛图就在顶部。这对于嵌入web页面尤其有利。
#7
0
Open Flash Chart is nice choice if you like the look of examples. I've moved to JavaScript/Canvas library like Flot for HTML embedded charts, as it is more customizable and I get desired effect without much hacking (http://itprolife.worona.eu/2009/08/scatter-chart-library-moving-to-flot.html).
如果您喜欢示例的外观,打开Flash图表是一个不错的选择。我已经转向了JavaScript/Canvas类库,比如Flot,用于HTML嵌入式图表,因为它更易于定制,而且我得到了想要的效果,而不需要太多的破解(http://itprolife.worona.eu/2009/08/散页图表-library-moving-to-flot.html)。
#8
0
This is the stock chart I draw just days ago using Matplotlib, I've posted the source too, for your reference: StockChart_Matplotlib
这是我几天前用Matplotlib绘制的股票图表,我也发布了源代码,供您参考:StockChart_Matplotlib
#1
17
You can use matplotlib and the the optional bottom
parameter of matplotlib.pyplot.bar. You can then use line plot
to indicate the opening and closing prices:
您可以使用matplotlib和matplotlib.pyplot.bar的可选底部参数。然后你可以用线条图来表示开盘价和收盘价:
For example:
例如:
#!/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()
creates a plot like this:
创造一个这样的情节:
Obviously, you'd want to package this up in a function that drew the plot using (open, close, min, max)
tuples (and you probably wouldn't want to randomly assign your opening and closing prices).
显然,您希望将其打包到使用元组(open、close、min、max)绘制图的函数中(您可能不希望随机分配开盘价和收盘价)。
#2
8
You can use Pylab (matplotlib.finance
) with Python. Here are some examples: http://matplotlib.sourceforge.net/examples/pylab_examples/plotfile_demo.html . There is some good material specifically on this problem in Beginning Python Visualization.
您可以在Python中使用Pylab (matplotli .finance)。这里有一些示例:http://matplotlib.sourceforge.net/examples/pylab_examples/plotfile_demo.html。在Python可视化的开头,有一些关于这个问题的很好的材料。
Update: I think you can use matplotlib.finance.candlestick for the Japanese candlestick effect.
更新:我想你可以用matplotli .finance。日本烛台效应的烛台。
#3
4
Have you considered using R and the quantmod package? It likely provides exactly what you need.
你考虑过使用R和quantmod包吗?它可能提供了您所需要的东西。
#4
4
Some examples about financial plots (OHLC) using matplotlib can be found here:
一些使用matplotlib的金融阴谋(OHLC)的例子可以在这里找到:
-
融资演示
#!/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()
- finance work 2
- 金融工作2
#5
1
Are you free to use JRuby instead of Ruby? That'd let you use JFreeChart, plus your code would still be in Ruby
您可以使用JRuby而不是Ruby吗?这样您就可以使用JFreeChart,并且您的代码仍然在Ruby中
#6
0
Please look at the Open Flash Chart embedding for WHIFF http://aaron.oirt.rutgers.edu/myapp/docs/W1100_1600.openFlashCharts An example of a candle chart is right at the top. This would be especially good for embedding in web pages.
请查看嵌入的打开的Flash格式http://aaron.oirt.rutgers.edu/myapp/docs/W1100_1600.openFlashCharts示例中的蜡烛图就在顶部。这对于嵌入web页面尤其有利。
#7
0
Open Flash Chart is nice choice if you like the look of examples. I've moved to JavaScript/Canvas library like Flot for HTML embedded charts, as it is more customizable and I get desired effect without much hacking (http://itprolife.worona.eu/2009/08/scatter-chart-library-moving-to-flot.html).
如果您喜欢示例的外观,打开Flash图表是一个不错的选择。我已经转向了JavaScript/Canvas类库,比如Flot,用于HTML嵌入式图表,因为它更易于定制,而且我得到了想要的效果,而不需要太多的破解(http://itprolife.worona.eu/2009/08/散页图表-library-moving-to-flot.html)。
#8
0
This is the stock chart I draw just days ago using Matplotlib, I've posted the source too, for your reference: StockChart_Matplotlib
这是我几天前用Matplotlib绘制的股票图表,我也发布了源代码,供您参考:StockChart_Matplotlib