# TRADEO - A forex trading framework using MetaTrader
![Logo](docs/images/logo.PNG "Title")
This library contains a series of tools to create a trading bot for Forex trading. It uses the [DWX Connect](https://github.com/darwinex/dwxconnect/) (modified) to send commands and receive information of MetaTrader.
This library is created **based on a linux installation of MetaTrader**.
![Test](https://github.com/sorul/tradeo/actions/workflows/testing_coverage.yml/badge.svg?branch=master)
![codecov.io](https://codecov.io/github/sorul/tradeo/coverage.svg?branch=master)
## Installation
### Install the library
#### PIP
```shell
pip install tradeo
```
#### POETRY
```shell
poetry add tradeo
```
Or you can add manually in *pyproject.toml* file if you want download it from a specific branch:
```shell
tradeo = { git = "git@github.com:sorul/tradeo.git", branch = "develop" }
```
### Configure Metatrader
It is necessary to download the [mt_tb_expert.ex5](https://github.com/sorul/tradeo/raw/refs/heads/master/docs/files/mt_tb_expert.ex5) file and put it in the proper directory. This directory is usually: *MetaTrader/MQL5/Experts/Advisors/mt_tb_expert.ex5*.
We add the currency pairs in the timeframe we are going to use (in my case it would be 5 minutes). There is the option for the bot to open them automatically, but I do not recommend it.
Activate the expert in any symbol chart, it does not matter which chart you use. But only in one of them.
## Usage
- You can create strategies inheriting *tradeo.strategies.strategy.Strategy* class. An example of this it would be [basic_strategy.py](tradeo/strategies/basic_strategy.py)
- You can customize the handler of metatrader responses inheriting *tradeo.event_handlers.event_handler.EventHandler* class. An example of this it would be [basic_handler.py](tradeo/event_handlers/basic_event_handler.py)
- An example of a main script using this library would be [basic_forex.py](tradeo/tradeo/executable/basic_forex.py) that inheriting *tradeo.executable.executable.Executable*.
> [!NOTE]
> A real project that imports this wonderful library and you can watch for inspiration is [sorul_tradingbot](https://github.com/sorul/sorul_tradingbot)
## Execution of your project if you import this library
It's necessary to export certain environment variables before running the bot.
```bash
# Timezone configuration
export TB_LOCAL_TIMEZONE=Europe/Madrid
export TB_BROKER_TIMEZONE=Etc/GMT-2
# Trading configuration
export TB_SYMBOLS=EURUSD,USDCAD,USDCHF
export TB_ACCOUNT_CURRENCY=EUR
export TB_TIMEFRAME=M5
export TB_LOOKBACK_DAYS=10
# Forex-Client configuration
export TB_CHECK_MESSAGES_THREAD=true
export TB_CHECK_MARKET_DATA_THREAD=false
export TB_CHECK_BAR_DATA_THREAD=false
export TB_CHECK_OPEN_ORDERS_THREAD=true
export TB_CHECK_HISTORICAL_DATA_THREAD=true
export TB_CHECK_HISTORICAL_TRADES_THREAD=false
# Metatrader configuration
export TB_WINE_HOME="${HOME}/.wine"
export TB_MT_FILES_PATH="${TB_WINE_HOME}/drive_c/Program Files/MetaTrader/MQL5/Files"
# Logging configuration
export TB_ACTIVATE_SYSLOG=false
export TB_LOG_LEVEL=INFO
export TB_SYSLOG_ADDRESS=logs2.papertrailapp.com
export TB_SYSLOG_PORT=43931
# Telegram configuration
export TB_ACTIVATE_TELEGRAM=false
export TB_TG_LOG_LEVEL=INFO
export TB_TG_FOREX_TOKEN=0000000000:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
export TB_TG_FOREX_CHAT_ID=-999999999
```
The different possibilities for exporting environment variables depend on
the user's preference. For example, we can place all the variables in a
".env" file and then execute the command using a Makefile and poetry:
*Makefile*
```makefile
run_forex:
source .env && ~/.local/bin/poetry run run_forex
```
Edit the crontab (crontab -e):
```console
@reboot cd <path_to_your_project> && make start_metatrader
*/5 * * * 0-5 cd <path_to_your_project> && make run_forex
```
Raw data
{
"_id": null,
"home_page": null,
"name": "tradeo",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0.0,>=3.9.0",
"maintainer_email": null,
"keywords": "trading, forex, metatrader, bot, investment, finance, trading-bot, trading-strategy",
"author": "Cayetano Romero Vargas",
"author_email": "cromerovargas2d@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/8b/6b/1000ce5343e21896ae1d794041c80761e04133fce5bf77aae6cfb2c9f53b/tradeo-0.20.0.tar.gz",
"platform": null,
"description": "# TRADEO - A forex trading framework using MetaTrader\n![Logo](docs/images/logo.PNG \"Title\")\n\nThis library contains a series of tools to create a trading bot for Forex trading. It uses the [DWX Connect](https://github.com/darwinex/dwxconnect/) (modified) to send commands and receive information of MetaTrader.\nThis library is created **based on a linux installation of MetaTrader**.\n\n![Test](https://github.com/sorul/tradeo/actions/workflows/testing_coverage.yml/badge.svg?branch=master)\n![codecov.io](https://codecov.io/github/sorul/tradeo/coverage.svg?branch=master)\n\n## Installation\n\n### Install the library\n\n#### PIP\n```shell\npip install tradeo\n```\n\n#### POETRY\n```shell\npoetry add tradeo\n```\n\nOr you can add manually in *pyproject.toml* file if you want download it from a specific branch:\n\n```shell\ntradeo = { git = \"git@github.com:sorul/tradeo.git\", branch = \"develop\" }\n```\n\n\n### Configure Metatrader\n\nIt is necessary to download the [mt_tb_expert.ex5](https://github.com/sorul/tradeo/raw/refs/heads/master/docs/files/mt_tb_expert.ex5) file and put it in the proper directory. This directory is usually: *MetaTrader/MQL5/Experts/Advisors/mt_tb_expert.ex5*.\n\nWe add the currency pairs in the timeframe we are going to use (in my case it would be 5 minutes). There is the option for the bot to open them automatically, but I do not recommend it.\n\nActivate the expert in any symbol chart, it does not matter which chart you use. But only in one of them.\n\n\n## Usage\n\n- You can create strategies inheriting *tradeo.strategies.strategy.Strategy* class. An example of this it would be [basic_strategy.py](tradeo/strategies/basic_strategy.py)\n\n- You can customize the handler of metatrader responses inheriting *tradeo.event_handlers.event_handler.EventHandler* class. An example of this it would be [basic_handler.py](tradeo/event_handlers/basic_event_handler.py)\n\n- An example of a main script using this library would be [basic_forex.py](tradeo/tradeo/executable/basic_forex.py) that inheriting *tradeo.executable.executable.Executable*.\n\n> [!NOTE] \n> A real project that imports this wonderful library and you can watch for inspiration is [sorul_tradingbot](https://github.com/sorul/sorul_tradingbot)\n\n\n\n## Execution of your project if you import this library\n\nIt's necessary to export certain environment variables before running the bot.\n\n```bash\n# Timezone configuration\nexport TB_LOCAL_TIMEZONE=Europe/Madrid\nexport TB_BROKER_TIMEZONE=Etc/GMT-2\n\n# Trading configuration\nexport TB_SYMBOLS=EURUSD,USDCAD,USDCHF\nexport TB_ACCOUNT_CURRENCY=EUR\nexport TB_TIMEFRAME=M5\nexport TB_LOOKBACK_DAYS=10\n\n# Forex-Client configuration\nexport TB_CHECK_MESSAGES_THREAD=true\nexport TB_CHECK_MARKET_DATA_THREAD=false\nexport TB_CHECK_BAR_DATA_THREAD=false\nexport TB_CHECK_OPEN_ORDERS_THREAD=true\nexport TB_CHECK_HISTORICAL_DATA_THREAD=true\nexport TB_CHECK_HISTORICAL_TRADES_THREAD=false\n\n# Metatrader configuration\nexport TB_WINE_HOME=\"${HOME}/.wine\"\nexport TB_MT_FILES_PATH=\"${TB_WINE_HOME}/drive_c/Program Files/MetaTrader/MQL5/Files\"\n\n# Logging configuration\nexport TB_ACTIVATE_SYSLOG=false\nexport TB_LOG_LEVEL=INFO\nexport TB_SYSLOG_ADDRESS=logs2.papertrailapp.com\nexport TB_SYSLOG_PORT=43931\n\n# Telegram configuration\nexport TB_ACTIVATE_TELEGRAM=false\nexport TB_TG_LOG_LEVEL=INFO\nexport TB_TG_FOREX_TOKEN=0000000000:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nexport TB_TG_FOREX_CHAT_ID=-999999999\n```\n\nThe different possibilities for exporting environment variables depend on\nthe user's preference. For example, we can place all the variables in a\n\".env\" file and then execute the command using a Makefile and poetry:\n\n*Makefile*\n```makefile\nrun_forex:\n\tsource .env && ~/.local/bin/poetry run run_forex\n```\n\nEdit the crontab (crontab -e):\n\n```console\n@reboot cd <path_to_your_project> && make start_metatrader\n\n*/5 * * * 0-5 cd <path_to_your_project> && make run_forex\n```\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "This library contains a series of tools to create a trading bot for Forex trading using Metatrader.",
"version": "0.20.0",
"project_urls": null,
"split_keywords": [
"trading",
" forex",
" metatrader",
" bot",
" investment",
" finance",
" trading-bot",
" trading-strategy"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "6311957af5f285a3424d69f1d547d17abe9c78d7584998789c3956801bf4925a",
"md5": "5ac8412f60f3046341e0ed80501d7ebf",
"sha256": "a9e1aa332f24b0a3acb0ee7b6c51269e2363de503b1472626e8f07f39a8346ae"
},
"downloads": -1,
"filename": "tradeo-0.20.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "5ac8412f60f3046341e0ed80501d7ebf",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0.0,>=3.9.0",
"size": 40333,
"upload_time": "2024-11-16T09:50:17",
"upload_time_iso_8601": "2024-11-16T09:50:17.155442Z",
"url": "https://files.pythonhosted.org/packages/63/11/957af5f285a3424d69f1d547d17abe9c78d7584998789c3956801bf4925a/tradeo-0.20.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8b6b1000ce5343e21896ae1d794041c80761e04133fce5bf77aae6cfb2c9f53b",
"md5": "a0baa7806c6d7f4a227997bbc3c04164",
"sha256": "c73496ec283a5cc7f263b06ee639cf8aa7f3665b602f85106453bf8927eafec3"
},
"downloads": -1,
"filename": "tradeo-0.20.0.tar.gz",
"has_sig": false,
"md5_digest": "a0baa7806c6d7f4a227997bbc3c04164",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0.0,>=3.9.0",
"size": 34398,
"upload_time": "2024-11-16T09:50:18",
"upload_time_iso_8601": "2024-11-16T09:50:18.207187Z",
"url": "https://files.pythonhosted.org/packages/8b/6b/1000ce5343e21896ae1d794041c80761e04133fce5bf77aae6cfb2c9f53b/tradeo-0.20.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-16 09:50:18",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "tradeo"
}