<div align="center">
<br>
<p align="center">
<img src="assets/jesse-logo.png" alt="Jesse" height="72" />
</p>
<p align="center">
Algo-trading was π΅βπ«, we made it π€©
</p>
</div>
# Jesse
[](https://pypi.org/project/jesse)
[](https://pepy.tech/project/jesse)
[](https://hub.docker.com/r/salehmir/jesse)
[](https://github.com/jesse-ai/jesse)
[](https://codecov.io/gh/jesse-ai/jesse)
---
Jesse is an advanced crypto trading framework that aims to **simplify** **researching** and defining **YOUR OWN trading strategies** for backtesting, optimizing, and live trading.
## What is Jesse?
Watch this video to get a quick overview of Jesse:
[](https://www.youtube.com/watch?v=0EqN3OOqeJM)
## Why Jesse?
In short, Jesse is more **accurate** than other solutions, and way more **simple**.
In fact, it is so simple that in case you already know Python, you can get started today, in **matter of minutes**, instead of **weeks and months**.
## Key Features
- π **Simple Syntax**: Define both simple and advanced trading strategies with the simplest syntax in the fastest time.
- π **Comprehensive Indicator Library**: Access a complete library of technical indicators with easy-to-use syntax.
- π **Smart Ordering**: Supports market, limit, and stop orders, automatically choosing the best one for you.
- β° **Multiple Timeframes and Symbols**: Backtest and livetrade multiple timeframes and symbols simultaneously without look-ahead bias.
- π **Self-Hosted and Privacy-First**: Designed with your privacy in mind, fully self-hosted to ensure your trading strategies and data remain secure.
- π‘οΈ **Risk Management**: Built-in helper functions for robust risk management.
- π **Metrics System**: A comprehensive metrics system to evaluate your trading strategy's performance.
- π **Debug Mode**: Observe your strategy in action with a detailed debug mode.
- π§ **Optimize Mode**: Fine-tune your strategies using AI, without needing a technical background.
- π **Leveraged and Short-Selling**: First-class support for leveraged trading and short-selling.
- π **Partial Fills**: Supports entering and exiting positions in multiple orders, allowing for greater flexibility.
- π **Advanced Alerts**: Create real-time alerts within your strategies for effective monitoring.
- π€ **JesseGPT**: Jesse has its own GPT, JesseGPT, that can help you write strategies, optimize them, debug them, and much more.
- π§ **Built-in Code Editor**: Write, edit, and debug your strategies with a built-in code editor.
- πΊ **Youtube Channel**: Jesse has a Youtube channel with screencast tutorials that go through example strategies step by step.
## Example Strategy
```py
class SMACrossover(Strategy):
@property
def slow_sma(self):
return ta.sma(self.candles, 200)
@property
def fast_sma(self):
return ta.sma(self.candles, 50)
def should_long(self) -> bool:
# Fast SMA above Slow SMA
return self.fast_sma > self.slow_sma
def should_short(self) -> bool:
# Fast SMA below Slow SMA
return self.fast_sma < self.slow_sma
def go_long(self):
# Open long position and use entire balance to buy
qty = utils.size_to_qty(self.balance, self.price, fee_rate=self.fee_rate)
self.buy = qty, self.price
def go_short(self):
# Open short position and use entire balance to sell
qty = utils.size_to_qty(self.balance, self.price, fee_rate=self.fee_rate)
self.sell = qty, self.price
def update_position(self):
# If there exist long position, but the signal shows Death Cross, then close the position, and vice versa.
if self.is_long and self.fast_sma < self.slow_sma:
self.liquidate()
if self.is_short and self.fast_sma > self.slow_sma:
self.liquidate()
```
## Getting Started
Head over to the "getting started" section of the [documentation](https://docs.jesse.trade/docs/getting-started). The
documentation is **short yet very informative**.
## Resources
- [β‘οΈ Website](https://jesse.trade)
- [π Documentation](https://docs.jesse.trade)
- [π₯ Youtube channel (screencast tutorials)](https://jesse.trade/youtube)
- [π Help center](https://jesse.trade/help)
- [π¬ Discord community](https://jesse.trade/discord)
- [π€ JesseGPT](https://jesse.trade/gpt) (Requires a free account)
## What's next?
You can see the project's **[roadmap here](https://docs.jesse.trade/docs/roadmap.html)**. **Subscribe** to our mailing list at [jesse.trade](https://jesse.trade) to get the good stuff as soon they're released. Don't worry, We won't send you spamβPinky promise.
## Disclaimer
This software is for educational purposes only. USE THE SOFTWARE AT **YOUR OWN RISK**. THE AUTHORS AND ALL AFFILIATES ASSUME **NO RESPONSIBILITY FOR YOUR TRADING RESULTS**. **Do not risk money that you are afraid to lose**. There might be **bugs** in the code - this software DOES NOT come with **ANY warranty**.
Raw data
{
"_id": null,
"home_page": "https://jesse.trade",
"name": "jesse",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": null,
"author": "Saleh Mir",
"author_email": "saleh@jesse.trade",
"download_url": "https://files.pythonhosted.org/packages/b4/7c/96f5560de9031ecf5a5822e4c52d36665e55d2d849a0cc8498bedf1a0d17/jesse-1.7.1.tar.gz",
"platform": null,
"description": "<div align=\"center\">\n<br>\n<p align=\"center\">\n<img src=\"assets/jesse-logo.png\" alt=\"Jesse\" height=\"72\" />\n</p>\n\n<p align=\"center\">\nAlgo-trading was \ud83d\ude35\u200d\ud83d\udcab, we made it \ud83e\udd29\n</p>\n</div>\n\n# Jesse\n[](https://pypi.org/project/jesse)\n[](https://pepy.tech/project/jesse)\n[](https://hub.docker.com/r/salehmir/jesse)\n[](https://github.com/jesse-ai/jesse)\n[](https://codecov.io/gh/jesse-ai/jesse)\n\n---\n\nJesse is an advanced crypto trading framework that aims to **simplify** **researching** and defining **YOUR OWN trading strategies** for backtesting, optimizing, and live trading.\n\n## What is Jesse?\nWatch this video to get a quick overview of Jesse:\n\n[](https://www.youtube.com/watch?v=0EqN3OOqeJM)\n\n## Why Jesse?\nIn short, Jesse is more **accurate** than other solutions, and way more **simple**. \nIn fact, it is so simple that in case you already know Python, you can get started today, in **matter of minutes**, instead of **weeks and months**. \n\n## Key Features\n\n- \ud83d\udcdd **Simple Syntax**: Define both simple and advanced trading strategies with the simplest syntax in the fastest time.\n- \ud83d\udcca **Comprehensive Indicator Library**: Access a complete library of technical indicators with easy-to-use syntax.\n- \ud83d\udcc8 **Smart Ordering**: Supports market, limit, and stop orders, automatically choosing the best one for you.\n- \u23f0 **Multiple Timeframes and Symbols**: Backtest and livetrade multiple timeframes and symbols simultaneously without look-ahead bias.\n- \ud83d\udd12 **Self-Hosted and Privacy-First**: Designed with your privacy in mind, fully self-hosted to ensure your trading strategies and data remain secure.\n- \ud83d\udee1\ufe0f **Risk Management**: Built-in helper functions for robust risk management.\n- \ud83d\udccb **Metrics System**: A comprehensive metrics system to evaluate your trading strategy's performance.\n- \ud83d\udd0d **Debug Mode**: Observe your strategy in action with a detailed debug mode.\n- \ud83d\udd27 **Optimize Mode**: Fine-tune your strategies using AI, without needing a technical background.\n- \ud83d\udcc8 **Leveraged and Short-Selling**: First-class support for leveraged trading and short-selling.\n- \ud83d\udd00 **Partial Fills**: Supports entering and exiting positions in multiple orders, allowing for greater flexibility.\n- \ud83d\udd14 **Advanced Alerts**: Create real-time alerts within your strategies for effective monitoring.\n- \ud83e\udd16 **JesseGPT**: Jesse has its own GPT, JesseGPT, that can help you write strategies, optimize them, debug them, and much more.\n- \ud83d\udd27 **Built-in Code Editor**: Write, edit, and debug your strategies with a built-in code editor.\n- \ud83d\udcfa **Youtube Channel**: Jesse has a Youtube channel with screencast tutorials that go through example strategies step by step.\n\n## Example Strategy\n\n```py\nclass SMACrossover(Strategy):\n @property\n def slow_sma(self):\n return ta.sma(self.candles, 200)\n\n @property\n def fast_sma(self):\n return ta.sma(self.candles, 50)\n\n def should_long(self) -> bool:\n # Fast SMA above Slow SMA\n return self.fast_sma > self.slow_sma\n\n def should_short(self) -> bool:\n # Fast SMA below Slow SMA\n return self.fast_sma < self.slow_sma\n\n def go_long(self):\n # Open long position and use entire balance to buy\n qty = utils.size_to_qty(self.balance, self.price, fee_rate=self.fee_rate)\n\n self.buy = qty, self.price\n\n def go_short(self):\n # Open short position and use entire balance to sell\n qty = utils.size_to_qty(self.balance, self.price, fee_rate=self.fee_rate)\n\n self.sell = qty, self.price\n\n def update_position(self):\n # If there exist long position, but the signal shows Death Cross, then close the position, and vice versa.\n if self.is_long and self.fast_sma < self.slow_sma:\n self.liquidate()\n \n if self.is_short and self.fast_sma > self.slow_sma:\n self.liquidate()\n```\n\n## Getting Started\nHead over to the \"getting started\" section of the [documentation](https://docs.jesse.trade/docs/getting-started). The \ndocumentation is **short yet very informative**. \n\n## Resources\n\n- [\u26a1\ufe0f Website](https://jesse.trade)\n- [\ud83c\udf93 Documentation](https://docs.jesse.trade)\n- [\ud83c\udfa5 Youtube channel (screencast tutorials)](https://jesse.trade/youtube)\n- [\ud83d\udedf Help center](https://jesse.trade/help)\n- [\ud83d\udcac Discord community](https://jesse.trade/discord)\n- [\ud83e\udd16 JesseGPT](https://jesse.trade/gpt) (Requires a free account)\n\n## What's next?\n\nYou can see the project's **[roadmap here](https://docs.jesse.trade/docs/roadmap.html)**. **Subscribe** to our mailing list at [jesse.trade](https://jesse.trade) to get the good stuff as soon they're released. Don't worry, We won't send you spam\u2014Pinky promise.\n\n## Disclaimer\nThis software is for educational purposes only. USE THE SOFTWARE AT **YOUR OWN RISK**. THE AUTHORS AND ALL AFFILIATES ASSUME **NO RESPONSIBILITY FOR YOUR TRADING RESULTS**. **Do not risk money that you are afraid to lose**. There might be **bugs** in the code - this software DOES NOT come with **ANY warranty**.\n",
"bugtrack_url": null,
"license": null,
"summary": "A trading framework for cryptocurrencies",
"version": "1.7.1",
"project_urls": {
"Documentation": "https://docs.jesse.trade",
"Homepage": "https://jesse.trade",
"Say Thanks!": "https://jesse.trade/discord",
"Source": "https://github.com/jesse-ai/jesse",
"Tracker": "https://github.com/jesse-ai/jesse/issues"
},
"split_keywords": [],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "89b19cb8b3911392096bc67d20dcd607c1f69f9be9d561919bada8804bf39d02",
"md5": "e8aabdf9b28258ea8677acaaec8a3092",
"sha256": "d5a35c4d58c108dede1c5ace258d3436ba31221aeec5724b746d201e886d7aec"
},
"downloads": -1,
"filename": "jesse-1.7.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "e8aabdf9b28258ea8677acaaec8a3092",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 6677897,
"upload_time": "2025-02-13T14:07:20",
"upload_time_iso_8601": "2025-02-13T14:07:20.430775Z",
"url": "https://files.pythonhosted.org/packages/89/b1/9cb8b3911392096bc67d20dcd607c1f69f9be9d561919bada8804bf39d02/jesse-1.7.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b47c96f5560de9031ecf5a5822e4c52d36665e55d2d849a0cc8498bedf1a0d17",
"md5": "e2a8931af4097aacb013dfd7cb426ea8",
"sha256": "83fc2a6e8a7a60c9124946ba7a8a75b49b9e999f6888c6f1c0ae19d96e2a0e93"
},
"downloads": -1,
"filename": "jesse-1.7.1.tar.gz",
"has_sig": false,
"md5_digest": "e2a8931af4097aacb013dfd7cb426ea8",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 6428075,
"upload_time": "2025-02-13T14:07:24",
"upload_time_iso_8601": "2025-02-13T14:07:24.159545Z",
"url": "https://files.pythonhosted.org/packages/b4/7c/96f5560de9031ecf5a5822e4c52d36665e55d2d849a0cc8498bedf1a0d17/jesse-1.7.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-02-13 14:07:24",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "jesse-ai",
"github_project": "jesse",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "arrow",
"specs": [
[
"~=",
"1.2.1"
]
]
},
{
"name": "blinker",
"specs": [
[
"~=",
"1.4"
]
]
},
{
"name": "click",
"specs": [
[
"~=",
"8.0.3"
]
]
},
{
"name": "numpy",
"specs": [
[
"~=",
"1.26.4"
]
]
},
{
"name": "pandas",
"specs": [
[
"~=",
"2.2.3"
]
]
},
{
"name": "peewee",
"specs": [
[
"~=",
"3.14.8"
]
]
},
{
"name": "psycopg2-binary",
"specs": [
[
"~=",
"2.9.9"
]
]
},
{
"name": "pydash",
"specs": [
[
"~=",
"6.0.0"
]
]
},
{
"name": "fnc",
"specs": [
[
"~=",
"0.5.3"
]
]
},
{
"name": "pytest",
"specs": [
[
"~=",
"6.2.5"
]
]
},
{
"name": "requests",
"specs": [
[
"~=",
"2.32.0"
]
]
},
{
"name": "scipy",
"specs": [
[
"~=",
"1.15.0"
]
]
},
{
"name": "statsmodels",
"specs": [
[
"~=",
"0.14.4"
]
]
},
{
"name": "tabulate",
"specs": [
[
"~=",
"0.8.9"
]
]
},
{
"name": "timeloop",
"specs": [
[
"~=",
"1.0.2"
]
]
},
{
"name": "websocket-client",
"specs": [
[
"~=",
"1.8.0"
]
]
},
{
"name": "wsaccel",
"specs": [
[
"~=",
"0.6.6"
]
]
},
{
"name": "simplejson",
"specs": [
[
"~=",
"3.16.0"
]
]
},
{
"name": "aioredis",
"specs": [
[
"~=",
"1.3.1"
]
]
},
{
"name": "redis",
"specs": [
[
"~=",
"4.1.4"
]
]
},
{
"name": "fastapi",
"specs": [
[
"~=",
"0.111.1"
]
]
},
{
"name": "uvicorn",
"specs": [
[
"~=",
"0.29.0"
]
]
},
{
"name": "websockets",
"specs": [
[
">=",
"10.0.0"
]
]
},
{
"name": "python-dotenv",
"specs": [
[
"~=",
"0.19.2"
]
]
},
{
"name": "aiofiles",
"specs": [
[
"~=",
"0.7.0"
]
]
},
{
"name": "numba",
"specs": [
[
"~=",
"0.61.0rc2"
]
]
},
{
"name": "PyJWT",
"specs": [
[
"~=",
"2.8.0"
]
]
},
{
"name": "cryptography",
"specs": [
[
"~=",
"42.0.5"
]
]
},
{
"name": "ecdsa",
"specs": [
[
">=",
"0.16.0"
]
]
}
],
"lcname": "jesse"
}