produvia / kryptos

Kryptos AI is a virtual investment assistant that manages your cryptocurrency portfolio
http://twitter.com/kryptos_ai
MIT License
48 stars 8 forks source link

ValueError: view limit minimum -0.001 is less than 1 and is an invalid Matplotlib date value. This often happens if you pass a non-datetime value to an axis that has datetime units #51

Open slavakurilyak opened 6 years ago

slavakurilyak commented 6 years ago

Running $ strat -f examples/api_example.json with the following parameters (START: 2015-03-03, END: 2015-03-09) gives:

{
   "trading": {
      "EXCHANGE": "bitfinex",
      "ASSET": "btc_usd",
      "DATA_FREQ": "daily",
      "HISTORY_FREQ": "1d",
      "CAPITAL_BASE": 10000,
      "BASE_CURRENCY": "usd",
      "START": "2015-03-03",
      "END": "2015-03-09"
   },
   "datasets": [
      {
         "name": "quandl",
         "columns": [
            "MKTCP"
         ],
         "indicators": []
      },
      {
         "name": "google",
         "columns": [
            "bitcoin futures"
         ],
         "indicators": [
            {
               "name": "RELCHANGE",
               "symbol": "bitcoin futures",
               "dataset": "google",
               "label": "RELCHANGE",
               "params": {}
            }
         ]
      }
   ],
   "indicators": [
      {
         "name": "BBANDS",
         "symbol": "btc_usd",
         "dataset": null,
         "label": "BBANDS",
         "params": {
            "matype": 3
         }
      },
      {
         "name": "STOCH",
         "symbol": "btc_usd",
         "dataset": null,
         "label": "STOCH",
         "params": {
            "fastk_period": 5,
            "slowk_period": 3,
            "slowk_matype": 0,
            "slowd_matype": 1
         }
      }
   ],
   "signals": {}
}
[2018-04-07 21:23:25.053870] WARNING: run_algo: Catalyst is currently in ALPHA. It is going through rapid development and it is subject to errors. Please use carefully. We encourage you to report any issue on GitHub: https://github.com/enigmampc/catalyst/issues
[2018-04-07 21:23:25.054182] INFO: run_algo: Catalyst version 0.5.8
[2018-04-07 21:23:28.054689] INFO: run_algo: running algo in backtest mode
[2018-04-07 21:23:28.764442] INFO: exchange_algorithm: initialized trading algorithm in backtest mode
[2018-04-07 21:23:28.878547] INFO: google: Fetching trend data for 2015-03-03 2015-03-09
[2018-04-07 21:23:30.877815] ERROR: google: Retrieved 7 days of trend data
[2018-04-07 21:23:30.879948] INFO: Platform: Initializing strategy
[2018-04-07 21:23:30.880067] INFO: Strategy: Initilized Strategy
[2018-04-07 21:23:31.157536] INFO: Performance: Simulated 7 trading days out of 7.
[2018-04-07 21:23:31.157697] INFO: Performance: first open: 2015-03-03 00:00:00+00:00
[2018-04-07 21:23:31.157809] INFO: Performance: last close: 2015-03-09 23:59:00+00:00
/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/cbook/deprecation.py:107: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance.  In a future version, a new instance will always be created and returned.  Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.
  warnings.warn(message, mplDeprecation, stacklevel=1)
No handles with labels found to put in legend.
[2018-04-07 21:23:31.553062] INFO: Platform: Analyzing strategy
Exception in Tkinter callback
Traceback (most recent call last):
  File "/Users/skurilyak/.pyenv/versions/3.6.4/lib/python3.6/tkinter/__init__.py", line 1699, in __call__
    return self.func(*args)
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/backends/_backend_tk.py", line 227, in resize
    self.draw()
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/backends/backend_tkagg.py", line 12, in draw
    super(FigureCanvasTkAgg, self).draw()
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py", line 433, in draw
    self.figure.draw(self.renderer)
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/artist.py", line 55, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/figure.py", line 1475, in draw
    renderer, self, artists, self.suppressComposite)
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/image.py", line 141, in _draw_list_compositing_images
    a.draw(renderer)
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/artist.py", line 55, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/axes/_base.py", line 2607, in draw
    mimage._draw_list_compositing_images(renderer, self, artists)
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/image.py", line 141, in _draw_list_compositing_images
    a.draw(renderer)
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/artist.py", line 55, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/axis.py", line 1190, in draw
    ticks_to_draw = self._update_ticks(renderer)
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/axis.py", line 1028, in _update_ticks
    tick_tups = list(self.iter_ticks())  # iter_ticks calls the locator
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/axis.py", line 971, in iter_ticks
    majorLocs = self.major.locator()
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/dates.py", line 1249, in __call__
    self.refresh()
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/dates.py", line 1269, in refresh
    dmin, dmax = self.viewlim_to_dt()
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/dates.py", line 1026, in viewlim_to_dt
    .format(vmin))
ValueError: view limit minimum -0.001 is less than 1 and is an invalid Matplotlib date value. This often happens if you pass a non-datetime value to an axis that has datetime units
Exception in Tkinter callback
Traceback (most recent call last):
  File "/Users/skurilyak/.pyenv/versions/3.6.4/lib/python3.6/tkinter/__init__.py", line 1699, in __call__
    return self.func(*args)
  File "/Users/skurilyak/.pyenv/versions/3.6.4/lib/python3.6/tkinter/__init__.py", line 745, in callit
    func(*args)
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/backends/_backend_tk.py", line 310, in idle_draw
    self.draw()
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/backends/backend_tkagg.py", line 12, in draw
    super(FigureCanvasTkAgg, self).draw()
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py", line 433, in draw
    self.figure.draw(self.renderer)
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/artist.py", line 55, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/figure.py", line 1475, in draw
    renderer, self, artists, self.suppressComposite)
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/image.py", line 141, in _draw_list_compositing_images
    a.draw(renderer)
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/artist.py", line 55, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/axes/_base.py", line 2607, in draw
    mimage._draw_list_compositing_images(renderer, self, artists)
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/image.py", line 141, in _draw_list_compositing_images
    a.draw(renderer)
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/artist.py", line 55, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/axis.py", line 1190, in draw
    ticks_to_draw = self._update_ticks(renderer)
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/axis.py", line 1028, in _update_ticks
    tick_tups = list(self.iter_ticks())  # iter_ticks calls the locator
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/axis.py", line 971, in iter_ticks
    majorLocs = self.major.locator()
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/dates.py", line 1249, in __call__
    self.refresh()
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/dates.py", line 1269, in refresh
    dmin, dmax = self.viewlim_to_dt()
  File "/Users/skurilyak/Envs/cryptocurrency-trading-platform-umgmcl4V/lib/python3.6/site-packages/matplotlib/dates.py", line 1026, in viewlim_to_dt
    .format(vmin))
ValueError: view limit minimum -0.001 is less than 1 and is an invalid Matplotlib date value. This often happens if you pass a non-datetime value to an axis that has datetime units

I think this issue is caused by using a small time span (2 to 6 days), which is limited by Google Trends library.

treethought commented 6 years ago

I agree this is likely due to the short timespan, but I think the error occurs in the RELCHANGE Indicator logic