Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/Drakkar-Software/OctoBot-Script
Quant framework by OctoBot
https://github.com/Drakkar-Software/OctoBot-Script
ai backtesting cryptocurrency deep-learning exchange machine-learning ml octobot python quant reinforcement-learning technical-analysis
Last synced: 3 months ago
JSON representation
Quant framework by OctoBot
- Host: GitHub
- URL: https://github.com/Drakkar-Software/OctoBot-Script
- Owner: Drakkar-Software
- License: gpl-3.0
- Created: 2022-11-27T15:25:21.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2024-07-10T16:12:41.000Z (4 months ago)
- Last Synced: 2024-07-11T18:40:30.634Z (4 months ago)
- Topics: ai, backtesting, cryptocurrency, deep-learning, exchange, machine-learning, ml, octobot, python, quant, reinforcement-learning, technical-analysis
- Language: Python
- Homepage: https://www.octobot.cloud/guides/octobot-script?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=octobot_script_project_description_link
- Size: 610 KB
- Stars: 17
- Watchers: 4
- Forks: 12
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-quant - OctoBot Script - A quant framework to create cryptocurrencies strategies - from backtesting to optimization to livetrading. (Python / Trading & Backtesting)
README
# OctoBot-Script [0.0.18](https://github.com/Drakkar-Software/OctoBot-Script/tree/master/CHANGELOG.md)
[![PyPI](https://img.shields.io/pypi/v/OctoBot-Script.svg?logo=pypi)](https://pypi.python.org/pypi/octobot-script/)
[![Downloads](https://static.pepy.tech/badge/OctoBot-Script/month)](https://pepy.tech/project/octobot-script)
[![Dockerhub](https://img.shields.io/docker/pulls/drakkarsoftware/OctoBot-Script.svg?logo=docker)](https://hub.docker.com/r/drakkarsoftware/octobot-script)
[![Github-Action-CI](https://github.com/Drakkar-Software/OctoBot-Script/actions/workflows/main.yml/badge.svg)](https://github.com/Drakkar-Software/OctoBot-Script/actions/workflows/main.yml)## OctoBot-Script Community
[![Telegram Chat](https://img.shields.io/badge/telegram-chat-green.svg?logo=telegram&label=Telegram)](https://t.me/+366CLLZ2NC0xMjFk)
[![Discord](https://img.shields.io/discord/530629985661222912.svg?logo=discord&label=Discord)](https://discord.com/invite/vHkcb8W)
[![Twitter](https://img.shields.io/twitter/follow/DrakkarsOctobot.svg?label=twitter&style=social)](https://twitter.com/DrakkarsOctoBot)## OctoBot Script is the Quant framework by OctoBot
> OctoBot Script is in alpha version
Documentation available at [octobot.cloud/en/guides/octobot-script](https://www.octobot.cloud/en/guides/octobot-script?utm_source=octobot&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=octobot_script_readme)
## Install OctoBot Script from pip
> OctoBot Script requires **Python 3.10**
``` {.sourceCode .bash}
python3 -m pip install OctoBot wheel appdirs==1.4.4
python3 -m pip install octobot-script
```## Example of a backtesting script
### Script
``` python
import asyncio
import tulipy # Can be any TA library.
import octobot_script as obsasync def rsi_test():
async def strategy(ctx):
# Will be called at each candle.
if run_data["entries"] is None:
# Compute entries only once per backtest.
closes = await obs.Close(ctx, max_history=True)
times = await obs.Time(ctx, max_history=True, use_close_time=True)
rsi_v = tulipy.rsi(closes, period=ctx.tentacle.trading_config["period"])
delta = len(closes) - len(rsi_v)
# Populate entries with timestamps of candles where RSI is
# bellow the "rsi_value_buy_threshold" configuration.
run_data["entries"] = {
times[index + delta]
for index, rsi_val in enumerate(rsi_v)
if rsi_val < ctx.tentacle.trading_config["rsi_value_buy_threshold"]
}
await obs.plot_indicator(ctx, "RSI", times[delta:], rsi_v, run_data["entries"])
if obs.current_live_time(ctx) in run_data["entries"]:
# Uses pre-computed entries times to enter positions when relevant.
# Also, instantly set take profits and stop losses.
# Position exists could also be set separately.
await obs.market(ctx, "buy", amount="10%", stop_loss_offset="-15%", take_profit_offset="25%")# Configuration that will be passed to each run.
# It will be accessible under "ctx.tentacle.trading_config".
config = {
"period": 10,
"rsi_value_buy_threshold": 28,
}# Read and cache candle data to make subsequent backtesting runs faster.
data = await obs.get_data("BTC/USDT", "1d", start_timestamp=1505606400)
run_data = {
"entries": None,
}
# Run a backtest using the above data, strategy and configuration.
res = await obs.run(data, strategy, config)
print(res.describe())
# Generate and open report including indicators plots
await res.plot(show=True)
# Stop data to release local databases.
await data.stop()# Call the execution of the script inside "asyncio.run" as
# OctoBot-Script runs using the python asyncio framework.
asyncio.run(rsi_test())
```### Generated report
![report-p1](https://raw.githubusercontent.com/Drakkar-Software/OctoBot-Script/assets/images/report_1.jpg)### Join the community
We recently created a telegram channel dedicated to OctoBot Script.[![Telegram News](https://img.shields.io/static/v1?label=Telegram%20chat&message=Join&logo=telegram&&color=007bff&style=for-the-badge)](https://t.me/+366CLLZ2NC0xMjFk)