Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
This extension provides a charting library for OpenBB Platform.
The library includes:
[!NOTE] The charting library is an
OBBject
extension which means you'll have the functionality it exposes on every command result.
To install the extension, run the following command in this folder:
pip install openbb-charting
The PyWry dependency handles the display of interactive charts and tables in a separate window. It is installed automatically with the OpenBB Charting extension.
When using Linux distributions, the PyWry dependency requires certain dependencies to be installed first.
Debian-based / Ubuntu / Mint:
sudo apt install libwebkit2gtk-4.0-dev
Arch Linux / Manjaro:
sudo pacman -S webkit2gtk
Fedora:
sudo dnf install gtk3-devel webkit2gtk3-devel
To use the extension, run any of the OpenBB Platform endpoints with the chart
argument set to True
.
Here's an example of how it would look like in a python interface:
from openbb import obb
equity_data = obb.equity.price.historical(symbol="TSLA", chart=True)
This results in a OBBject
object containing a chart
attribute, which contains Plotly JSON data.
In order to display the chart, you need to call the show()
method:
equity_data.show()
Note: The
show()
method currently works either in a Jupyter Notebook or in a standalone python script with a PyWry based backend properly initialized.
Alternatively, you can use the fact that the openbb-charting
is an OBBject
extension and use its available methods.
from openbb import obb
res = obb.equity.price.historical("AAPL")
res.charting.show()
The above code will produce the same effect as the previous example.
Not all the endpoints are currently supported by the charting extension. To discover which endpoints are supported, you can run the following command:
from openbb_charting import Charting
Charting.functions()
to_chart
methodThe to_chart
function should be taken as an advanced feature, as it requires the user to have a good understanding of the charting extension and the OpenBBFigure
class.
The user can use any number of **kwargs
that will be passed to the PlotlyTA
class in order to build custom visualizations with custom indicators and similar.
Note that, this method will only work to some limited extent with data that is not standardized. Also, it is currently designed only to handle time series (OHLCV) data.
Example usage:
Plotting a time series with TA indicators
from openbb import obb
res = obb.equity.price.historical("AAPL")
indicators = dict(
sma=dict(length=[20,30,50]),
adx=dict(length=14),
rsi=dict(length=14),
macd=dict(fast=12, slow=26, signal=9),
bbands=dict(length=20, std=2),
stoch=dict(length=14),
ema=dict(length=[20,30,50]),
)
res.charting.to_chart(**{"indicators": indicators})
Get all the available indicators
# if you have a command result already
res.charting.indicators
# or if you want to know in standalone fashion
from openbb_charting import Charting
Charting.indicators()
To add a visualization to an existing command, you'll need to add a poetry
plugin to your pyproject.toml
file. The syntax should be the following:
[tool.poetry.plugins."openbb_charting_extension"]
my_extension = "openbb_my_extension.my_extension_views:MyExtensionViews"
Where the openbb_charting_extension
is mandatory, otherwise the charting extension won't be able to find the visualization.
And the suggested structure for the my_extension_views
module is the following:
"""Views for MyExtension."""
from typing import Any, Dict, Tuple
from openbb_charting.charts.price_historical import price_historical
from openbb_charting.core.openbb_figure import OpenBBFigure
class MyExtensionViews:
"""MyExtension Views."""
@staticmethod
def my_extension_price_historical(
**kwargs,
) -> Tuple[OpenBBFigure, Dict[str, Any]]:
"""MyExtension Price Historical Chart."""
return price_historical(**kwargs)
Note that
my_extension_views
lives under theopenbb_my_extension
package.
Afterwards, you'll need to add the visualization to your new MyExtensionViews
class. The convention to match the endpoint with the respective charting function is the following:
/equity/price/historical
-> equity_price_historical
/technical/ema
-> technical_ema
/my_extension/price_historical
-> my_extension_price_historical
When you spot the charting function on the charting router file, you can add the visualization to it.
The implementation should leverage the already existing classes and methods to do so, namely:
OpenBBFigure
PlotlyTA
Note that the return of each charting function should respect the already defined return types: Tuple[OpenBBFigure, Dict[str, Any]]
.
The returned tuple contains a OpenBBFigure
that is an interactive plotly figure which can be used in a Python interpreter, and a Dict[str, Any]
that contains the raw data leveraged by the API.
After you're done implementing the charting function, you can use either the Python interface or the API to get the chart. To do so, you'll only need to set the already available chart
argument to True
.
Or accessing the charting
attribute of the OBBject
object: my_obbject.charting.show()
.
FAQs
Charting extension for OpenBB
We found that openbb-charting demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.