mplfinance icon indicating copy to clipboard operation
mplfinance copied to clipboard

How to add Horizontal Line in make_addplot? make_addplot(rsi,panel='lower',color='g',hlines=[20,80])

Open toksis opened this issue 4 years ago • 8 comments

I have this code.

 apds = [mpf.make_addplot(buy_signal,scatter=True,markersize=100,marker='^'),
                    mpf.make_addplot(sell_signal,scatter=True,markersize=100,marker='v'),
                    mpf.make_addplot(close_signal,scatter=True,markersize=100,marker='o'),
                    mpf.make_addplot(rsi,panel='lower',color='g',hlines=[20,80])         

  mpf.plot(self.df,addplot=apds,figscale=2,volume=False,type = type,
                 title= str(self.info)
                 )

I want to put a horizontal line for my RSI. But there is a kwargs error which says hline is not found.

toksis avatar May 20 '20 07:05 toksis

hlines is a kwarg to mpf.plot() ( not to mplf.make_addplot())

Presently all of the lines kwargs (hlines,vlines, tlines, alines) assume the main panel axes.

I was thinking to add a panel kwarg to the lines dict, rather than have the kwarg available to addplot.

I will come up with something, and include it in my next pull request, which I hope to make by the end of this week.

In the meantime you can accomplish a horizontal line on the lower panel by creating a sequence of data points all the same value, and passing that as the data for a different make_addplot() call.

DanielGoldfarb avatar May 20 '20 08:05 DanielGoldfarb

oh nice! Thanks for the advice ill do it.

toksis avatar May 20 '20 10:05 toksis

Done it! woot!

     apds = [mpf.make_addplot(buy_signal,scatter=True,markersize=100,marker='^'),
                    mpf.make_addplot(sell_signal,scatter=True,markersize=100,marker='v'),
                    mpf.make_addplot(close_signal,scatter=True,markersize=100,marker='o'),
                    mpf.make_addplot(line80,panel='lower',color='r'),
                    mpf.make_addplot(line20,panel='lower',color='g'), 
                    mpf.make_addplot(rsi,panel='lower',color='g')                    ]
            

image

toksis avatar May 20 '20 11:05 toksis

Nice chart! Thanks for sharing!

DanielGoldfarb avatar May 20 '20 11:05 DanielGoldfarb

@toksis, You should use secondary_y. Your RSI plot and lines have a different axis.

 apds = [mpf.make_addplot(buy_signal,scatter=True,markersize=100,marker='^'),
              mpf.make_addplot(sell_signal,scatter=True,markersize=100,marker='v'),
              mpf.make_addplot(close_signal,scatter=True,markersize=100,marker='o'),
              mpf.make_addplot(line80,panel='lower',color='r',secondary_y=False),
              mpf.make_addplot(line20,panel='lower',color='g',secondary_y=False), 
              mpf.make_addplot(rsi,panel='lower',color='g',secondary_y=False)
   ]
            

rohanchopra avatar May 21 '20 17:05 rohanchopra

Perfect! I thought its a limitation

image

toksis avatar May 21 '20 23:05 toksis

Nice chart! Thanks for sharing!

Done it! woot!

     apds = [mpf.make_addplot(buy_signal,scatter=True,markersize=100,marker='^'),
                    mpf.make_addplot(sell_signal,scatter=True,markersize=100,marker='v'),
                    mpf.make_addplot(close_signal,scatter=True,markersize=100,marker='o'),
                    mpf.make_addplot(line80,panel='lower',color='r'),
                    mpf.make_addplot(line20,panel='lower',color='g'), 
                    mpf.make_addplot(rsi,panel='lower',color='g')                    ]
            

image

I have a few questions on this:

  1. is line80 and line20 a series or a single int/float value?
  2. you have "panel='lower'", from documentation i have been reading, shouldn't that be an integer value indicating the index of the panel?
  3. you have "scatter = True", should that be now type = "Scatter"

I prefer this method of adding horizontal or vertical lines as it's line with keeping all plots as some sort of series..as opposed to adding an argument to the plot or add_plot functions. It also helps when trying to write generic code for plotting any type of series.

dss010101 avatar May 20 '21 03:05 dss010101

line80/line20 => a series of y values

msampathkumar avatar Jun 26 '21 16:06 msampathkumar