refraction-ray / xalpha

基金投资管理回测引擎
MIT License
2.02k stars 437 forks source link

v_kline()函数的显示问题 #63

Open willzhqiang opened 3 years ago

willzhqiang commented 3 years ago

显示的lowest和highest似乎反了,见下图 Xnip2020-11-01_19-54-28 这个是从 https://nbviewer.jupyter.org/github/refraction-ray/xalpha/blob/master/doc/samples/newparadigm.ipynb 这里发现的。 另外,v_kline()能不能显示绿涨红跌呢?毕竟英美行情都是这样设置的。

refraction-ray commented 3 years ago

lowest 和 highest 确实标反了,新的 commit 已经调整过来了,感谢反馈。

关于颜色的自定义,我也实现了下,但感觉 pyecharts 画出来的还是一样的配色,不知道是我 API理解的问题,还是 pyecharts 的问题。考虑到 pyecharts 的频繁 breaking change 和很多生成 echarts 图的 bug,我已经锁死了 pyecharts 的版本,并且不再投入更多精力去实现 pyecharts 可视化了。

用 pyecharts 画 k 线图的代码在 https://github.com/refraction-ray/xalpha/blob/master/xalpha/indicator.py#L526-L658, 如果你有兴趣更深入研究怎么能调整颜色的话,非常欢迎贡献。

willzhqiang commented 3 years ago

我最近尝试了一下,似乎我的可以,不过MR这种我比较陌生,我可以说下我的代码。 首先我安装的是最新的pyecharts版本,不是你这个里面的1.7.1,我安装的是1.9.0

## 这个地方把你的uclolor和dcolor的颜色调换了
def plot_kline(df, rendered=True, ucolor="#14b143", dcolor="#ef232a", col=""):
## 这个地方改成了y_axis,新版本的API换成了这个。
y_axis=list(zip(df["open"], df["close"], df["low"], df["high"])),

就是升级了版本,改动了这两个地方,然后就可以。 image

refraction-ray commented 3 years ago

我又确认了一下,pyecharts 1.7.1 这个地方最新代码也是没问题的。就像你说的,只需要把两种想要的颜色传入 ucolor 和 dcolor 就好了

willzhqiang commented 3 years ago

不过还有个问题,看来是百度echarts本身不支持,就是我希望上涨是阳烛,也就是里面是空心,而不是实心;网上找了一圈,都没有找到解决方案,不知道作者可有办法?

refraction-ray commented 3 years ago

刚看了下 echarts 是支持的,每一个柱子可以分成内部颜色和边界颜色分别定义,最新 commit 更新了代码。 使用如下 xa.get_daily("HK00700").v_kline(ucolor="#ffffff", ucolorborder="#ef232a") 上涨红色空心,下降绿色实心 xa.get_daily("HK00700").v_kline(dcolor="#ef232a", ucolorborder="#14b143", ucolor="#ffffff") 上涨绿色空心,下降红色实心。 要点就是每个柱子及其边界的颜色,可以分别用 ucolor dcolor ucolorborder 和 dcolorborder 分别自定义

willzhqiang commented 3 years ago

感谢更新,我看了下,确实生效了,有点小遗憾就是还是填充的白色,在黑色背景下面看着就不够完美,请看下图。但我想问空心这个问题其实是另外一种蜡烛图的表达。因为如果用空心和实心就能体现了收盘价和开盘价的关系了,就不需要颜色了。这个时候的颜色其实是表达的当天的收盘价和昨天收盘价的关系。如果是绿色,那么代表今天收盘价比昨天高,否则就是低。这个具体可以参考下面两篇文章。 https://stockcharts.com/articles/mailbag/2012/11/what-the-deal-with-these-colored-filled-and-hollow-candles.html https://thetradingbible.com/how-to-read-hollow-candlesticks 我看了下,如果要改成这样,似乎要修改下面这段的代码了。不知道作者能否指教怎么修改呢?这个时候的红绿色是比较当天的close和前一天的close之间的关系;空心实心要看当天的close和当天的open之间的关系。

            itemstyle_opts=opts.ItemStyleOpts(
                color=JsCode(
                    """
                function(params) {{
                    var colorList;
                    if (barData[params.dataIndex]>0) {{
                        colorList = '{ucolor}';
                    }} else {{
                        colorList = '{dcolor}';
                    }}
                    return colorList;
                }}
                """.format(
                        ucolor=ucolorvolume, dcolor=dcolorvolume
                    )
                )  # escape {} when using forma

image

refraction-ray commented 3 years ago

其实透明很简单,颜色代码 “12345600” 就是透明的,前六位数字任意,后两位是00,把相应的 ucolor 设成这个就好了,不需要修改程序本身的代码。当然相应的也可以设定 ucolorvolume 对应的颜色代码,防止成交量的柱形图也透明了。 关于你提到的比较两天收盘价这个信息并表达出来,可能 echarts 确实不支持。你贴出的代码,是用来画下面柱形图的颜色的。也许 k 线图那边也可以用类似的复杂 js 函数的方案,实现这个功能,但我不是很确定。

willzhqiang commented 3 years ago

非常感谢指点,现在颜色这块看起来舒服多了。 image