2016-12-16 135 views
-1

我将另一种语言的指标重写为Python,但我的情节看起来不太对。这是一个图片的情节看起来应该像 enter image description here用matplotlib绘制指标

但我的情节是这样的

enter image description here

东西它是错的我指示器的底部,但我也不怎么解决它。我的完整代码是herehere是我正在使用的data.csv文件。

def matrixSeries(matrix): 

    nn = 10 #Smoother 
    # --Sup/Res Detail 
    SupResPeriod = 50 
    SupResPercentage = 100 
    PricePeriod = 16 
    ob = 200 #Overbought 
    os = -200 #Oversold 
    #OBOS = false 
    #dynamic = true 
    high = np.array(r['max']) 
    low = np.array(r['min']) 
    close = np.array(r['close']) 
    ys1 = (high + low + close * 2)/4 
     rk3 = ta.EMA(ys1, nn) 
    rk4 = ta.STDDEV(ys1, nn) 
     rk5 = (ys1 - rk3) * 200 /rk4 
    rk6 = ta.EMA(rk5, nn) 
    up = ta.EMA(rk6, nn) 
    down = ta.EMA(up, nn) 

    # remove nans in array 
    upNans = np.isnan(up) 
    up[upNans] = 0 
    downNans = np.isnan(down) 
    down[downNans] = 0 

    Oo = np.where(up<down, up, down)  
    Cc= np.where(up<down, down, up) 

    #color 
    if matrix == 'color': 

     color = [] 
     aa = Oo > Cc 
     bb = up > down 
     color = np.where(aa , 'red' , np.where(bb, 'green','red') ) 
     return color 

    #Body Calculations 
    bodyHigh = np.where(up>down, up, down) 
    bodyLow = np.where(Oo<down, up, down) 

    bodyCover = np.where(np.any(up>0) and np.any(down>0), bodyLow, np.where(np.any(up<0) and np.any(down<0), bodyHigh,0)) 
    bodyCover = bodyCover 
    if matrix == 'cover': 
     return bodyCover 
    if matrix == 'top': 
     return Oo 
    if matrix == 'bottom': 
     return Cc 


ax3 = plt.subplot2grid((6,4), (0,0),sharex=ax1, rowspan=2, colspan=4) 
ax3.bar(r['date'], matrixSeries('top'), width=1.1,linewidth=0, color=matrixSeries('color')) 
ax3.bar(r['date'], matrixSeries('bottom'), width=1.1,linewidth=0, color=matrixSeries('color')) 
ax3.bar(r['date'], matrixSeries('cover'), width=1.1, linewidth=0, color='black') 
ax2.axes.xaxis.set_ticklabels([]) 
plt.show() 
+0

请创建[MCVE。这两个情节之间的区别是什么,你不满意? – ImportanceOfBeingErnest

+0

我很抱歉粘贴这么多,我是Python的noob,它花了我3天来绘制这个指标。这两块地块之间的区别在于我的地块没有在底部显示绿色或红色的酒吧。 [图片](http://imgur.com/a/HeFvf) – user3371372

+0

我敢肯定,将这些代码拼凑在一起是很多工作。然而,我们在这里需要能够帮助你的是一个独立的例子。这是一个示例代码,任何人都可以运行,并且包含最少量的代码来重现问题。这通常可以通过发明一些数据数组并删除代码中的所有部分来完成,这对于仍然看到有问题的部分是不必要的。 – ImportanceOfBeingErnest

回答

0

我已经修复了我自己的问题。 bodyCover计算错误。

#Body Calculations 
bodyLow = np.where(up>down, up, down).clip(max=0) 
bodyHigh = np.where(Oo<down, up, down).clip(min=0) 
bodyCover = bodyLow + bodyHigh 

enter image description here