# What is Noba
## Noba means not only backtrader :)
**You can visit noba documentation for more information: [EN(coming soon)](#) | [中文](https://aui.photos/noba-doc/zh/)**
The core of Noba is an `ioc container`, through which you can create `BB` service, which based on [Backtrader](https://www.backtrader.com/)*(one quantitative backtest system)* and [Bokeh](https://bokeh.org/) *(use bokeh as the backend, Backtrader can get richer plot effects)* *\* BB service would like to thank [backtrader_plotting](https://github.com/verybadsoldier/backtrader_plotting) and [btplotting](https://github.com/happydasch/btplotting) for providing the main code for using bokeh as the backend for the backtrader*
```python
from noba import core
bt = core.make('bb')
```
Of course, you can also create your own services based container. Combined with **Pipeline System** and **Event System** (which can be created directly through containers), noba can enable your quantitative projects to work in a more engineering methods
```python
from noba import core
pipline = core.make('pipeline')
cleaned_data = pipline.via("handle").send(raw_data).through([ChangeDataType, RepeatRowData, ExceptionData, MissingData]).then(lambda raw_data:raw_data)
```
```python
from noba import core
event = core.make('event')
db_event = event.hub(['read_database_complete'])
db_event.watch('read_database_complete', lambda data:..., always=True)
...
db_event.fire('read_database_complete')
```
More importantly, Noba can create database service objects (dber) through containers. This is a **Database Abstraction Layer**. Through configuration files(one json file) and unified one set of APIs, you can operate the most common databases
```python
from noba import core
dber = core.make('db')
stocks = db.table('daily').where('Open==3578.73').or_where('High==3652.46').set_index('Date').get_except('OpenInterest')
```
# Getting Started
* Python >= 3.6 is required.
* Suggest using conda to manage virtual environments
## Installation
```bash
pip install noba
# or
pip install git+https://github.com/iniself/noba
```
## Init noba project
```bash
mkdir your_noba_project
cd your_noba_project
noba init
```
## Preparation
Here you can do some project configuration and write your own service provider, and so on. Please refer to the **NOBA documentation** for details
## Write strategy
```bash
vim main.py
```
Only give **Live Mode** example, about **Normal Mode** and **Optstrategy Mode** pls refer to **NOBA documentation**
* Add to cerebro as an analyzer **(Live Mode)**:
```python
from noba import core
...
...
bt = core.make('bb')
cerebro = bt.Cerebro()
cerebro.addstrategy(MyStrategy)
cerebro.adddata(LiveDataStream()) # Note! Data is must Live Data
cerebro.addanalyzer(bt.analyzers.Live, force_plot_legend=True, autostart=True)
cerebro.run()
# cerebro.plot() # do not run this line unless your data is not real-time
```
* If you need to change the default port or share the plotting to public:
```python
cerebro.addanalyzer(bt.analyzers.Live, address="localhost", port=8889)
```
* Note! In Jupyter you can plut to a single browser tab with iplot=False:
```python
cerebro.plot(plot, iplot=False)
```
# Demos
<https://iniself.github.io/noba/>
# Contact us
Telegram Channel: [Aui_Say](https://t.me/aui_say)
Discord Server: [Aui and Friends](https://discord.gg/dhp8uzKSfR)
# Sponsoring
If you want to support the development of noba, consider to support this project.
* ETH: 0x0275779f70179748C6fCe1Fe5D7638DfA7e3F986
Raw data
{
"_id": null,
"home_page": "https://github.com/iniself/noba",
"name": "noba",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": "",
"keywords": "trading,development,finance,quant,backtrader,Bokeh",
"author": "Metaer",
"author_email": "",
"download_url": "https://files.pythonhosted.org/packages/bb/45/171bdfaa1fae3cf40b4038884f4551d5c3aaef8ad05732b3b735f2413cab/noba-1.1.7.tar.gz",
"platform": null,
"description": "# What is Noba\n## Noba means not only backtrader :)\n\n**You can visit noba documentation for more information: [EN(coming soon)](#) | [\u4e2d\u6587](https://aui.photos/noba-doc/zh/)**\n\nThe core of Noba is an `ioc container`, through which you can create `BB` service, which based on [Backtrader](https://www.backtrader.com/)*(one quantitative backtest system)* and [Bokeh](https://bokeh.org/) *(use bokeh as the backend, Backtrader can get richer plot effects)* *\\* BB service would like to thank [backtrader_plotting](https://github.com/verybadsoldier/backtrader_plotting) and [btplotting](https://github.com/happydasch/btplotting) for providing the main code for using bokeh as the backend for the backtrader*\n```python\nfrom noba import core\nbt = core.make('bb')\n```\n\nOf course, you can also create your own services based container. Combined with **Pipeline System** and **Event System** (which can be created directly through containers), noba can enable your quantitative projects to work in a more engineering methods\n```python\nfrom noba import core\npipline = core.make('pipeline')\ncleaned_data = pipline.via(\"handle\").send(raw_data).through([ChangeDataType, RepeatRowData, ExceptionData, MissingData]).then(lambda raw_data:raw_data)\n```\n\n```python\nfrom noba import core\nevent = core.make('event')\ndb_event = event.hub(['read_database_complete'])\ndb_event.watch('read_database_complete', lambda data:..., always=True)\n...\ndb_event.fire('read_database_complete')\n```\n\nMore importantly, Noba can create database service objects (dber) through containers. This is a **Database Abstraction Layer**. Through configuration files(one json file) and unified one set of APIs, you can operate the most common databases\n\n```python\nfrom noba import core\ndber = core.make('db')\nstocks = db.table('daily').where('Open==3578.73').or_where('High==3652.46').set_index('Date').get_except('OpenInterest')\n```\n\n# Getting Started\n* Python >= 3.6 is required.\n* Suggest using conda to manage virtual environments\n\n\n## Installation\n\n```bash\npip install noba\n# or\npip install git+https://github.com/iniself/noba\n```\n\n\n## Init noba project\n\n```bash\nmkdir your_noba_project\ncd your_noba_project\nnoba init\n```\n\n## Preparation\nHere you can do some project configuration and write your own service provider, and so on. Please refer to the **NOBA documentation** for details\n\n## Write strategy\n```bash\nvim main.py\n```\n\nOnly give **Live Mode** example, about **Normal Mode** and **Optstrategy Mode** pls refer to **NOBA documentation**\n* Add to cerebro as an analyzer **(Live Mode)**:\n ```python\n from noba import core\n ...\n ...\n bt = core.make('bb')\n cerebro = bt.Cerebro()\n cerebro.addstrategy(MyStrategy)\n cerebro.adddata(LiveDataStream()) # Note! Data is must Live Data\n cerebro.addanalyzer(bt.analyzers.Live, force_plot_legend=True, autostart=True)\n cerebro.run()\n # cerebro.plot() # do not run this line unless your data is not real-time\n ```\n\n* If you need to change the default port or share the plotting to public:\n\n ```python\n cerebro.addanalyzer(bt.analyzers.Live, address=\"localhost\", port=8889)\n ```\n\n* Note! In Jupyter you can plut to a single browser tab with iplot=False:\n\n ```python\n cerebro.plot(plot, iplot=False)\n ```\n\n# Demos\n\n<https://iniself.github.io/noba/>\n\n# Contact us\nTelegram Channel: [Aui_Say](https://t.me/aui_say)\nDiscord Server: [Aui and Friends](https://discord.gg/dhp8uzKSfR)\n\n\n# Sponsoring\n\nIf you want to support the development of noba, consider to support this project.\n\n* ETH: 0x0275779f70179748C6fCe1Fe5D7638DfA7e3F986\n\n\n",
"bugtrack_url": null,
"license": "GNU General Public License v3 or later (GPLv3+)",
"summary": "Noba is not only Backtrader",
"version": "1.1.7",
"project_urls": {
"Bug Tracker": "https://github.com/iniself/noba/issues",
"Demos": "https://github.com/iniself/noba/tree/gh-pages",
"Documentation": "https://github.com/iniself/noba",
"Homepage": "https://github.com/iniself/noba",
"Source Code": "https://github.com/iniself/noba"
},
"split_keywords": [
"trading",
"development",
"finance",
"quant",
"backtrader",
"bokeh"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "0aff16f5431ea67525728c0a94871da0f825305a9796ccc1f439fd1125c8f658",
"md5": "6dce607f12c6d043f1e2294e47e28797",
"sha256": "8e8a469d6c6bc43a683029be149244d79c88ee63ed6e56abedf27c15aeba360c"
},
"downloads": -1,
"filename": "noba-1.1.7-py3-none-any.whl",
"has_sig": false,
"md5_digest": "6dce607f12c6d043f1e2294e47e28797",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 513866,
"upload_time": "2023-06-04T01:34:03",
"upload_time_iso_8601": "2023-06-04T01:34:03.931000Z",
"url": "https://files.pythonhosted.org/packages/0a/ff/16f5431ea67525728c0a94871da0f825305a9796ccc1f439fd1125c8f658/noba-1.1.7-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "bb45171bdfaa1fae3cf40b4038884f4551d5c3aaef8ad05732b3b735f2413cab",
"md5": "fee7dfa4650f7c8289452d3b4d985e4e",
"sha256": "4e4d5d5339b8f93133a8f76dc6108b443a63f4bed0502296b11f0f2f43bda9f3"
},
"downloads": -1,
"filename": "noba-1.1.7.tar.gz",
"has_sig": false,
"md5_digest": "fee7dfa4650f7c8289452d3b4d985e4e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 434104,
"upload_time": "2023-06-04T01:34:06",
"upload_time_iso_8601": "2023-06-04T01:34:06.642779Z",
"url": "https://files.pythonhosted.org/packages/bb/45/171bdfaa1fae3cf40b4038884f4551d5c3aaef8ad05732b3b735f2413cab/noba-1.1.7.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-06-04 01:34:06",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "iniself",
"github_project": "noba",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [],
"tox": true,
"lcname": "noba"
}