diff --git a/.vscode/.env b/.vscode/.env new file mode 100644 index 0000000..4c0877a --- /dev/null +++ b/.vscode/.env @@ -0,0 +1 @@ +PYTHONPATH=/home/oleg/develop diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..01c8a83 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,10 @@ +{ + "recommendations": [ + "ms-python.python", + "ms-python.pylance", + "ms-python.black-formatter", + "ms-python.flake8", + "ms-python.mypy-type-checker", + "ms-python.isort" + ] +} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..b2d32bf --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,249 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + + + { + "name": "Python Debugger: Current File", + "type": "debugpy", + "request": "launch", + "program": "${file}", + "console": "integratedTerminal" + }, + { + "name": "-------- OLS --------", + }, + { + "name": "CRYPTO OLS (rolling)", + "type": "debugpy", + "request": "launch", + "python": "/home/oleg/.pyenv/python3.12-venv/bin/python", + "program": "${workspaceFolder}/research/backtest.py", + "args": [ + "--config=${workspaceFolder}/configuration/ols.cfg", + "--instruments=ADA-USDT:CRYPTO:BNBSPOT,SOL-USDT:CRYPTO:BNBSPOT", + "--date_pattern=20250605", + "--result_db=${workspaceFolder}/research/results/crypto/%T.ols.ADA-SOL.20250605.crypto_results.db", + ], + "env": { + "PYTHONPATH": "${workspaceFolder}/lib" + }, + "console": "integratedTerminal" + }, + { + "name": "CRYPTO OLS (optimized)", + "type": "debugpy", + "request": "launch", + "python": "/home/oleg/.pyenv/python3.12-venv/bin/python", + "program": "${workspaceFolder}/research/backtest.py", + "args": [ + "--config=${workspaceFolder}/configuration/ols-opt.cfg", + "--instruments=ADA-USDT:CRYPTO:BNBSPOT,SOL-USDT:CRYPTO:BNBSPOT", + "--date_pattern=20250605", + "--result_db=${workspaceFolder}/research/results/crypto/%T.ols-opt.ADA-SOL.20250605.crypto_results.db", + ], + "env": { + "PYTHONPATH": "${workspaceFolder}/lib" + }, + "console": "integratedTerminal" + }, + // { + // "name": "CRYPTO OLS (expanding)", + // "type": "debugpy", + // "request": "launch", + // "python": "/home/oleg/.pyenv/python3.12-venv/bin/python", + // "program": "${workspaceFolder}/research/backtest.py", + // "args": [ + // "--config=${workspaceFolder}/configuration/ols-exp.cfg", + // "--instruments=ADA-USDT:CRYPTO:BNBSPOT,SOL-USDT:CRYPTO:BNBSPOT", + // "--date_pattern=20250605", + // "--result_db=${workspaceFolder}/research/results/crypto/%T.ols-exp.ADA-SOL.20250605.crypto_results.db", + // ], + // "env": { + // "PYTHONPATH": "${workspaceFolder}/lib" + // }, + // "console": "integratedTerminal" + // }, + { + "name": "EQUITY OLS (rolling)", + "type": "debugpy", + "request": "launch", + "python": "/home/oleg/.pyenv/python3.12-venv/bin/python", + "program": "${workspaceFolder}/research/backtest.py", + "args": [ + "--config=${workspaceFolder}/configuration/ols.cfg", + "--instruments=COIN:EQUITY:ALPACA,MSTR:EQUITY:ALPACA", + "--date_pattern=20250605", + "--result_db=${workspaceFolder}/research/results/equity/%T.ols.COIN-MSTR.20250605.equity_results.db", + ], + "env": { + "PYTHONPATH": "${workspaceFolder}/lib" + }, + "console": "integratedTerminal" + }, + { + "name": "EQUITY-CRYPTO OLS (rolling)", + "type": "debugpy", + "request": "launch", + "python": "/home/oleg/.pyenv/python3.12-venv/bin/python", + "program": "${workspaceFolder}/research/backtest.py", + "args": [ + "--config=${workspaceFolder}/configuration/ols.cfg", + "--instruments=COIN:EQUITY:ALPACA,BTC-USDT:CRYPTO:BNBSPOT", + "--date_pattern=20250605", + "--result_db=${workspaceFolder}/research/results/intermarket/%T.ols.COIN-BTC.20250605.equity_results.db", + ], + "env": { + "PYTHONPATH": "${workspaceFolder}/lib" + }, + "console": "integratedTerminal" + }, + { + "name": "-------- VECM --------", + }, + { + "name": "CRYPTO VECM (rolling)", + "type": "debugpy", + "request": "launch", + "python": "/home/oleg/.pyenv/python3.12-venv/bin/python", + "program": "${workspaceFolder}/research/backtest.py", + "args": [ + "--config=${workspaceFolder}/configuration/vecm.cfg", + "--instruments=ADA-USDT:CRYPTO:BNBSPOT,SOL-USDT:CRYPTO:BNBSPOT", + "--date_pattern=20250605", + "--result_db=${workspaceFolder}/research/results/crypto/%T.vecm.ADA-SOL.20250605.crypto_results.db", + ], + "env": { + "PYTHONPATH": "${workspaceFolder}/lib" + }, + "console": "integratedTerminal" + }, + { + "name": "CRYPTO VECM (optimized)", + "type": "debugpy", + "request": "launch", + "python": "/home/oleg/.pyenv/python3.12-venv/bin/python", + "program": "${workspaceFolder}/research/backtest.py", + "args": [ + "--config=${workspaceFolder}/configuration/vecm-opt.cfg", + "--instruments=ADA-USDT:CRYPTO:BNBSPOT,SOL-USDT:CRYPTO:BNBSPOT", + "--date_pattern=20250605", + "--result_db=${workspaceFolder}/research/results/crypto/%T.vecm-opt.ADA-SOL.20250605.crypto_results.db", + ], + "env": { + "PYTHONPATH": "${workspaceFolder}/lib" + }, + "console": "integratedTerminal" + }, + // { + // "name": "CRYPTO VECM (expanding)", + // "type": "debugpy", + // "request": "launch", + // "python": "/home/oleg/.pyenv/python3.12-venv/bin/python", + // "program": "${workspaceFolder}/research/backtest.py", + // "args": [ + // "--config=${workspaceFolder}/configuration/vecm-exp.cfg", + // "--instruments=ADA-USDT:CRYPTO:BNBSPOT,SOL-USDT:CRYPTO:BNBSPOT", + // "--date_pattern=20250605", + // "--result_db=${workspaceFolder}/research/results/crypto/%T.vecm-exp.ADA-SOL.20250605.crypto_results.db", + // ], + // "env": { + // "PYTHONPATH": "${workspaceFolder}/lib" + // }, + // "console": "integratedTerminal" + // }, + { + "name": "EQUITY VECM (rolling)", + "type": "debugpy", + "request": "launch", + "python": "/home/oleg/.pyenv/python3.12-venv/bin/python", + "program": "${workspaceFolder}/research/backtest.py", + "args": [ + "--config=${workspaceFolder}/configuration/vecm.cfg", + "--instruments=COIN:EQUITY:ALPACA,MSTR:EQUITY:ALPACA", + "--date_pattern=20250605", + "--result_db=${workspaceFolder}/research/results/equity/%T.vecm.COIN-MSTR.20250605.equity_results.db", + ], + "env": { + "PYTHONPATH": "${workspaceFolder}/lib" + }, + "console": "integratedTerminal" + }, + { + "name": "EQUITY-CRYPTO VECM (rolling)", + "type": "debugpy", + "request": "launch", + "python": "/home/oleg/.pyenv/python3.12-venv/bin/python", + "program": "${workspaceFolder}/research/backtest.py", + "args": [ + "--config=${workspaceFolder}/configuration/vecm.cfg", + "--instruments=COIN:EQUITY:ALPACA,BTC-USDT:CRYPTO:BNBSPOT", + "--date_pattern=20250605", + "--result_db=${workspaceFolder}/research/results/intermarket/%T.vecm.COIN-BTC.20250601.equity_results.db", + ], + "env": { + "PYTHONPATH": "${workspaceFolder}/lib" + }, + "console": "integratedTerminal" + }, + { + "name": "-------- B a t c h e s --------", + }, + { + "name": "CRYPTO OLS Batch (rolling)", + "type": "debugpy", + "request": "launch", + "python": "/home/oleg/.pyenv/python3.12-venv/bin/python", + "program": "${workspaceFolder}/research/backtest.py", + "args": [ + "--config=${workspaceFolder}/configuration/ols.cfg", + "--instruments=ADA-USDT:CRYPTO:BNBSPOT,SOL-USDT:CRYPTO:BNBSPOT", + "--date_pattern=2025060*", + "--result_db=${workspaceFolder}/research/results/crypto/%T.ols.ADA-SOL.2025060-.crypto_results.db", + ], + "env": { + "PYTHONPATH": "${workspaceFolder}/lib" + }, + "console": "integratedTerminal" + }, + { + "name": "CRYPTO VECM Batch (rolling)", + "type": "debugpy", + "request": "launch", + "python": "/home/oleg/.pyenv/python3.12-venv/bin/python", + "program": "${workspaceFolder}/research/backtest.py", + "args": [ + "--config=${workspaceFolder}/configuration/vecm.cfg", + "--instruments=ADA-USDT:CRYPTO:BNBSPOT,SOL-USDT:CRYPTO:BNBSPOT", + "--date_pattern=2025060*", + "--result_db=${workspaceFolder}/research/results/crypto/%T.vecm.ADA-SOL.2025060-.crypto_results.db", + ], + "env": { + "PYTHONPATH": "${workspaceFolder}/lib" + }, + "console": "integratedTerminal" + }, + { + "name": "-------- Viz Test --------", + }, + { + "name": "Viz Test", + "type": "debugpy", + "request": "launch", + "python": "/home/oleg/.pyenv/python3.12-venv/bin/python", + "program": "${workspaceFolder}/tests/viz_test.py", + "args": [ + "--config=${workspaceFolder}/configuration/ols.cfg", + "--instruments=ADA-USDT:CRYPTO:BNBSPOT,SOL-USDT:CRYPTO:BNBSPOT", + "--date_pattern=20250605", + ], + "env": { + "PYTHONPATH": "${workspaceFolder}/lib" + }, + "console": "integratedTerminal" + } + ] +} \ No newline at end of file diff --git a/.vscode/pairs_trading.code-workspace b/.vscode/pairs_trading.code-workspace new file mode 100644 index 0000000..6553107 --- /dev/null +++ b/.vscode/pairs_trading.code-workspace @@ -0,0 +1,10 @@ +{ + "folders": [ + { + "path": ".." + } + ], + "settings": { + "workbench.colorTheme": "Dracula Theme" + } +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..5bbf820 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,111 @@ +{ + "PythonVersion": "3.12", + "[python]": { + "editor.defaultFormatter": "ms-python.black-formatter" + }, + // =========================================================== + "workbench.activityBar.orientation": "vertical", + // =========================================================== + + // "markdown.styles": [ + // "/home/oleg/develop/cvtt2/.vscode/light-theme.css" + // ], + "markdown.preview.background": "#ffffff", + "markdown.preview.textEditorTheme": "light", + "markdown-pdf.styles": [ + "/home/oleg/develop/cvtt2/.vscode/light-theme.css" + ], + "editor.detectIndentation": false, + // Configure editor settings to be overridden for [yaml] language. + "[yaml]": { + "editor.insertSpaces": true, + "editor.tabSize": 4, + }, + "pylint.args": [ + "--disable=missing-docstring" + , "--disable=invalid-name" + , "--disable=too-few-public-methods" + , "--disable=broad-exception-raised" + , "--disable=broad-exception-caught" + , "--disable=pointless-string-statement" + , "--disable=unused-argument" + , "--disable=line-too-long" + , "--disable=import-outside-toplevel" + , "--disable=fixme" + , "--disable=protected-access" + , "--disable=logging-fstring-interpolation" + ], + + // ===== TESTING CONFIGURATION ===== + "python.testing.unittestEnabled": false, + "python.testing.pytestEnabled": true, + "python.testing.pytestArgs": [ + "-v", + "--tb=short", + "--disable-warnings" + ], + "python.testing.envVars": { + "PYTHONPATH": "${workspaceFolder}/lib:${workspaceFolder}/.." + }, + "python.testing.cwd": "${workspaceFolder}", + "python.testing.autoTestDiscoverOnSaveEnabled": true, + "python.testing.pytestPath": "/home/oleg/.pyenv/python3.12-venv/bin/pytest", + "python.testing.promptToConfigure": false, + "python.testing.pytest.enabled": true, + + + // Python interpreter settings + "python.defaultInterpreterPath": "/home/oleg/.pyenv/python3.12-venv/bin/python3.12", + + // Environment variables for Python execution + "python.envFile": "${workspaceFolder}/.vscode/.env", + "python.terminal.activateEnvironment": false, + "python.terminal.activateEnvInCurrentTerminal": false, + + // Global environment variables for VS Code Python extension + "terminal.integrated.env.linux": { + "PYTHONPATH": "/home/oleg/develop/:${env:PYTHONPATH}" + }, + + "pylint.enabled": true, + "github.copilot.enable": false, + "markdown.extension.print.theme": "dark", + "python.analysis.extraPaths": [ + "${workspaceFolder}/..", + "${workspaceFolder}/lib" + ], + + // Try enabling regular Python language server alongside CursorPyright + "python.languageServer": "None", + "python.analysis.diagnosticMode": "workspace", + "workbench.colorTheme": "Atom One Dark", + "cursorpyright.analysis.enable": false, + "cursorpyright.analysis.extraPaths": [ + "${workspaceFolder}/..", + "${workspaceFolder}/lib" + ], + + // Enable quick fixes for unused imports + "python.analysis.autoImportCompletions": true, + "python.analysis.fixAll": ["source.unusedImports"], + "python.analysis.typeCheckingMode": "basic", + + // Enable code actions for CursorPyright + "cursorpyright.analysis.autoImportCompletions": true, + "cursorpyright.analysis.typeCheckingMode": "off", + "cursorpyright.reportUnusedImport": "warning", + "cursorpyright.reportUnusedVariable": "warning", + "cursorpyright.analysis.diagnosticMode": "workspace", + + // Force enable code actions + "editor.lightBulb.enabled": true, + "editor.codeActionsOnSave": { + "source.organizeImports": "explicit", + "source.fixAll": "explicit", + "source.unusedImports": "explicit" + }, + + // Enable Python-specific code actions + "python.analysis.completeFunctionParens": true, + "python.analysis.addImport.exactMatchOnly": false, +}