This project is archived and no longer maintained.
See ARCHIVE_NOTICE.md for full details on why this was archived.
DO NOT USE FOR REAL TRADING. Binary options are high-risk gambling, not investing.
Security warning: Earlier git commits contain real credentials. See ARCHIVE_NOTICE.md for remediation.
Platform-specific project copies are now available under:
windows/for Windows uselinux/for Linux use
Use those folders as the active project roots when you want fully separated environments, sessions, artifacts, and virtual environments per operating system.
For a one-step bootstrap from the repository root:
- Windows:
./run.ps1 - Linux:
./run.sh
Those root launchers delegate into the platform folder, create the local virtual environment if needed, install/update requirements.txt, and then start the bot.
You can also run main.py directly with no arguments. It now bootstraps itself by creating .env from .env.example when needed, creating a project .venv, installing/updating requirements.txt, and re-launching inside the project interpreter automatically.
A Telegram signal parsing bot that converts Telegram messages into Quotex trades.
- Python 3.12 preferred for the full optional
quotexpypath; Python 3.13 also works for the browser-driven runtime - Create a virtual environment with Python 3.12
- Install Python packages:
python -m pip install -r requirements.txt - Google Chrome or Chromium installed
OmegaTrader now supports both Windows and Linux for local execution.
Important: .venv is platform-specific. Do not copy the same virtual environment between Windows and Linux. Recreate .venv on each operating system.
The runtime is primarily browser/UI-driven. requirements.txt now installs the direct browser automation dependencies explicitly, while quotexpy is treated as an optional extra and is only installed automatically on Python versions where its dependency chain is known to work.
Copy .env.example to .env, then fill in your own credentials and channel values. The real .env is now ignored by Git so machine-specific secrets and Linux paths stay local.
Reference template:
TELEGRAM_API_ID=your_api_id_from_my.telegram.org
TELEGRAM_API_HASH=your_api_hash
TELEGRAM_CHANNEL_ID=your_channel_chat_id (e.g., -100XXXXXXX)
TELEGRAM_CHANNELS=optional_comma_separated_chat_ids_or_usernames (e.g., -1001111111111,-1002222222222,@mychannel)
TELEGRAM_DASHBOARD_ENABLED=true
TELEGRAM_DASHBOARD_CHAT=
TELEGRAM_DASHBOARD_CREATE_IF_MISSING=true
TELEGRAM_DASHBOARD_TITLE=OmegaTrader Dashboard
TELEGRAM_DASHBOARD_ABOUT=Private OmegaTrader dashboard and control channel
TELEGRAM_DASHBOARD_HEARTBEAT_MINUTES=60
QUOTEX_EMAIL=your_quotex_email
QUOTEX_PASSWORD=your_quotex_password
QUOTEX_HEADLESS=false
QUOTEX_HEADLESS_AFTER_LOGIN=false
QUOTEX_BROWSER_EXECUTABLE=
QUOTEX_BROWSER_EXECUTABLE_WINDOWS=
QUOTEX_BROWSER_EXECUTABLE_LINUX=
QUOTEX_DRIVER_PATH_WINDOWS=
QUOTEX_DRIVER_PATH_LINUX=
QUOTEX_ACCOUNT_MODE=DEMO
TELEGRAM_SESSION_DIR_WINDOWS=sessions/windows
TELEGRAM_SESSION_DIR_LINUX=sessions/linux
QUOTEX_UI_SESSION_FILE_WINDOWS=sessions/windows/quotex_ui_session.json
QUOTEX_UI_SESSION_FILE_LINUX=sessions/linux/quotex_ui_session.json
QUOTEX_DUMP_DIR_WINDOWS=artifacts/quotex/windows
QUOTEX_DUMP_DIR_LINUX=artifacts/quotex/linux
TELEGRAM_DASHBOARD_STATE_FILE_WINDOWS=sessions/windows/omega_dashboard_state.json
TELEGRAM_DASHBOARD_STATE_FILE_LINUX=sessions/linux/omega_dashboard_state.json
TRADE_RISK_PERCENT=0
INITIAL_AMOUNT=50
SIGNAL_PARSER_FORMATS=semicolon,delimited,labels,direction_first,time_first,custom
SIGNAL_PARSER_CUSTOM_PATTERNS_FILE=signal_parser_formats.json
For settings that differ by operating system, OmegaTrader now supports OS-specific suffixes and automatically prefers the current platform first:
*_WINDOWSon Windows*_LINUXon Linux*_MACOSon macOS
If no OS-specific value is set, it falls back to the normal unsuffixed variable.
This is most useful for path-based settings such as:
TELEGRAM_SESSION_DIRQUOTEX_UI_SESSION_FILEQUOTEX_DUMP_DIRQUOTEX_BROWSER_EXECUTABLEQUOTEX_DRIVER_PATHQUOTEX_CHROME_MAJOR
QUOTEX_ACCOUNT_MODE accepts:
DEMOorPRACTICEfor paper tradingLIVEorREALfor real-money trading
QUOTEX_HEADLESS accepts:
falseto keep the Quotex browser visible on screentrueto run the browser in headless mode so it stays in the background and you only interact through the terminal/CLI
QUOTEX_HEADLESS_AFTER_LOGIN accepts:
falseto keep the same browser mode for the full sessiontrueto log into Quotex with a visible browser first, then attempt a headless relaunch using the authenticated UI session snapshot
If Quotex/Cloudflare blocks the post-login headless relaunch, OmegaTrader automatically falls back to the visible browser so the bot can keep running.
QUOTEX_BROWSER_EXECUTABLE is optional and lets you point OmegaTrader directly to a Chrome/Chromium binary path when auto-discovery is unreliable.
If you share one .env file across Windows and Linux, prefer QUOTEX_BROWSER_EXECUTABLE_WINDOWS and QUOTEX_BROWSER_EXECUTABLE_LINUX so the correct path is selected automatically.
Examples:
- Windows:
QUOTEX_BROWSER_EXECUTABLE=C:\Program Files\Google\Chrome\Application\chrome.exe - Linux:
QUOTEX_BROWSER_EXECUTABLE=/usr/bin/google-chrome - Windows-only override:
QUOTEX_BROWSER_EXECUTABLE_WINDOWS=C:\Program Files\Google\Chrome\Application\chrome.exe - Linux-only override:
QUOTEX_BROWSER_EXECUTABLE_LINUX=/usr/bin/google-chrome
Smoke test mode still forces demo regardless of this setting.
TRADE_RISK_PERCENT accepts:
0to disable percentage-based sizing and keep usingINITIAL_AMOUNT- any positive number to size the base trade amount from the active Quotex account balance
When TRADE_RISK_PERCENT greater than 0, OmegaTrader:
- reads the currently active Quotex balance for the current mode (
DEMOorLIVE) - calculates the base amount as
balance × (TRADE_RISK_PERCENT / 100) - normalizes that result to the broker min/max limits
- keeps Martingale/Gale steps based on that computed base amount
INITIAL_AMOUNT remains the fallback amount when TRADE_RISK_PERCENT=0 or when the active balance cannot be read.
SIGNAL_PARSER_FORMATS controls the parser order and enabled built-in formats. Supported built-ins are:
semicolon→EUR/USD;10:30;CALLdelimited→EUR/USD - 10:30 - CALLorEUR/USD | 10:30 | CALLlabels→Asset: EUR/USD,Time: 10:30,Direction: CALLdirection_first→CALL EUR/USD 10:30time_first→10:30 EUR/USD CALLcustom→ regex patterns loaded fromSIGNAL_PARSER_CUSTOM_PATTERNS_FILE
You can reorder or disable formats by editing SIGNAL_PARSER_FORMATS. Example:
SIGNAL_PARSER_FORMATS=labels,semicolon,customSIGNAL_PARSER_CUSTOM_PATTERNS_FILE points to a JSON file containing your own extra regex-based formats. A starter file named signal_parser_formats.json is included in the project root.
OmegaTrader also supports a split signal flow for channels that send the setup text first and the direction as a follow-up message or sticker. In that mode, the bot:
- stores the recent text block if it looks like a signal context (for example
GBP NZD (OTC) 1 MINUTESplus signal/risk lines) - waits briefly for a follow-up direction hint such as
CALL,PUT, or an up/down sticker hint - builds an immediate market signal when the direction arrives
If you want to restrict sticker-based direction hints to a specific Telegram sticker pack, set:
SIGNAL_STICKER_SET_NAME=COMPUNDIG_TRADERSWhen configured, OmegaTrader loads that sticker set through Telegram and only accepts sticker/media direction hints from that set.
This is additive and does not replace the existing full-message formats.
Important limitation: the bot can only use direction hints that Telegram exposes as text/emoji/metadata. If the direction exists only as pixels inside an image or sticker with no readable hint, OCR would be required and is not part of the current implementation.
If a required variable is missing, the bot will prompt for it interactively when you run main.py.
For Telegram listening targets:
TELEGRAM_CHANNEL_IDstill works for a single legacy targetTELEGRAM_CHANNELSlets the bot listen to multiple channels at once- you can mix channel IDs like
-100...and public usernames like@mychannel - if both are set, OmegaTrader combines them and removes duplicates
For the built-in Telegram dashboard channel:
- if
TELEGRAM_DASHBOARD_ENABLED=trueandTELEGRAM_DASHBOARD_CHATis blank, OmegaTrader will try to create a dedicated private Telegram channel automatically using the logged-in Telegram user account - the created chat ID is saved back to
TELEGRAM_DASHBOARD_CHATin.env - this channel receives status updates, trade results, and periodic heartbeat messages
The research/ directory contains a comprehensive statistical analysis of a Telegram trading signal channel. This was conducted to understand signal patterns, not to endorse trading.
Key findings are documented in:
research/reports/EVIDENCE_BACKED_PATTERNS.md— Full channel analysisresearch/reports/EXPLOITABLE_FINDINGS_REPORT.md— Discovered patternsresearch/reports/RECONFIRMED_STRATEGY_REPORT.md— Validated strategiesresearch/strategies/STRATEGY_GUIDE.md— Implementation reference
See research/README.md for an overview.
See LICENSE for details.