编辑:我操作了一个较小的示例,以便您可以根据需要重现它。
我有一个OHLC XTS表我使用(欧元/ $)
> theBars
Open High Low Close
2014-06-17 01:42:26 13835 13836 13835 13836
2014-06-17 01:42:59 13836 13838 13835 13837
2014-06-17 01:43:21 13837 13838 13837 13837
2014-06-17 01:43:51 13837 13837 13837 13837
2014-06-17 01:44:23 13837 13837 13837 13837
2014-06-17 01:44:51 13837 13838 13837 13838
2014-06-17 01:45:28 13837 13840 13837 13840
2014-06-17 01:45:59 13840 13842 13840 13842
2014-06-17 01:46:22 13842 13843 13842 13843
2014-06-17 01:46:58 13843 13844 13843 13844
2014-06-17 01:47:29 13843 13844 13843 13843
2014-06-17 01:47:58 13843 13843 13841 13843
2014-06-17 01:48:22 13843 13843 13842 13843
2014-06-17 01:48:59 13843 13843 13842 13842
2014-06-17 01:49:05 13842 13842 13841 13841
2014-06-17 01:49:54 13841 13841 13840 13841
2014-06-17 01:50:18 13841 13841 13841 13841
2014-06-17 01:50:44 13840 13840 13839 13840
2014-06-17 01:52:55 13839 13839 13838 13839
2014-06-17 01:53:42 13838 13839 13838 13838
2014-06-17 01:54:22 13837 13838 13837 13838
2014-06-17 01:54:58 13837 13838 13836 13837
2014-06-17 01:55:29 13836 13836 13834 13835
2014-06-17 01:55:59 13835 13837 13835 13837
2014-06-17 01:56:28 13837 13839 13837 13838
2014-06-17 01:56:59 13838 13838 13837 13837
2014-06-17 01:57:29 13837 13838 13837 13838
2014-06-17 01:57:59 13838 13838 13838 13838
2014-06-17 01:58:29 13838 13838 13836 13837
2014-06-17 01:58:58 13837 13837 13836 13836
2014-06-17 01:59:29 13836 13841 13836 13840
2014-06-17 01:59:59 13840 13840 13835 13837
2014-06-17 02:00:29 13837 13837 13836 13836
2014-06-17 02:00:58 13836 13836 13835 13836
2014-06-17 02:01:29 13835 13837 13835 13837
2014-06-17 02:01:58 13837 13837 13836 13836
我用
绘制点上的点points.default(x=timeIndex*tMult+1, #aligns with tMult = 3 when candles are candles, 1 when they are matchsticks
y=as.numeric(dataCol[i]), #the price, its around 13818
cex=dotSize,
pch=dotType,
col=thecolor)
哪个有效。 在此示例中,以下是值
x y cex pch col
"19" "13841" "2" "2" "green"
x y cex pch col
"19" "13841" "3" "2" "#7070FF"
x y cex pch col
"19" "13841" "4" "2" "#7070FF"
(每个点的中心是相同的,因为它是同时以一个价格进行的多次交易) 我还用
绘制了一些技术指标plot(addMACD(fast,slow,signal,maType,histogram))
和
plot(addSMA(n,overlay = overlay))
等。它也可以使用默认值按预期工作。
如果我使用技术将技术覆盖在图形上,如bbands和SMA,则可以同时绘制点。但是,如果我有一个像MACD这样的情节,它在一个单独的框中,将图形分成同一个绘图窗口中的两个图形,我就无法绘制这些点。为什么呢?!
答案 0 :(得分:0)
根据添加的指标重新编制y轴。 我发现自己重新编制索引更好,然后通过调整点的位置来绘制图形。我将在这里包含我通过搜索找到的所有常量。
假设您的数据位于名为“theBars”的变量中的OHLC中,请执行此操作par(usr=c(0,1,min(theBars),max(theBars)),xpd=TRUE)
我在一台1920x1200分辨率的显示器上完成了所有这些操作,因此所有像素测量都是这样的。这与使用par("fin")
的任何分辨率兼容
而且,这在几分之一秒内执行。这是为了清晰而写,而不是速度。
[0,1]与不同数量蜡烛的水平对齐:
if(numBars < 10) stop("cannot plot less than 10 candles")
horizNumerator <- if(numBars == 10) 1547 else
if(numBars == 11) 1559 else
if(numBars == 12) 1568 else
if(numBars == 13) 1574 else
if(numBars == 14) 1581 else
if(numBars == 15) 1588 else
if(numBars == 16) 1592 else
if(numBars == 17) 1597 else
if(numBars == 18) 1601 else
if(numBars == 19) 1603 else
if(numBars == 20) 1606 else
if(numBars <= 30) 1626 + (numBars-30)/(10/20) else
if(numBars <= 40) 1636 + (numBars-40)/(10/10) else
if(numBars <= 50) 1641 + (numBars-50)/(10/7) else
if(numBars <= 60) 1646 + (numBars-60)/(10/5) else
if(numBars <= 100) 1651 + (numBars-100)/(40/5) else
if(numBars <= 140) 1655 + (numBars-140)/(40/4) else
if(numBars <= 312) 1658 + (numBars-312)/(172/3) else
if(numBars > 312) 1662
horizUnit <- (horizNumerator/1802)/(length(theBars[,1])-1)*ifelse(plotNum<2,1,1693/1655)*par("fin")[1]/20
startHoriz <- ifelse(plotNum<2,55/1802,35/1802)*par("fin")[1]/20
垂直对齐,plotNum
是已经绘制的指标数量deltaP <- max(theBars)-min(theBars)
:
这涉及压缩情节区域的指标
pixelStretch <- (switch(as.character(plotNum),"0"=975,"1"=665,"2"=551,"3"=465, "4"=400,"5"=352,"6"= 313))/(983)
deltaP <- max(theBars)-min(theBars)
这可以解决指标绘制后的最大移动量
maxRaise <- if(plotNum == 0) 0 else
if(plotNum == 1) 15 else
if(plotNum == 2) 31 else
if(plotNum > 2) 36
maxRaise <- maxRaise*par("fin")[2]/12.0625/983
然后在这样的数据列dataCol
中绘制点
points.default(x=startHoriz + horizUnit*timeIndex,
y= maxRaise * deltaP + max(theBars)-((max(theBars)-as.numeric(dataCol[i]))*(pixelStretch)),
cex=dotSize,
pch=dotType,
col=thecolor)