jesse


Namejesse JSON
Version 1.3.21 PyPI version JSON
download
home_pagehttps://jesse.trade
SummaryA trading framework for cryptocurrencies
upload_time2024-12-15 13:54:40
maintainerNone
docs_urlNone
authorSaleh Mir
requires_python>=3.8
licenseNone
keywords
VCS
bugtrack_url
requirements arrow blinker click matplotlib mplfinance newtulipy numpy numpy_groupies pandas peewee psycopg2-binary pydash fnc pytest PyWavelets quantstats requests scipy statsmodels TA-Lib tabulate timeloop websocket-client wsaccel simplejson aioredis redis fastapi uvicorn websockets python-dotenv aiofiles numba PyJWT cryptography sympy ecdsa
Travis-CI
coveralls test coverage No coveralls.
            <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
[![PyPI](https://img.shields.io/pypi/v/jesse)](https://pypi.org/project/jesse)
[![Downloads](https://pepy.tech/badge/jesse)](https://pepy.tech/project/jesse)
[![Docker Pulls](https://img.shields.io/docker/pulls/salehmir/jesse)](https://hub.docker.com/r/salehmir/jesse)
[![GitHub](https://img.shields.io/github/license/jesse-ai/jesse)](https://github.com/jesse-ai/jesse)
[![coverage](https://codecov.io/gh/jesse-ai/jesse/graph/badge.svg)](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**.

## 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**. 

**[Here](https://docs.jesse.trade)** you can read more about Jesse's features and why you should use it. 

## 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)
- [πŸ€– Jesse Guru](https://gurubase.io/g/jesse)

## Screenshots

Check out Jesse's [Youtube channel](https://jesse.trade/youtube) for tutorials that go through example strategies step by step. 

Here are a few screenshots just to get you excited:

**Backtest results:**

![image](assets/screenshots/quantstats.png)

**Example strategy code:**

```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 should_cancel_entry(self) -> bool:
        return False

    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()
```

**Live trading (requires [live plugin](https://docs.jesse.trade/docs/livetrade.html)):**

![image](assets/screenshots/live-mode.jpg)


## 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.

## How to contribute

Thank you for your interest in contributing to the project. The best way to contribute is by **participating in the community** and **helping other users**. 

You can also contribute by submitting **bug reports** and **feature requests** or writing code (submitting PRs) which can be incorporated into Jesse itself.

In that case, here's what you need to know:

- Before starting to work on a PR, please **reach out** to make sure it **aligns** with the **project's roadmap** and **vision**.
- If your PR makes changes to the source code, please make sure to **add unit tests**. If you're not sure how to do that, just check out some of the already existing [tests](https://github.com/jesse-ai/jesse/tree/master/tests).

First, you need to install Jesse from the repository instead of PyPi:

```sh
# first, make sure that the PyPi version is not installed
pip uninstall jesse

# now install Jesse from the repository
git clone https://github.com/jesse-ai/jesse.git
cd jesse
pip install -e .
```

Now every change you make to the code will be affected immediately.

After every change, **make sure** your changes did not **break** any functionality by **running tests**:
```
pytest
```

## 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.8",
    "maintainer_email": null,
    "keywords": null,
    "author": "Saleh Mir",
    "author_email": "saleh@jesse.trade",
    "download_url": "https://files.pythonhosted.org/packages/75/9f/2009f69f79a33efe322de3677cf942e6a1d33aec7fbcb8330cb27ec8bd10/jesse-1.3.21.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[![PyPI](https://img.shields.io/pypi/v/jesse)](https://pypi.org/project/jesse)\n[![Downloads](https://pepy.tech/badge/jesse)](https://pepy.tech/project/jesse)\n[![Docker Pulls](https://img.shields.io/docker/pulls/salehmir/jesse)](https://hub.docker.com/r/salehmir/jesse)\n[![GitHub](https://img.shields.io/github/license/jesse-ai/jesse)](https://github.com/jesse-ai/jesse)\n[![coverage](https://codecov.io/gh/jesse-ai/jesse/graph/badge.svg)](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**.\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**[Here](https://docs.jesse.trade)** you can read more about Jesse's features and why you should use it. \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 Jesse Guru](https://gurubase.io/g/jesse)\n\n## Screenshots\n\nCheck out Jesse's [Youtube channel](https://jesse.trade/youtube) for tutorials that go through example strategies step by step. \n\nHere are a few screenshots just to get you excited:\n\n**Backtest results:**\n\n![image](assets/screenshots/quantstats.png)\n\n**Example strategy code:**\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 should_cancel_entry(self) -> bool:\n        return False\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**Live trading (requires [live plugin](https://docs.jesse.trade/docs/livetrade.html)):**\n\n![image](assets/screenshots/live-mode.jpg)\n\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## How to contribute\n\nThank you for your interest in contributing to the project. The best way to contribute is by **participating in the community** and **helping other users**. \n\nYou can also contribute by submitting **bug reports** and **feature requests** or writing code (submitting PRs) which can be incorporated into Jesse itself.\n\nIn that case, here's what you need to know:\n\n- Before starting to work on a PR, please **reach out** to make sure it **aligns** with the **project's roadmap** and **vision**.\n- If your PR makes changes to the source code, please make sure to **add unit tests**. If you're not sure how to do that, just check out some of the already existing [tests](https://github.com/jesse-ai/jesse/tree/master/tests).\n\nFirst, you need to install Jesse from the repository instead of PyPi:\n\n```sh\n# first, make sure that the PyPi version is not installed\npip uninstall jesse\n\n# now install Jesse from the repository\ngit clone https://github.com/jesse-ai/jesse.git\ncd jesse\npip install -e .\n```\n\nNow every change you make to the code will be affected immediately.\n\nAfter every change, **make sure** your changes did not **break** any functionality by **running tests**:\n```\npytest\n```\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.3.21",
    "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": "",
            "digests": {
                "blake2b_256": "7b2fd30298e98f066c68d046f521dace2339d6ecf23c7289c47afb46b1ca303b",
                "md5": "c65403057baec15d729f2c5add5ed4b2",
                "sha256": "f67c0e34b5ec57348a7a82d9154c2eca666016c20b00691b7819f71c1e159a78"
            },
            "downloads": -1,
            "filename": "jesse-1.3.21-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "c65403057baec15d729f2c5add5ed4b2",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 6629107,
            "upload_time": "2024-12-15T13:52:10",
            "upload_time_iso_8601": "2024-12-15T13:52:10.327247Z",
            "url": "https://files.pythonhosted.org/packages/7b/2f/d30298e98f066c68d046f521dace2339d6ecf23c7289c47afb46b1ca303b/jesse-1.3.21-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "759f2009f69f79a33efe322de3677cf942e6a1d33aec7fbcb8330cb27ec8bd10",
                "md5": "9d35880659a058a8a92b0e6da74d3796",
                "sha256": "2516ad5ecc254b75231e31ab6e30467b7cb68181b09c0bfc9258f4ba9fa0b9ba"
            },
            "downloads": -1,
            "filename": "jesse-1.3.21.tar.gz",
            "has_sig": false,
            "md5_digest": "9d35880659a058a8a92b0e6da74d3796",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 6383991,
            "upload_time": "2024-12-15T13:54:40",
            "upload_time_iso_8601": "2024-12-15T13:54:40.177019Z",
            "url": "https://files.pythonhosted.org/packages/75/9f/2009f69f79a33efe322de3677cf942e6a1d33aec7fbcb8330cb27ec8bd10/jesse-1.3.21.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-12-15 13:54:40",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "jesse-ai",
    "github_project": "jesse",
    "travis_ci": true,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "arrow",
            "specs": [
                [
                    "==",
                    "1.2.1"
                ]
            ]
        },
        {
            "name": "blinker",
            "specs": [
                [
                    "==",
                    "1.4"
                ]
            ]
        },
        {
            "name": "click",
            "specs": [
                [
                    "==",
                    "8.0.3"
                ]
            ]
        },
        {
            "name": "matplotlib",
            "specs": [
                [
                    "==",
                    "3.7.4"
                ]
            ]
        },
        {
            "name": "mplfinance",
            "specs": [
                [
                    "==",
                    "0.12.8b6"
                ]
            ]
        },
        {
            "name": "newtulipy",
            "specs": [
                [
                    "==",
                    "0.4.6"
                ]
            ]
        },
        {
            "name": "numpy",
            "specs": [
                [
                    "==",
                    "1.23.0"
                ]
            ]
        },
        {
            "name": "numpy_groupies",
            "specs": [
                [
                    "==",
                    "0.9.14"
                ]
            ]
        },
        {
            "name": "pandas",
            "specs": [
                [
                    "==",
                    "1.4.0"
                ]
            ]
        },
        {
            "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": "PyWavelets",
            "specs": [
                [
                    "==",
                    "1.2.0"
                ]
            ]
        },
        {
            "name": "quantstats",
            "specs": [
                [
                    "==",
                    "0.0.47"
                ]
            ]
        },
        {
            "name": "requests",
            "specs": [
                [
                    "==",
                    "2.32.0"
                ]
            ]
        },
        {
            "name": "scipy",
            "specs": [
                [
                    "==",
                    "1.12.0"
                ]
            ]
        },
        {
            "name": "statsmodels",
            "specs": [
                [
                    "==",
                    "0.14.0"
                ]
            ]
        },
        {
            "name": "TA-Lib",
            "specs": [
                [
                    "==",
                    "0.4.31"
                ]
            ]
        },
        {
            "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.58.1"
                ]
            ]
        },
        {
            "name": "PyJWT",
            "specs": [
                [
                    "==",
                    "2.8.0"
                ]
            ]
        },
        {
            "name": "cryptography",
            "specs": [
                [
                    "==",
                    "42.0.5"
                ]
            ]
        },
        {
            "name": "sympy",
            "specs": [
                [
                    "==",
                    "1.6"
                ]
            ]
        },
        {
            "name": "ecdsa",
            "specs": [
                [
                    ">=",
                    "0.16.0"
                ]
            ]
        }
    ],
    "lcname": "jesse"
}
        
Elapsed time: 0.56414s