Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

mplfinance default values rise error in plot function #681

Open
Labels
questionFurther information is requested
@rain-philosophy

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?

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

        AltStyle によって変換されたページ (->オリジナル) /