From 31ece2e99a2e990815046491997fb0b49dba1064 Mon Sep 17 00:00:00 2001 From: yuqei Date: Fri, 24 Apr 2026 13:39:01 +0800 Subject: [PATCH] Initialize AI Exchange closed-loop trading system repository. Co-Authored-By: Claude Sonnet 4.6 --- .dockerignore | 12 + .env.example | 6 + .gitignore | 23 + Dockerfile | 28 + ICT Concepts.md | 2477 +++++++++++++++++ ...ts [TFO]_,_ICT Killzones & Pivots [TFO].md | 1673 +++++++++++ README.md | 51 + docker-compose.yml | 11 + docs/AI_ICT_Codebase_Skeleton_Spec_v1.md | 872 ++++++ docs/AI_ICT_Dealing_Range_Spec_v1.md | 584 ++++ docs/AI_ICT_Dealing_Range_规格书_v1.md | 410 +++ docs/AI_ICT_Displacement_规格书_v1.md | 494 ++++ docs/AI_ICT_FVG_规格书_v1.md | 466 ++++ docs/AI_ICT_Liquidity_Pool_规格书_v1.md | 429 +++ docs/AI_ICT_MSS_判定规格书_v1.md | 472 ++++ docs/AI_ICT_MVP_规则规格书_v1.md | 761 +++++ docs/AI_ICT_Migration_拆分计划_v1.md | 493 ++++ docs/AI_ICT_OKX_数据接入规格书_v1.md | 433 +++ ..._ICT_PostgreSQL_Migration_SQL_Drafts_v1.md | 549 ++++ ..._ICT_PostgreSQL_Migration_Split_Plan_v1.md | 711 +++++ docs/AI_ICT_PostgreSQL_Schema_v1.md | 806 ++++++ docs/AI_ICT_Session_Generator_Spec_v1.md | 518 ++++ docs/AI_ICT_Session_生成器规格书_v1.md | 421 +++ docs/AI_ICT_Sweep_Identification_Spec_v1.md | 590 ++++ docs/AI_ICT_Sweep_识别规格书_v1.md | 479 ++++ docs/AI_ICT_Swing_Identification_Spec_v1.md | 491 ++++ docs/AI_ICT_Swing_识别规格书_v1.md | 494 ++++ docs/AI_ICT_主线开发检查点_v1.md | 455 +++ docs/AI_ICT_主线进度摘要_v1.md | 66 + docs/AI_ICT_开发路线图_v1.md | 592 ++++ docs/AI_ICT_总体设计文档_v1.md | 516 ++++ docs/AI_ICT_执行检查清单_v1.md | 327 +++ docs/AI_ICT_数据库_Migration_SQL_草案_v1.md | 454 +++ docs/AI_ICT_文档索引与命名规范_v1.md | 291 ++ ...AI_ICT_第一批正式_Migration_文件草案_v1.md | 489 ++++ ...AI_ICT_第二批正式_Migration_文件草案_v1.md | 462 +++ docs/AI_ICT_重复文档清理计划_v1.md | 217 ++ docs/AI_ICT_项目代码骨架规范_v1.md | 492 ++++ docs/AI_ICT_项目启动清单_v1.md | 250 ++ docs/AI_协作自动化工作规程_v1.md | 338 +++ docs/AI_自动化协作迁移清单_v1.md | 239 ++ docs/CLAUDE_template_autonomy_first.md | 225 ++ ...automation_workflow_migration_checklist.md | 182 ++ docs/标准_CLAUDE_md_模板_v1.md | 166 ++ migrations/.gitkeep | 1 + migrations/001_create_venues.sql | 9 + migrations/002_create_instruments.sql | 20 + migrations/003_create_candles.sql | 16 + ..._create_candles_partitions_and_indexes.sql | 13 + migrations/005_create_market_sessions.sql | 23 + migrations/006_create_swings.sql | 23 + migrations/007_create_dealing_ranges.sql | 22 + migrations/008_create_liquidity_pools.sql | 21 + migrations/009_seed_venues.sql | 5 + migrations/010_seed_instruments.sql | 57 + migrations/011_create_displacement_events.sql | 20 + migrations/012_create_structure_events.sql | 21 + migrations/013_create_fvg_zones.sql | 22 + migrations/014_create_bias_snapshots.sql | 23 + migrations/015_create_trade_signals.sql | 33 + migrations/016_create_trade_executions.sql | 29 + migrations/017_create_backtest_runs.sql | 17 + migrations/018_create_backtest_results.sql | 20 + migrations/019_create_sweep_events.sql | 22 + pyproject.toml | 16 + scripts/apply_migrations.py | 36 + scripts/check_db.py | 21 + scripts/check_db_connection.py | 21 + scripts/deploy_server.exp | 25 + scripts/deploy_with_expect.exp | 28 + scripts/fix_pg_hba.exp | 24 + scripts/run_api_server.py | 19 + scripts/run_backtest.py | 18 + scripts/run_dev.py | 12 + scripts/run_displacement.py | 19 + scripts/run_execution.py | 26 + scripts/run_fvg.py | 19 + scripts/run_liquidity.py | 19 + scripts/run_migrations.py | 35 + scripts/run_mss.py | 19 + scripts/run_okx_backfill.py | 54 + scripts/run_pipeline.py | 18 + scripts/run_ranges.py | 19 + scripts/run_reports.py | 48 + scripts/run_session_generator.py | 20 + scripts/run_signals.py | 25 + scripts/run_sweeps.py | 19 + scripts/run_swings.py | 19 + scripts/show_models.py | 23 + scripts/ssh_diagnose.exp | 9 + seeds/.gitkeep | 1 + src/__init__.py | 1 + src/api/__init__.py | 18 + src/api/backtest.py | 24 + src/api/candles.py | 19 + src/api/health.py | 9 + src/api/server.py | 108 + src/api/sessions.py | 18 + src/api/signals.py | 19 + src/config/__init__.py | 1 + src/config/constants.py | 9 + src/config/sessions.py | 17 + src/config/settings.py | 15 + src/db/__init__.py | 1 + src/db/base.py | 5 + src/db/config.py | 5 + src/db/engine.py | 6 + src/db/session.py | 6 + src/domain/__init__.py | 1 + src/main.py | 201 ++ src/models/__init__.py | 37 + src/models/backtest_result.py | 22 + src/models/backtest_run.py | 19 + src/models/bias_snapshot.py | 25 + src/models/candle.py | 22 + src/models/dealing_range.py | 23 + src/models/displacement_event.py | 22 + src/models/fvg_zone.py | 23 + src/models/instrument.py | 26 + src/models/liquidity_pool.py | 22 + src/models/market_session.py | 26 + src/models/structure_event.py | 23 + src/models/sweep_event.py | 25 + src/models/swing.py | 21 + src/models/trade_execution.py | 27 + src/models/trade_signal.py | 31 + src/models/venue.py | 16 + src/repositories/__init__.py | 31 + src/repositories/backtest_repository.py | 176 ++ src/repositories/bias_repository.py | 135 + src/repositories/candle_repository.py | 81 + src/repositories/dealing_range_repository.py | 95 + src/repositories/displacement_repository.py | 83 + src/repositories/execution_repository.py | 135 + src/repositories/fvg_repository.py | 165 ++ src/repositories/liquidity_pool_repository.py | 99 + src/repositories/market_session_repository.py | 103 + src/repositories/signal_repository.py | 189 ++ src/repositories/structure_repository.py | 119 + src/repositories/sweep_repository.py | 140 + src/repositories/swing_repository.py | 84 + src/services/__init__.py | 1 + src/services/backtest/__init__.py | 11 + src/services/backtest/backtest_service.py | 303 ++ src/services/bias/__init__.py | 5 + src/services/bias/bias_service.py | 88 + src/services/displacement/__init__.py | 5 + .../displacement/displacement_service.py | 72 + src/services/execution/__init__.py | 17 + src/services/execution/execution_service.py | 172 ++ src/services/fvg/__init__.py | 5 + src/services/fvg/fvg_service.py | 182 ++ src/services/liquidity/__init__.py | 10 + .../liquidity/liquidity_pool_service.py | 271 ++ src/services/market_data/__init__.py | 6 + src/services/market_data/normalizer.py | 39 + src/services/market_data/okx_client.py | 72 + src/services/ranges/__init__.py | 5 + src/services/ranges/dealing_range_service.py | 60 + src/services/reports/__init__.py | 13 + .../reports/backtest_report_service.py | 6 + .../reports/intraday_report_service.py | 45 + .../reports/post_trade_review_service.py | 50 + .../reports/pre_market_report_service.py | 39 + src/services/sessions/__init__.py | 5 + src/services/sessions/session_generator.py | 71 + src/services/signals/__init__.py | 17 + src/services/signals/signal_service.py | 188 ++ src/services/structure/__init__.py | 5 + src/services/structure/mss_service.py | 191 ++ src/services/sweeps/__init__.py | 5 + src/services/sweeps/sweep_service.py | 109 + src/services/swings/__init__.py | 5 + src/services/swings/swing_service.py | 80 + src/utils/__init__.py | 1 + tests/__init__.py | 1 + tests/fixtures/__init__.py | 1 + tests/integration/__init__.py | 1 + tests/unit/__init__.py | 1 + tests/unit/test_api_and_main.py | 206 ++ tests/unit/test_api_server.py | 90 + tests/unit/test_backtest_report_service.py | 98 + tests/unit/test_backtest_service.py | 127 + tests/unit/test_execution_service.py | 140 + tests/unit/test_fvg_service.py | 62 + tests/unit/test_liquidity_pool_service.py | 126 + tests/unit/test_mss_service.py | 66 + tests/unit/test_report_services.py | 61 + tests/unit/test_signal_service.py | 112 + 189 files changed, 27318 insertions(+) create mode 100644 .dockerignore create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 ICT Concepts.md create mode 100644 ICT Killzones & Pivots [TFO]_,_ICT Killzones & Pivots [TFO].md create mode 100644 README.md create mode 100644 docker-compose.yml create mode 100644 docs/AI_ICT_Codebase_Skeleton_Spec_v1.md create mode 100644 docs/AI_ICT_Dealing_Range_Spec_v1.md create mode 100644 docs/AI_ICT_Dealing_Range_规格书_v1.md create mode 100644 docs/AI_ICT_Displacement_规格书_v1.md create mode 100644 docs/AI_ICT_FVG_规格书_v1.md create mode 100644 docs/AI_ICT_Liquidity_Pool_规格书_v1.md create mode 100644 docs/AI_ICT_MSS_判定规格书_v1.md create mode 100644 docs/AI_ICT_MVP_规则规格书_v1.md create mode 100644 docs/AI_ICT_Migration_拆分计划_v1.md create mode 100644 docs/AI_ICT_OKX_数据接入规格书_v1.md create mode 100644 docs/AI_ICT_PostgreSQL_Migration_SQL_Drafts_v1.md create mode 100644 docs/AI_ICT_PostgreSQL_Migration_Split_Plan_v1.md create mode 100644 docs/AI_ICT_PostgreSQL_Schema_v1.md create mode 100644 docs/AI_ICT_Session_Generator_Spec_v1.md create mode 100644 docs/AI_ICT_Session_生成器规格书_v1.md create mode 100644 docs/AI_ICT_Sweep_Identification_Spec_v1.md create mode 100644 docs/AI_ICT_Sweep_识别规格书_v1.md create mode 100644 docs/AI_ICT_Swing_Identification_Spec_v1.md create mode 100644 docs/AI_ICT_Swing_识别规格书_v1.md create mode 100644 docs/AI_ICT_主线开发检查点_v1.md create mode 100644 docs/AI_ICT_主线进度摘要_v1.md create mode 100644 docs/AI_ICT_开发路线图_v1.md create mode 100644 docs/AI_ICT_总体设计文档_v1.md create mode 100644 docs/AI_ICT_执行检查清单_v1.md create mode 100644 docs/AI_ICT_数据库_Migration_SQL_草案_v1.md create mode 100644 docs/AI_ICT_文档索引与命名规范_v1.md create mode 100644 docs/AI_ICT_第一批正式_Migration_文件草案_v1.md create mode 100644 docs/AI_ICT_第二批正式_Migration_文件草案_v1.md create mode 100644 docs/AI_ICT_重复文档清理计划_v1.md create mode 100644 docs/AI_ICT_项目代码骨架规范_v1.md create mode 100644 docs/AI_ICT_项目启动清单_v1.md create mode 100644 docs/AI_协作自动化工作规程_v1.md create mode 100644 docs/AI_自动化协作迁移清单_v1.md create mode 100644 docs/CLAUDE_template_autonomy_first.md create mode 100644 docs/automation_workflow_migration_checklist.md create mode 100644 docs/标准_CLAUDE_md_模板_v1.md create mode 100644 migrations/.gitkeep create mode 100644 migrations/001_create_venues.sql create mode 100644 migrations/002_create_instruments.sql create mode 100644 migrations/003_create_candles.sql create mode 100644 migrations/004_create_candles_partitions_and_indexes.sql create mode 100644 migrations/005_create_market_sessions.sql create mode 100644 migrations/006_create_swings.sql create mode 100644 migrations/007_create_dealing_ranges.sql create mode 100644 migrations/008_create_liquidity_pools.sql create mode 100644 migrations/009_seed_venues.sql create mode 100644 migrations/010_seed_instruments.sql create mode 100644 migrations/011_create_displacement_events.sql create mode 100644 migrations/012_create_structure_events.sql create mode 100644 migrations/013_create_fvg_zones.sql create mode 100644 migrations/014_create_bias_snapshots.sql create mode 100644 migrations/015_create_trade_signals.sql create mode 100644 migrations/016_create_trade_executions.sql create mode 100644 migrations/017_create_backtest_runs.sql create mode 100644 migrations/018_create_backtest_results.sql create mode 100644 migrations/019_create_sweep_events.sql create mode 100644 pyproject.toml create mode 100644 scripts/apply_migrations.py create mode 100644 scripts/check_db.py create mode 100644 scripts/check_db_connection.py create mode 100755 scripts/deploy_server.exp create mode 100755 scripts/deploy_with_expect.exp create mode 100755 scripts/fix_pg_hba.exp create mode 100644 scripts/run_api_server.py create mode 100644 scripts/run_backtest.py create mode 100644 scripts/run_dev.py create mode 100644 scripts/run_displacement.py create mode 100644 scripts/run_execution.py create mode 100644 scripts/run_fvg.py create mode 100644 scripts/run_liquidity.py create mode 100644 scripts/run_migrations.py create mode 100644 scripts/run_mss.py create mode 100644 scripts/run_okx_backfill.py create mode 100644 scripts/run_pipeline.py create mode 100644 scripts/run_ranges.py create mode 100644 scripts/run_reports.py create mode 100644 scripts/run_session_generator.py create mode 100644 scripts/run_signals.py create mode 100644 scripts/run_sweeps.py create mode 100644 scripts/run_swings.py create mode 100644 scripts/show_models.py create mode 100755 scripts/ssh_diagnose.exp create mode 100644 seeds/.gitkeep create mode 100644 src/__init__.py create mode 100644 src/api/__init__.py create mode 100644 src/api/backtest.py create mode 100644 src/api/candles.py create mode 100644 src/api/health.py create mode 100644 src/api/server.py create mode 100644 src/api/sessions.py create mode 100644 src/api/signals.py create mode 100644 src/config/__init__.py create mode 100644 src/config/constants.py create mode 100644 src/config/sessions.py create mode 100644 src/config/settings.py create mode 100644 src/db/__init__.py create mode 100644 src/db/base.py create mode 100644 src/db/config.py create mode 100644 src/db/engine.py create mode 100644 src/db/session.py create mode 100644 src/domain/__init__.py create mode 100644 src/main.py create mode 100644 src/models/__init__.py create mode 100644 src/models/backtest_result.py create mode 100644 src/models/backtest_run.py create mode 100644 src/models/bias_snapshot.py create mode 100644 src/models/candle.py create mode 100644 src/models/dealing_range.py create mode 100644 src/models/displacement_event.py create mode 100644 src/models/fvg_zone.py create mode 100644 src/models/instrument.py create mode 100644 src/models/liquidity_pool.py create mode 100644 src/models/market_session.py create mode 100644 src/models/structure_event.py create mode 100644 src/models/sweep_event.py create mode 100644 src/models/swing.py create mode 100644 src/models/trade_execution.py create mode 100644 src/models/trade_signal.py create mode 100644 src/models/venue.py create mode 100644 src/repositories/__init__.py create mode 100644 src/repositories/backtest_repository.py create mode 100644 src/repositories/bias_repository.py create mode 100644 src/repositories/candle_repository.py create mode 100644 src/repositories/dealing_range_repository.py create mode 100644 src/repositories/displacement_repository.py create mode 100644 src/repositories/execution_repository.py create mode 100644 src/repositories/fvg_repository.py create mode 100644 src/repositories/liquidity_pool_repository.py create mode 100644 src/repositories/market_session_repository.py create mode 100644 src/repositories/signal_repository.py create mode 100644 src/repositories/structure_repository.py create mode 100644 src/repositories/sweep_repository.py create mode 100644 src/repositories/swing_repository.py create mode 100644 src/services/__init__.py create mode 100644 src/services/backtest/__init__.py create mode 100644 src/services/backtest/backtest_service.py create mode 100644 src/services/bias/__init__.py create mode 100644 src/services/bias/bias_service.py create mode 100644 src/services/displacement/__init__.py create mode 100644 src/services/displacement/displacement_service.py create mode 100644 src/services/execution/__init__.py create mode 100644 src/services/execution/execution_service.py create mode 100644 src/services/fvg/__init__.py create mode 100644 src/services/fvg/fvg_service.py create mode 100644 src/services/liquidity/__init__.py create mode 100644 src/services/liquidity/liquidity_pool_service.py create mode 100644 src/services/market_data/__init__.py create mode 100644 src/services/market_data/normalizer.py create mode 100644 src/services/market_data/okx_client.py create mode 100644 src/services/ranges/__init__.py create mode 100644 src/services/ranges/dealing_range_service.py create mode 100644 src/services/reports/__init__.py create mode 100644 src/services/reports/backtest_report_service.py create mode 100644 src/services/reports/intraday_report_service.py create mode 100644 src/services/reports/post_trade_review_service.py create mode 100644 src/services/reports/pre_market_report_service.py create mode 100644 src/services/sessions/__init__.py create mode 100644 src/services/sessions/session_generator.py create mode 100644 src/services/signals/__init__.py create mode 100644 src/services/signals/signal_service.py create mode 100644 src/services/structure/__init__.py create mode 100644 src/services/structure/mss_service.py create mode 100644 src/services/sweeps/__init__.py create mode 100644 src/services/sweeps/sweep_service.py create mode 100644 src/services/swings/__init__.py create mode 100644 src/services/swings/swing_service.py create mode 100644 src/utils/__init__.py create mode 100644 tests/__init__.py create mode 100644 tests/fixtures/__init__.py create mode 100644 tests/integration/__init__.py create mode 100644 tests/unit/__init__.py create mode 100644 tests/unit/test_api_and_main.py create mode 100644 tests/unit/test_api_server.py create mode 100644 tests/unit/test_backtest_report_service.py create mode 100644 tests/unit/test_backtest_service.py create mode 100644 tests/unit/test_execution_service.py create mode 100644 tests/unit/test_fvg_service.py create mode 100644 tests/unit/test_liquidity_pool_service.py create mode 100644 tests/unit/test_mss_service.py create mode 100644 tests/unit/test_report_services.py create mode 100644 tests/unit/test_signal_service.py diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..60635a9 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,12 @@ +__pycache__/ +*.pyc +*.pyo +*.pyd +.pytest_cache/ +.venv/ +venv/ +tests/ +docs/ +*.pdf +memory/ +.DS_Store diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..1875322 --- /dev/null +++ b/.env.example @@ -0,0 +1,6 @@ +DATABASE_URL=postgresql+psycopg://postgres:postgres@localhost:5432/ai_ict +OKX_BASE_URL=https://www.okx.com +OKX_TIMEOUT=30 +DEFAULT_TIMEZONE=UTC +SESSION_TIMEZONE=America/New_York +LOG_LEVEL=INFO diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..289812f --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +# Python +__pycache__/ +*.py[cod] +.pytest_cache/ +.venv/ +venv/ + +# Environment and secrets +.env +*.pem +*.key + +# OS/editor +.DS_Store +.idea/ +.vscode/ + +# Claude local state +.claude/ +memory/ + +# Large artifacts and local docs copies +*.pdf diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..fff21ca --- /dev/null +++ b/Dockerfile @@ -0,0 +1,28 @@ +FROM python:3.11-slim + +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 \ + PYTHONPATH=/app + +WORKDIR /app + +COPY pyproject.toml /app/pyproject.toml +RUN pip install --no-cache-dir --upgrade pip && \ + pip install --no-cache-dir \ + "sqlalchemy>=2.0" \ + "psycopg[binary]>=3.1" \ + "pydantic>=2.7" \ + "pydantic-settings>=2.2" \ + "httpx>=0.27" + +COPY src /app/src +COPY scripts /app/scripts +COPY migrations /app/migrations +COPY .env.example /app/.env.example +COPY README.md /app/README.md + +EXPOSE 8000 + +HEALTHCHECK --interval=30s --timeout=5s --retries=3 CMD python -c "from urllib.request import urlopen; import sys; sys.exit(0 if urlopen('http://127.0.0.1:8000/health').status == 200 else 1)" + +CMD ["python", "scripts/run_api_server.py"] diff --git a/ICT Concepts.md b/ICT Concepts.md new file mode 100644 index 0000000..b5e65bc --- /dev/null +++ b/ICT Concepts.md @@ -0,0 +1,2477 @@ +# ICT Concepts + +// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/ + +// © LuxAlgo + + + + + +//@version=5 + +indicator("ICT Concepts \[LuxAlgo]",max\_lines\_count=500,max\_boxes\_count=500,max\_labels\_count=500,max\_bars\_back=3000,overlay=true) + +//-----------------------------------------------------------------------------} + +//Strings + +//-----------------------------------------------------------------------------{ + +o='Options' + +sp1=' ' + +sp2=' ' + +hl='High / Low '+sp1 + +ny\_='New York'+sp1 + +lo\_='London Open' + +lc\_='London Close' + +as\_='Asian' + + + + + +//-----------------------------------------------------------------------------} + +//Settings + +//-----------------------------------------------------------------------------{ + +i\_mode=input.string( 'Present',title='Mode',options=\['Present','Historical'] ) + + + + + +//Market Structure Shift + +showMS=input.bool ( true,title='',group='Market Structures',inline='MS' ) + +len=input.int ( 5,title=' Length '+sp2,group='Market Structures',inline='MS',minval=3,maxval=10 ) + + + + + +iMSS=input.bool ( true,title=' MSS'+sp1,group='Market Structures',inline='M1' ) + +cMSSbl=input.color (color.new(#00e6a1,0),title='bullish',group='Market Structures',inline='M1' ) + +cMSSbr=input.color (color.new(#e60400,0),title='bearish',group='Market Structures',inline='M1' ) + + + + + +iBOS=input.bool ( true,title=' BOS'+sp1,group='Market Structures',inline='BS' ) + +cBOSbl=input.color (color.new(#00e6a1,0),title='bullish',group='Market Structures',inline='BS' ) + +cBOSbr=input.color (color.new(#e60400,0),title='bearish',group='Market Structures',inline='BS' ) + + + + + +//Displacement + +sDispl=input.bool ( false,title='Show Displacement',group='Displacement' ) + + + + + +perc\_Body=0.36// input.int( 36, minval=1, maxval=36) / 100 + +bxBack=10// input.int( 10, minval=0, maxval=10) + + + + + +sVimbl=input.bool ( true,title='',group='Volume Imbalance',inline='VI' ) + +visVim=input.int ( 2,title=" # Visible VI's "+sp1,group='Volume Imbalance',inline='VI',minval=2,maxval=100 ) + +cVimbl=input.color (color.new(#06b2d0,0),title='',group='Volume Imbalance',inline='VI' ) + + + + + +//Order Blocks + +showOB=input.bool ( true,title='Show Order Blocks',group='Order Blocks' ) + +length=input.int ( 10,title='Swing Lookback',group='Order Blocks',minval=3 ) + +showBull=input.int ( 1,title='Show Last Bullish OB',group='Order Blocks',minval=0 ) + +showBear=input.int ( 1,title='Show Last Bearish OB',group='Order Blocks',minval=0 ) + +useBody=input.bool ( true,title='Use Candle Body' ) + + + + + +//OB Style + +bullCss=input.color (color.new(#3e89fa,0),title='Bullish OB ',group='Order Blocks',inline='bullcss' ) + +bullBrkCss=input.color (color.new(#4785f9,85),title='Bullish Break ',group='Order Blocks',inline='bullcss' ) + + + + + +bearCss=input.color (color.new(#FF3131,0),title='Bearish OB',group='Order Blocks',inline='bearcss' ) + +bearBrkCss=input.color (color.new(#f9ff57,85),title='Bearish Break',group='Order Blocks',inline='bearcss' ) + + + + + +showLabels=input.bool ( false,title='Show Historical Polarity Changes',group='Order Blocks' ) + + + + + +//Liquidity + +showLq=input.bool ( true,title='Show Liquidity',group='Liquidity' ) + +a=10/input.float ( 4,title='margin',group='Liquidity',step=0.1,minval=2,maxval=7 ) + +visLiq=input.int ( 2,title='# Visible Liq. boxes',group='Liquidity' + +,minval=1,maxval=50,tooltip='In the same direction' ) + +cLIQ\_B=input.color (color.new(#fa451c,0),title='Buyside Liquidity ',group='Liquidity' ) + +cLIQ\_S=input.color (color.new(#1ce4fa,0),title='Sellside Liquidity',group='Liquidity' ) + + + + + +//FVG + +shwFVG=input.bool ( true,title='Show FVGs',group='Fair Value Gaps' ) + +i\_BPR=input.bool ( false,title='Balance Price Range',group='Fair Value Gaps' ) + +i\_FVG=input.string( 'FVG',title=o,group='Fair Value Gaps',options=\['FVG','IFVG'] + +,tooltip='Fair Value Gaps\nor\nImplied Fair Value Gaps' ) + +visBxs=input.int ( 2,title='# Visible FVG\\'s',group='Fair Value Gaps' + +,minval=1,maxval=20,tooltip='In the same direction' ) + + + + + +//FVG Style + +cFVGbl=input.color (color.new(#00e676,0),title='Bullish FVG ',group='Fair Value Gaps',inline='FVGbl' ) + +cFVGblBR=input.color (color.new(#808000,0),title='Break',group='Fair Value Gaps',inline='FVGbl' ) + +cFVGbr=input.color (color.new(#ff5252,0),title='Bearish FVG ',group='Fair Value Gaps',inline='FVGbr' ) + +cFVGbrBR=input.color (color.new(#FF0000,0),title='Break',group='Fair Value Gaps',inline='FVGbr' ) + + + + + +//NWOG/NDOG + +iNWOG=input.bool ( true,title='',inline='NWOG',group='NWOG/NDOG' ) + +cNWOG1=input.color (color.new(#ff5252,28),title='NWOG ',inline='NWOG',group='NWOG/NDOG' ) + +cNWOG2=input.color (color.new(#b2b5be,50),title='',inline='NWOG',group='NWOG/NDOG' ) + +maxNWOG=input.int ( 3,title='Show max',inline='NWOG',group='NWOG/NDOG',minval=0,maxval=50 ) + + + + + +iNDOG=input.bool ( false,title='',inline='NDOG',group='NWOG/NDOG' ) + +cNDOG1=input.color (color.new(#ff9800,20),title='NDOG ',inline='NDOG',group='NWOG/NDOG' ) + +cNDOG2=input.color (color.new(#4dd0e1,65),title='',inline='NDOG',group='NWOG/NDOG' ) + +maxNDOG=input.int ( 1,title='Show max',inline='NDOG',group='NWOG/NDOG',minval=0,maxval=50 ) + + + + + +//Fibonacci + +iFib=input.string( 'NONE',title='Fibonacci between last: ',group='Fibonacci',options=\['FVG','BPR','OB','Liq','VI','NWOG','NONE']) + +iExt=input.bool ( false,title='Extend lines',group='Fibonacci' ) + + + + + +//Killzones + +showKZ=input.bool ( false,title='Show Killzones',group='Killzones' ) + +//New York + +showNy=input.bool ( true,title=ny\_,inline='ny',group='Killzones' ) andshowKZ + +nyCss=input.color (color.new(#ff5d00,93),title='',inline='ny',group='Killzones' ) + +//London Open + +showLdno=input.bool ( true,title=lo\_,inline='lo',group='Killzones' ) andshowKZ + +ldnoCss=input.color (color.new(#00bcd4,93),title='',inline='lo',group='Killzones' ) + +//London Close + +showLdnc=input.bool ( true,title=lc\_,inline='lc',group='Killzones' ) andshowKZ + +ldncCss=input.color (color.new(#2157f3,93),title='',inline='lc',group='Killzones' ) + +//Asian + +showAsia=input.bool ( true,title=as\_+sp2,inline='as',group='Killzones' ) andshowKZ + +asiaCss=input.color (color.new(#e91e63,93),title='',inline='as',group='Killzones' ) + + + + + +//-----------------------------------------------------------------------------} + +//General Calculations + +//-----------------------------------------------------------------------------{ + +n=bar\_index + +hi=high + +lo=low + +tf\_msec=timeframe.in\_seconds(timeframe.period) \*1000 + +maxSize=50 + +atr=ta.atr(10) + +per=i\_mode=='Present'?last\_bar\_index-bar\_index<=500:true + +perB=last\_bar\_index-bar\_index<=1000?true:false + +xloc=iFib=='OB'?xloc.bar\_time:xloc.bar\_index + +ext=iExt?extend.right:extend.none + +plus=iFib=='OB'?tf\_msec\*50:50 + +mx=math.max(close,open) + +mn=math.min(close,open) + +body=math.abs(close-open) + +meanBody=ta.sma (body,len) + +max=useBody?mx:high + +min=useBody?mn:low + +blBrkConf=0 + +brBrkConf=0 + +r=color.r(chart.bg\_color) + +g=color.g(chart.bg\_color) + +b=color.b(chart.bg\_color) + +isDark=r<80andg<80andb<80 + + + + + +//-----------------------------------------------------------------------------} + +//User Defined Types + +//-----------------------------------------------------------------------------{ + +typeZZ + +int \[] d + +int \[] x + +float \[] y + +bool \[] b + + + + + +typeln\_d + +linel + +intd + + + + + +type\_2ln\_lb + +linel1 + +linel2 + +labellb + + + + + +typebx\_ln + +boxb + +linel + + + + + +typebx\_ln\_lb + +boxbx + +lineln + +labellb + + + + + +typemss + +intdir + +line \[] l\_mssBl + +line \[] l\_mssBr + +line \[] l\_bosBl + +line \[] l\_bosBr + +label\[] lbMssBl + +label\[] lbMssBr + +label\[] lbBosBl + +label\[] lbBosBr + + + + + +typeliq + +boxbx + +boolbroken + +boolbrokenTop + +boolbrokenBtm + +lineln + + + + + +typeob + +floattop=na + +floatbtm=na + +intloc=bar\_index + +boolbreaker=false + +intbreak\_loc=na + + + + + +typeswing + +floaty=na + +intx=na + +boolcrossed=false + + + + + +typeFVG + +boxbox + +boolactive + +intpos + + + + + +varmssMSS=mss.new( + +0 + +,array.new\() + +,array.new\() + +,array.new\() + +,array.new\() + +,array.new\