Files
easy_tdx_max/.omc/project-memory.json
T
Justin Gu 1e99feb7c2 feat: multi-factor combo backtest engine (v1.9.0)
- Add backtest/combo.py: CombinationRunner, extract_factor_signals, combine_masks
- Signal merge modes: AND / OR / MAJORITY (majority default)
- CLI: --combo-strategies and --combo-mode for easy-tdx backtest
- run_all_strategies.py: --combo 2 --combo 3 auto-screen best combos
- Fix MyTT MFI/CR divide-by-zero RuntimeWarning
- 14 new unit tests, 328 total passing
2026-06-10 01:37:28 +08:00

282 lines
6.3 KiB
JSON

{
"version": "1.0.0",
"lastScanned": 1780948623576,
"projectRoot": "D:\\python\\easy_tdx",
"techStack": {
"languages": [
{
"name": "Python",
"version": null,
"confidence": "high",
"markers": [
"pyproject.toml"
]
}
],
"frameworks": [
{
"name": "pytest",
"version": null,
"category": "testing"
}
],
"packageManager": null,
"runtime": null
},
"build": {
"buildCommand": null,
"testCommand": "python -m pytest tests/unit/ -q --tb=line 2>&1 | tail -5",
"lintCommand": "ruff check",
"devCommand": null,
"scripts": {}
},
"conventions": {
"namingStyle": null,
"importStyle": null,
"testPattern": null,
"fileOrganization": null
},
"structure": {
"isMonorepo": false,
"workspaces": [],
"mainDirectories": [
"docs",
"examples",
"scripts",
"src",
"tests"
],
"gitBranches": {
"defaultBranch": "main",
"branchingStrategy": null
}
},
"customNotes": [],
"directoryMap": {
"dist": {
"path": "dist",
"purpose": "Distribution/build output",
"fileCount": 2,
"lastAccessed": 1780948623545,
"keyFiles": [
"easy_tdx-1.0.0-py3-none-any.whl",
"easy_tdx-1.0.0.tar.gz"
]
},
"docs": {
"path": "docs",
"purpose": "Documentation",
"fileCount": 8,
"lastAccessed": 1780948623545,
"keyFiles": [
"api_reference.md",
"conf.py",
"field_mapping.md",
"index.md",
"indicator-bias-signal.md"
]
},
"examples": {
"path": "examples",
"purpose": "Example code",
"fileCount": 0,
"lastAccessed": 1780948623546,
"keyFiles": []
},
"scripts": {
"path": "scripts",
"purpose": "Build/utility scripts",
"fileCount": 4,
"lastAccessed": 1780948623547,
"keyFiles": [
"probe_unknowns.py",
"ruff_hook.py",
"verify_fixes_20260415.py",
"__init__.py"
]
},
"src": {
"path": "src",
"purpose": "Source code",
"fileCount": 0,
"lastAccessed": 1780948623548,
"keyFiles": []
},
"tests": {
"path": "tests",
"purpose": "Test files",
"fileCount": 1,
"lastAccessed": 1780948623549,
"keyFiles": [
"__init__.py"
]
},
"venv": {
"path": "venv",
"purpose": null,
"fileCount": 2,
"lastAccessed": 1780948623550,
"keyFiles": [
"pyvenv.cfg"
]
},
"tests\\fixtures": {
"path": "tests\\fixtures",
"purpose": "Test fixtures",
"fileCount": 24,
"lastAccessed": 1780948623554,
"keyFiles": [
"company_info_category.hex",
"company_info_category.json",
"company_info_content.hex"
]
},
"venv\\Lib": {
"path": "venv\\Lib",
"purpose": "Library code",
"fileCount": 0,
"lastAccessed": 1780948623555,
"keyFiles": []
},
"venv\\Scripts": {
"path": "venv\\Scripts",
"purpose": "Build/utility scripts",
"fileCount": 25,
"lastAccessed": 1780948623555,
"keyFiles": [
"activate",
"activate.bat",
"activate.fish"
]
}
},
"hotPaths": [
{
"path": "src\\easy_tdx\\backtest\\cli.py",
"accessCount": 14,
"lastAccessed": 1781024440572,
"type": "file"
},
{
"path": "run_all_strategies.py",
"accessCount": 13,
"lastAccessed": 1781024439395,
"type": "file"
},
{
"path": "src\\easy_tdx\\MyTT.py",
"accessCount": 9,
"lastAccessed": 1781025723850,
"type": "file"
},
{
"path": "README.md",
"accessCount": 4,
"lastAccessed": 1781026610801,
"type": "file"
},
{
"path": "src\\easy_tdx\\backtest\\combo.py",
"accessCount": 3,
"lastAccessed": 1781023715594,
"type": "file"
},
{
"path": "src\\easy_tdx\\backtest\\__init__.py",
"accessCount": 3,
"lastAccessed": 1781023799015,
"type": "file"
},
{
"path": "tests\\unit\\test_backtest_combo.py",
"accessCount": 2,
"lastAccessed": 1781023758085,
"type": "file"
},
{
"path": "src\\easy_tdx\\backtest\\strategy.py",
"accessCount": 1,
"lastAccessed": 1781021955703,
"type": "file"
},
{
"path": "src\\easy_tdx\\backtest\\engine.py",
"accessCount": 1,
"lastAccessed": 1781021956588,
"type": "file"
},
{
"path": "src\\easy_tdx\\backtest\\types.py",
"accessCount": 1,
"lastAccessed": 1781021957067,
"type": "file"
},
{
"path": "src\\easy_tdx\\backtest\\dsl.py",
"accessCount": 1,
"lastAccessed": 1781021962044,
"type": "file"
},
{
"path": "strategies\\ma_cross.py",
"accessCount": 1,
"lastAccessed": 1781021963164,
"type": "file"
},
{
"path": "strategies\\macd_cross.py",
"accessCount": 1,
"lastAccessed": 1781021963925,
"type": "file"
},
{
"path": "strategies\\rsi_reversal.py",
"accessCount": 1,
"lastAccessed": 1781021964466,
"type": "file"
},
{
"path": "strategies\\bollinger_breakout.py",
"accessCount": 1,
"lastAccessed": 1781021964950,
"type": "file"
},
{
"path": "src\\easy_tdx\\backtest\\performance.py",
"accessCount": 1,
"lastAccessed": 1781021974264,
"type": "file"
},
{
"path": "strategies\\turtle_breakout.py",
"accessCount": 1,
"lastAccessed": 1781021982151,
"type": "file"
},
{
"path": "C:\\Users\\毛利哥\\.claude\\plans\\2-3-deep-melody.md",
"accessCount": 1,
"lastAccessed": 1781022126312,
"type": "file"
},
{
"path": "tests\\unit\\test_backtest_strategy.py",
"accessCount": 1,
"lastAccessed": 1781023334642,
"type": "file"
},
{
"path": "tests\\unit\\test_backtest_engine.py",
"accessCount": 1,
"lastAccessed": 1781023335435,
"type": "file"
},
{
"path": "pyproject.toml",
"accessCount": 1,
"lastAccessed": 1781026550566,
"type": "file"
}
],
"userDirectives": []
}