-
Notifications
You must be signed in to change notification settings - Fork 669
Description
Hi!
First of all, thank you for such useful library for plotting candles!
I'm trying to process a scenario, when addplot
and alines
is empty (at the present moment buys
and sells
lists have only one point in format ['date','price']
, but it doesn't matter for question). So my function, that builds a graph is:
def mplfplotcoin(df,title, buys=[], sells=[], rsi=False): adp = [] # adding trades if buys: buysdf = pd.DataFrame([buys],columns=['Date', 'OpenPrice']) # when buys list consists of one point buysdf = df.merge(buysdf,on='Date',how='left')['OpenPrice'] # left join addbuys = mpf.make_addplot(buysdf,scatter=True,markersize=300,marker=6,color='forestgreen',alpha=0.75) # buy markers adp.append(addbuys) if sells: sellsdf = pd.DataFrame([sells], columns=['Date', 'ClosePrice']) # when sells list consists of one point sellsdf = df.merge(sellsdf,on='Date',how='left')['ClosePrice'] # left join addsells = mpf.make_addplot(sellsdf,scatter=True,markersize=300,marker=7,color='firebrick',alpha=0.75) # sell markers adp.append(addsells) # adding line between trades https://github.com/matplotlib/mplfinance/blob/master/examples/using_lines.ipynb if len(buys) == len(sells) and buys: # I know it's awful))) I'll change it later tradeline = dict(alines=[tuple(buys),tuple(sells)],colors='lightslategray',linestyle='--',linewidths=2,alpha=0.5) else: tradeline = None # adding rsi if rsi: addrsi = mpf.make_addplot((df['rsi']),panel=1,type='line',color='orange',width=1,ylabel='rsi',ylim=(-5,105)) adp.append(addrsi) # checking adp list if not adp: adp = None # drawing mpf.plot(df, type='candle', style='tradingview', volume=True, show_nontrading=True, addplot=adp, alines=tradeline, figscale=1.3, title=title, ylabel='USDT')
so, lines else: tradeline = None
and if not adp: adp = None
are like this, because I found it in your library file plottin.py
:
#211 line: 'addplot' : { 'Default' : None, 'Description' : 'addplot object or sequence of addplot objects (from `mpf.make_addplot()`)', 'Validator' : lambda value: isinstance(value,dict) or (isinstance(value,list) and all([isinstance(d,dict) for d in value])) }, # 267 line: 'alines' : { 'Default' : None, 'Description' : 'Draw one or more ARBITRARY LINES anywhere on the plot, by'+ ' specifying a sequence of two or more date/price pairs, or by'+ ' specifying a sequence of sequences of two or more date/price pairs.'+ ' May also be a dict with key `alines` (as date/price pairs described above),'+ ' plus one or more of the following keys:'+ ' `colors`, `linestyle`, `linewidths`, `alpha`.',
however I get errors for mpf.plot(..., addplot=adp, alines=tradeline, ...)
:
TypeError: kwarg "addplot" validator returned False for value: "None" 'Validator' : lambda value: isinstance(value,dict) or (isinstance(value,list) and all([isinstance(d,dict) for d in value])) },
and the same for alines
parameter:
TypeError: kwarg "alines" validator returned False for value: "None" 'Validator' : lambda value: _alines_validator(value) },
If I go to plotting.py
, I can't understand why error is rised, because there is only one if
about addplot is None
:
# 739 line addplot = config['addplot'] if addplot is not None and ptype not in VALID_PMOVE_TYPES: ... # and then 816 line is new condition: # fill_between is NOT supported for external_axes_mode # (caller can easily call ax.fill_between() themselves). if config['fill_between'] is not None and not external_axes_mode: ...
Ok, I tried to define ptype
in my code:
# checking adp list if not adp: adp = [mpf.make_addplot(None,type='line')]
But again error:
raise TypeError('Wrong type for data, in make_addplot()') TypeError: Wrong type for data, in make_addplot()
Please, help me to understand how to draw plot if addplot
and alines
(and other kwards) are empty?