- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题是:
我想绘制一只股票的盘中 1 分钟 OHLC 柱。每日交易时段由若干段交易时段组成。如下所列:
交易日期:2017/09/14
包括交易时间:2017/09/13 21:00 - 23:00,2017/09/14 9:00 - 10:15, 10:30 - 11:30, 13:30 - 15:00.
如您所见,如果我直接使用 candlestick_ohlc
,就会出现间隙。
现在,如果我将 1 分钟的数据作为数据帧。我如何绘制烛台图,在任何柱之间没有间隙(例如,在 10:15 和 10:30 柱之间没有间隙),并且让 xticklabels 仅在每小时显示主要刻度,例如 22:00、23: 00、10:00 和每 15 分钟的小滴答,如 21:15、21:30、21:45 等。
您可以在这里生成一些具有类似形式的伪数据:
def generate_pseudo_data():
# datetime index data
idx = pd.date_range('2017-09-13 21:01:00',
'2017-09-13 23:00:00', freq='1min')
idx = idx.append(pd.date_range('2017-09-14 09:01:00',
'2017-09-14 10:15:00', freq='1min'))
idx = idx.append(pd.date_range('2017-09-14 10:31:00',
'2017-09-14 11:30:00', freq='1min'))
idx = idx.append(pd.date_range('2017-09-14 13:31:00',
'2017-09-14 15:00:00', freq='1min'))
# OHLC
inc = np.random.randint(-2, 3, size=idx.shape).cumsum()
opens = 3500 + inc
closes = opens + np.random.randint(-3, 3, idx.shape)
range_max = np.max(np.concatenate([opens.reshape(-1, 1),
closes.reshape(-1, 1)], axis=1), axis=1)
highs = range_max + np.random.randint(0, 5, size=idx.shape)
range_min = np.min(np.concatenate([opens.reshape(-1, 1),
closes.reshape(-1, 1)], axis=1), axis=1)
lows = range_min - np.random.randint(0, 5, size=idx.shape)
bar_df = pd.DataFrame({'open': opens, 'high': highs, 'low': lows,
'close': closes}, index=idx)
return bar_df
我在 matplotlib.finance 模块中看到,有 candlestic2_ohlc
和 candlestick_ohlc
。我的第一个尝试是使用 candlestick2_ohlc
,因为它不需要数字 datetime
参数,后者会弄乱带有许多间隙的条形图。我没有得到任何间隙,但我无法按照我想要的方式制作 xticklabels,因为我现在不知道如何将 datetimeIndex 信息传递给 xticklabels。
这是我首先尝试的:基本上从这篇文章中学到: how to plot ohlc candlestick with datetime in matplotlib?
from datetime import datetime, time
import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib.finance import candlestick2_ohlc, candlestick_ohlc
import matplotlib.dates as mdates
from matplotlib import ticker
bar_df = generate_pseudo_data()
fig, ax = plt.subplots()
figManager = plt.get_current_fig_manager()
figManager.window.showMaximized()
candlestick2_ohlc(ax, bar_df.open, bar_df.high, bar_df.low, bar_df.close,
width=0.6, colorup='r', colordown='c', alpha=1)
xdate = bar_df.index
def mydate(x, pos):
try:
return xdate[int(x)]
except IndexError:
return ''
ax.xaxis.set_major_formatter(ticker.FuncFormatter(mydate))
# Everything works fine up to now.
# However the xticklabels are not exactly at 22:00, 23:00, etc.
# And no minor tick labels set up at 21:15, 21:30, 21:45, etc.
# I tried either one of the command below, but both failed with no xticklabels
# showed up.
ax.xaxis.set_major_locator(mdates.HourLocator())
ax.xaxis.set_major_locator(mdates.MinuteLocator(byminute=[0, 15, 30, 45],
interval=1))
# This one works because it only tells xticklabels to have at most
# 8 tick labels, but no info about where the xticklabels should be.
ax.xaxis.set_major_locator(ticker.MaxNLocator(8))
请帮忙。
最佳答案
目前您正在根据其索引绘制数据。但是,如果您想使用 matplotlib.dates
定位器和格式化程序,您需要在轴上绘制日期。使用 candlestick2_ohlc
是不可能的。相反,您需要使用 candlestick_ohlc
函数。其实this answer里面也说了这个您链接到的问题。然而,使用实际日期不允许合并片段,除了可能在不同的子图中绘制外,请参见 ☼broken axes example .
因此这里的解决方案可能是继续绘制索引并将刻度设置到与所需刻度标签对应的位置。
xdate = bar_df.index
def mydate(x, pos):
try:
return xdate[int(x)]
except IndexError:
return ''
# create date ranges of possible dates to show as major and minor ticklabels
major_dr = pd.date_range('2017-09-13 21:00:00','2017-09-14 15:00:00', freq='60min')
minor_dr = pd.date_range('2017-09-13 21:00:00','2017-09-14 15:00:00', freq='15min')
# calculate positions of the above dates inside the dataframe index
major_ticks = np.isin(xdate, major_dr).nonzero()[0]
minor_ticks = np.isin(xdate, minor_dr).nonzero()[0]
# use those positions to put ticks at
ax.xaxis.set_major_locator(ticker.FixedLocator(major_ticks))
ax.xaxis.set_minor_locator(ticker.FixedLocator(minor_ticks))
ax.minorticks_on()
ax.xaxis.set_major_formatter(ticker.FuncFormatter(mydate))
fig.autofmt_xdate()
结果看起来像
这读起来非常困惑,但据我所知,这就是问题所要求的。
关于python - matplotlib.finance.candlestick_ohlc 绘制日内 1 分钟柱数据,每小时有时间间隔和适当的 xticklabels,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48225888/
我想获取 Yahoo! 中给定交易品种的关键统计数据金融。 我找到了几种使用 Yahoo Finance API 获取统计数据的方法。例如获取Apple的名称(n),ask(a),bid(b),mar
我如何通过 C# 接收股票报价? Google Finance API 不是很有用 最佳答案 Google Finance API Alternative。Google Finance API 的免费
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
我尝试按照 read.csv("http://ichart.finance.yahoo.com/table.csv?s=SPY") Not Working 的建议同时使用 http 和 https .
在过去的 3 年中,我一直在使用以下 URL,没有出现任何问题。但是,它已停止返回结果。 网址: https://query.yahooapis.com/v1/public/yql?q=select
我要求资深金融程序员提供最佳实践。 例如 PSUDO 代码: class Transaction(Model): order = ForeignKey() amount = Decim
我在一家专门从事金融的精品店工作。 我们考虑设计一种语言来描述与金融市场相关的金融实体。 这将主要用作某种脚本语言来替换在电子表格和 VBA 宏中运行的许多进程。 它必须很简单,事实上,它必须在幕后调
OrderBook充满了买卖订单。更新,新订单可能会执行交易。 我似乎找不到任何实现的示例。 我们可以为每个订单指定一个ID,并一一检查执行订单。但是我们想要可以扩展到数千个有效订单的产品。 我们可以
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
通过盈透证券的 API 方法 tickPrice 或 tickSize 接收金融报价数据时,数据将具有以下参数 tickerId(符号) 字段(1=买价、2=卖价、4=最后价、6=最高价、7=最低价、
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我正在编写一些用于股权的机器学习软件,并且希望找到一些即时数据或至少 3 或 5 分钟的数据。 我想要一两年的时间进行测试。 我并不关心数据来自哪个交易所,只要它来自某处的主要交易所即可。 还有什么地
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我是 QuickFix 的新手,我有几个关于 QuickFix 库的问题,我将非常乐意从您那里得到答案: 我计划开发 FIX 服务器,它可以同时从多个客户端获取 FIX 请求。对此, a) 如果我需要
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
只是想知道那里有什么样的免费金融 API。我正在寻找可以指定索引并通过股票代码获取该索引中包含的所有公司的列表的东西。 目前我只对在纽约证券交易所上市的公司股票感兴趣。我真的很感激任何关于 API 或
看起来应该是个简单的问题。我正在使用 Matlab 构建股票数据库和分析工具包。 我正在使用 Matlab 函数获取数据表,使用如下 URL: http://ichart.finance.yahoo.
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 去年关闭。 Improve this
我是一名优秀的程序员,十分优秀!