Skill: tangweigang-jpg/hummingbot-market-maker (version 0.3.3)

--- name: hummingbot-market-maker description: |- 使用Hummingbot框架执行加密货币做市和套利策略，支持资金费率套利、流动性提供、价格监控等自动化交易场景。 license: Proprietary. See LICENSE.txt in project root. compatibility: Designed for Doramagic-host ecosystem (Claude Code / openclaw / Cursor). Requires Python 3.12+ with uv package manager. metadata: version: "v6.1" blueprint_id: "finance-bp-096" compiled_at: "2026-04-22T13:00:42.333686+00:00" capability_markets: "crypto" capability_activities: "crypto-trading" sop_version: "crystal-compilation-v6.1" --- # Hummingbot 做市机器人 (hummingbot-market-maker) > 使用Hummingbot框架执行加密货币做市和套利策略，支持资金费率套利、流动性提供、价格监控等自动化交易场景。 ## Pipeline `data_collection -> data_storage -> factor_computation -> target_selection -> trading_execution -> visualization` ## Top Use Cases (14 total) ### Funding Rate Arbitrage (`UC-101`) Exploits funding rate differences between perpetual exchanges (e.g., Hyperliquid and Binance) to generate risk-adjusted returns using leverage **Triggers**: funding rate, arbitrage, perpetual ### XRPL Triggered Liquidity Provision (`UC-103`) Provides liquidity on XRPL (Ripple Ledger) decentralized exchange when price crosses user-defined target levels **Triggers**: xrpl, ripple, liquidity ### Simple Cross Exchange Market Making (XEMM) (`UC-108`) Places maker orders on one exchange and immediately hedges/hedging filled orders on another exchange to capture spread **Triggers**: xemm, cross-exchange, market making For all **14** use cases, see [references/USE_CASES.md](references/USE_CASES.md). **Execute trigger**: `When user intent matches intent_router.uc_entries[].positive_terms AND user uses action verb (run/execute/跑/执行/backtest/fetch/collect)` ## What I'll Ask You - Target market: A-share (default), HK, or crypto? (US stocks in ZVT are half-baked — stockus_nasdaq_AAPL exists but coverage is thin) - Data source / provider: eastmoney (free, no account), joinquant (account+paid), baostock (free, good history), akshare, or qmt (broker)? - Strategy type: MACD golden-cross, MA crossover, volume breakout, fundamental screen, or custom factor? - Time range: start_timestamp and end_timestamp for backtest period - Target entity IDs: specific stocks (stock_sh_600000) or index components (SZ1000)? ## Semantic Locks (Fatal) | ID | Rule | On Violation | |---|---|---| | `SL-01` | Execute sell orders before buy orders in every trading cycle | halt | | `SL-02` | Trading signals MUST use next-bar execution (no look-ahead) | halt | | `SL-03` | Entity IDs MUST follow format entity_type_exchange_code | halt | | `SL-04` | DataFrame index MUST be MultiIndex (entity_id, timestamp) | halt | | `SL-05` | TradingSignal MUST have EXACTLY ONE of: position_pct, order_money, order_amount | halt | | `SL-06` | filter_result column semantics: True=BUY, False=SELL, None/NaN=NO ACTION | halt | | `SL-07` | Transformer MUST run BEFORE Accumulator in factor pipeline | halt | | `SL-08` | MACD parameters locked: fast=12, slow=26, signal=9 | halt | Full lock definitions: [references/LOCKS.md](references/LOCKS.md) ## Top Anti-Patterns (13 total) - **`AP-CRYPTO-TRADING-001`**: Float Arithmetic for Monetary Values - **`AP-CRYPTO-TRADING-002`**: Missing Market Initialization Before Access - **`AP-CRYPTO-TRADING-003`**: Bypassing API Facade Layer All 13 anti-patterns: [references/ANTI_PATTERNS.md](references/ANTI_PATTERNS.md) ## Evidence Quality Notice > [QUALITY NOTICE] This crystal was compiled from blueprint finance-bp-096. Evidence verify ratio = 46.3% and audit fail total = 30. Generated results may have uncaptured requirement gaps. Verify critical decisions against source files (LATEST.yaml / LATEST.jsonl). ## Reference Files | File | Contents | When to Load | |---|---|---| | [references/seed.yaml](references/seed.yaml) | V6+ 全量权威 (source-of-truth) | 有行为/决策争议时必读 | | [references/ANTI_PATTERNS.md](references/ANTI_PATTERNS.md) | 13 条跨项目反模式 | 开始实现前 | | [references/WISDOM.md](references/WISDOM.md) | 跨项目精华借鉴 | 架构决策时 | | [references/CONSTRAINTS.md](references/CONSTRAINTS.md) | domain + fatal 约束 | 规则冲突时 | | [references/USE_CASES.md](references/USE_CASES.md) | 全量 KUC-* 业务场景 | 需要完整示例时 | | [references/LOCKS.md](references/LOCKS.md) | SL-* + preconditions + hints | 生成回测/交易代码前 | | [references/COMPONENTS.md](references/COMPONENTS.md) | AST 组件地图（按 module 拆分）| 查 API 时 | --- *Compiled by Doramagic crystal-compilation-v6.1 from `finance-bp-096` blueprint at 2026-04-22T13:00:42.333686+00:00.* *See [human_summary.md](human_summary.md) for non-technical overview.*

path: human_summary.md
content: # Human Summary

> I help you build quant strategies on A-share with ZVT — from data fetch to backtest, one flow. Just tell me what you want; I'll write the code, you don't have to dig docs. (Heads up: ZVT natively supports A-share, HK, and crypto. US stocks — stockus_nasdaq_AAPL — are half-baked; don't bother for serious work.)

## What I Can Do

- **tagline**: I help you build quant strategies on A-share with ZVT — from data fetch to backtest, one flow. Just tell me what you want; I'll write the code, you don't have to dig docs. (Heads up: ZVT natively supports A-share, HK, and crypto. US stocks — stockus_nasdaq_AAPL — are half-baked; don't bother for serious work.)
- **use_cases**: ['XRPL Triggered Liquidity Provision', 'Price Logging Example', 'Funding Rate Arbitrage', 'A-share MACD daily golden-cross backtest with hfq price adjustment from eastmoney', 'End-to-end ZVT pipeline: FinanceRecorder + GoodCompanyFactor + StockTrader', 'Multi-factor strategy with TargetSelector (AND mode) combining MACD + volume breakout', 'Index composition data collection (SZ1000, SZ2000) with EM recorder']

## What I Ask You

- Target market: A-share (default), HK, or crypto? (US stocks in ZVT are half-baked — stockus_nasdaq_AAPL exists but coverage is thin)
- Data source / provider: eastmoney (free, no account), joinquant (account+paid), baostock (free, good history), akshare, or qmt (broker)?
- Strategy type: MACD golden-cross, MA crossover, volume breakout, fundamental screen, or custom factor?
- Time range: start_timestamp and end_timestamp for backtest period
- Target entity IDs: specific stocks (stock_sh_600000) or index components (SZ1000)?


path: references/ANTI_PATTERNS.md
content: # Anti-Patterns (Cross-Project)

Total: **13**

## ccxt (1)

### `AP-CRYPTO-TRADING-002` — Missing Market Initialization Before Access <sub>(high)</sub>

Attempting to access market data via symbol lookups before load_markets() is called leaves self.markets empty, causing KeyError or BadSymbol exceptions on all trading operations and data retrieval. This breaks the entire trading workflow at the first market interaction.

## cryptofeed (3)

### `AP-CRYPTO-TRADING-009` — Applying Order Book Deltas Before Snapshot <sub>(high)</sub>

Processing order book delta messages before receiving a snapshot for the symbol applies updates to an uninitialized or stale book state. Price levels are incorrectly added/removed, corrupting the local book representation with no way to recover without full reset.

### `AP-CRYPTO-TRADING-010` — Silent HTTP Error Handling <sub>(medium)</sub>

Ignoring non-200 HTTP response status codes without raising exceptions causes silent failures for data requests. Market data is missing or corrupted, failed requests are not retried, and downstream consumers receive incomplete data with no indication of failure.

### `AP-CRYPTO-TRADING-011` — Missing Sequence Number Validation <sub>(medium)</sub>

Not validating that order book sequence numbers increment by exactly 1 allows out-of-order or missing messages to corrupt local book state. Stale or incorrect price levels persist in the book, leading to wrong trading signals and corrupted market depth data.

## hummingbot (5)

### `AP-CRYPTO-TRADING-005` — Unvalidated Collateral for Order Execution <sub>(high)</sub>

Submitting orders without checking collateral requirements including order cost, percent fees, and fixed fees against available balance causes orders to exceed margin. This triggers immediate liquidation or forced position closure at unfavorable prices with partial or total loss of collateral.

### `AP-CRYPTO-TRADING-006` — Close Order Placed Before Open Order Fills <sub>(high)</sub>

Placing a close order before verifying the open order is fully filled causes mismatched position sizes. The executor attempts to close a larger or smaller position than actually exists, leading to unintended directional exposure and potential losses exceeding the configured risk parameters.

### `AP-CRYPTO-TRADING-007` — Arbitrage Across Non-Interchangeable Tokens <sub>(high)</sub>

Executing arbitrage trades between tokens that appear similar but are not interchangeable causes permanent loss of funds. The received tokens cannot be used to close the opposing position, stranding capital and creating one-sided exposure with no recovery path.

### `AP-CRYPTO-TRADING-008` — Skipping Triple Barrier Evaluations <sub>(high)</sub>

Omitting control_stop_loss, control_take_profit, or control_time_limit calls in the control_barriers cycle leaves positions unprotected. Losses exceed configured thresholds as barrier checks never trigger, positions remain open beyond risk tolerance, resulting in amplified losses.

### `AP-CRYPTO-TRADING-012` — Wrong Position Key for Perpetual Modes <sub>(medium)</sub>

Using trading_pair only as the position key in HEDGE mode causes different position sides to collide and overwrite each other. Position tracking becomes incorrect, leading to wrong order matching and potential financial loss when the system misidentifies position direction.

## rotki (3)

### `AP-CRYPTO-TRADING-003` — Bypassing API Facade Layer <sub>(high)</sub>

Directly accessing internal service methods without routing through the RestAPI facade bypasses authentication, task tracking, and error handling mechanisms. Anonymous requests can execute privileged operations, creating critical security vulnerabilities where unauthorized users access sensitive financial data or execute trades.

### `AP-CRYPTO-TRADING-004` — Non-Checksummed EVM Addresses <sub>(high)</sub>

Passing lowercase or mixed-case Ethereum addresses to RPC nodes causes InvalidAddress exceptions since nodes enforce EIP-55 checksum format. This results in RemoteError failures that halt all blockchain data collection for the affected chain, with no graceful degradation or fallback.

### `AP-CRYPTO-TRADING-013` — Overwriting User-Customized Event Classifications <sub>(medium)</sub>

Re-decoding operations silently replace user-modified events marked as CUSTOMIZED without explicit user action. User edits to event classifications are permanently lost, causing incorrect accounting treatment and potential tax reporting errors that may not be detected until audit.

## rotki, hummingbot, cryptofeed, ccxt (1)

### `AP-CRYPTO-TRADING-001` — Float Arithmetic for Monetary Values <sub>(high)</sub>

Using Python float type instead of Decimal for price, amount, balance, PnL, and other financial calculations causes precision errors due to binary floating-point representation. Rounding errors compound across multiple calculations, leading to incorrect order sizing, wrong profit/loss reporting, and potentially incorrect trading decisions or tax calculations.


path: references/COMPONENTS.md
content: # Component Capability Map

**Project**: finance-bp-096--hummingbot
**Scan date**: 2026-04-22
**Stats**: {'total_files': 8, 'total_classes': 41, 'total_functions': 0, 'total_stages': 8}

## Modules (8)

- [market_data_layer](components/market_data_layer.md): 5 classes
- [position_management_layer](components/position_management_layer.md): 4 classes
- [execution_control_(controllers)](components/execution_control_-controllers.md): 6 classes
- [executor_execution_layer](components/executor_execution_layer.md): 6 classes
- [orchestration_layer](components/orchestration_layer.md): 5 classes
- [backtesting_layer](components/backtesting_layer.md): 5 classes
- [cli_interface_layer](components/cli_interface_layer.md): 5 classes
- [gateway_integration](components/gateway_integration.md): 5 classes


path: references/CONSTRAINTS.md
content: # Constraints

## preservation_manifest

```yaml
required_objects:
  business_decisions_count: 149
  fatal_constraints_count: 55
  non_fatal_constraints_count: 248
  use_cases_count: 14
  semantic_locks_count: 12
  preconditions_count: 4
  evidence_quality_rules_count: 2
  traceback_scenarios_count: 5

```


path: references/LOCKS.md
content: # Semantic Locks + Preconditions

## Semantic Locks (12)

### `SL-01` <sub>(on_violation: fatal)</sub>
Execute sell orders before buy orders in every trading cycle

### `SL-02` <sub>(on_violation: fatal)</sub>
Trading signals MUST use next-bar execution (no look-ahead)

### `SL-03` <sub>(on_violation: fatal)</sub>
Entity IDs MUST follow format entity_type_exchange_code

### `SL-04` <sub>(on_violation: fatal)</sub>
DataFrame index MUST be MultiIndex (entity_id, timestamp)

### `SL-05` <sub>(on_violation: fatal)</sub>
TradingSignal MUST have EXACTLY ONE of: position_pct, order_money, order_amount

### `SL-06` <sub>(on_violation: fatal)</sub>
filter_result column semantics: True=BUY, False=SELL, None/NaN=NO ACTION

### `SL-07` <sub>(on_violation: fatal)</sub>
Transformer MUST run BEFORE Accumulator in factor pipeline

### `SL-08` <sub>(on_violation: fatal)</sub>
MACD parameters locked: fast=12, slow=26, signal=9

### `SL-09` <sub>(on_violation: warning)</sub>
Default transaction costs: buy_cost=0.001, sell_cost=0.001, slippage=0.001

### `SL-10` <sub>(on_violation: fatal)</sub>
A-share equity trading is T+1 (no same-day close of buy positions)

### `SL-11` <sub>(on_violation: fatal)</sub>
Recorder subclass MUST define provider AND data_schema class attributes

### `SL-12` <sub>(on_violation: fatal)</sub>
Factor result_df MUST contain either 'filter_result' OR 'score_result' column

## Preconditions (4)

- **`PC-01`**: `python3 -c 'import zvt; print(zvt.__version__)'` → on_fail: Run: python3 -m pip install zvt then re-run: python3 -m zvt.init_dirs to initialize data directories
- **`PC-02`**: `python3 -c "from zvt.api.kdata import get_kdata; df = get_kdata(entity_ids=['stock_sh_600000'], limit=1); assert df is not None and len(df) > 0, 'No kdata found'"` → on_fail: Run recorder first: python3 -m zvt.recorders.em.em_stock_kdata_recorder --entity_ids stock_sh_600000 (replace with your target entity IDs)
- **`PC-03`**: `python3 -c "import os; from pathlib import Path; zvt_home = Path(os.environ.get('ZVT_HOME', Path.home() / '.zvt')); assert zvt_home.exists(), f'ZVT home not found: {zvt_home}'"` → on_fail: Run: python3 -m zvt.init_dirs
- **`PC-04`**: `python3 -c "import os, tempfile; from pathlib import Path; zvt_home = Path(os.environ.get('ZVT_HOME', Path.home() / '.zvt')); test_f = zvt_home / '.write_test'; test_f.touch(); test_f.unlink()"` → on_fail: Check directory permissions: chmod u+w ~/.zvt or set ZVT_HOME environment variable to a writable location


path: references/USE_CASES.md
content: # Known Use Cases (KUC)

Total: **14**

## `KUC-101`
**Source**: `scripts/v2_funding_rate_arb.py`

Exploits funding rate differences between perpetual exchanges (e.g., Hyperliquid and Binance) to generate risk-adjusted returns using leverage.

## `KUC-102`
**Source**: `scripts/log_price_example.py`

Demonstrates how to retrieve and log market prices (best bid, best ask, mid price) from multiple exchanges for monitoring purposes.

## `KUC-103`
**Source**: `scripts/xrpl_liquidity_example.py`

Provides liquidity on XRPL (Ripple Ledger) decentralized exchange when price crosses user-defined target levels.

## `KUC-104`
**Source**: `scripts/download_order_book_and_trades.py`

Collects and exports historical order book snapshots and trade data to CSV files for backtesting and analysis.

## `KUC-105`
**Source**: `scripts/external_events_example.py`

Demonstrates how to use the MQTT external events plugin to subscribe to external topics and receive/process messages.

## `KUC-106`
**Source**: `scripts/amm_data_feed_example.py`

Fetches and displays real-time price data from AMM DEX connectors (Jupiter, Uniswap) via the Gateway for analysis.

## `KUC-107`
**Source**: `scripts/screener_volatility.py`

Scans multiple trading pairs to identify highly volatile instruments using Bollinger Bands width, percentage, and NATR indicators.

## `KUC-108`
**Source**: `scripts/simple_xemm.py`

Places maker orders on one exchange and immediately hedges/hedging filled orders on another exchange to capture spread.

## `KUC-109`
**Source**: `scripts/format_status_example.py`

Demonstrates how to add custom status display formatting to a strategy using format_status method and market status dataframes.

## `KUC-110`
**Source**: `scripts/simple_pmm.py`

Provides liquidity by placing bid and ask orders around the mid price with configurable spreads, refreshing at set intervals.

## `KUC-111`
**Source**: `scripts/v2_with_controllers.py`

Runs a multi-controller strategy with features like cash-out scheduling, dynamic config reloading, and drawdown protection.

## `KUC-112`
**Source**: `scripts/candles_example.py`

Demonstrates how to initialize and consume candles data feeds for multiple trading pairs and timeframes without requiring market trading.

## `KUC-113`
**Source**: `scripts/xrpl_arb_example.py`

Exploits price differences between XRPL decentralized exchange and centralized exchanges for risk-free profit opportunities.

## `KUC-114`
**Source**: `scripts/simple_vwap.py`

Executes large buy or sell orders using Volume Weighted Average Price algorithm, splitting orders to minimize market impact.


path: references/WISDOM.md
content: # Cross-Project Wisdom

Total: **8**

## `CW-CRYPTO-TRADING-001` — Decimal Type for All Monetary Values
**From**: rotki, hummingbot, cryptofeed, ccxt · **Applicable to**: crypto-trading

All four projects mandate Decimal type for price, amount, balance, quantity, and PnL fields. Float arithmetic causes rounding errors that compound across financial calculations, leading to incorrect order sizing and reporting. Always use Decimal for any value representing money in crypto trading systems.

## `CW-CRYPTO-TRADING-002` — Initialize Data Structures Before Access
**From**: ccxt, cryptofeed, rotki · **Applicable to**: crypto-trading

Projects consistently require explicit initialization before data access: load_markets() before symbol lookups, check symbol population before mapping access, establish RPC connections before queries. Skipping initialization causes KeyError, AttributeError, or silent data corruption that breaks downstream operations.

## `CW-CRYPTO-TRADING-003` — Precise String Arithmetic for Financial Calculations
**From**: ccxt · **Applicable to**: crypto-trading

CCXT mandates Precise.string_* static methods (string_mul, string_div, string_add, string_sub) for monetary calculations to avoid floating-point precision errors. This is especially critical for high-precision exchange data where rounding errors cause incorrect order costs, fees, and balances that may result in financial loss.

## `CW-CRYPTO-TRADING-004` — Respect Exchange Rate Limits
**From**: ccxt · **Applicable to**: crypto-trading

Disabling rate limiting via enableRateLimit=False causes HTTP 429 responses and potential temporary or permanent API key suspension by exchanges. CCXT enforces rate limits per IP/API key pair, and bypassing throttle() gates results in compliance violations that disrupt all trading activity until exchanges lift bans.

## `CW-CRYPTO-TRADING-005` — Inverse Contract Price Adjustment
**From**: ccxt, hummingbot · **Applicable to**: crypto-trading

Perpetual swap cost calculations require applying inverse price adjustment (1/price) before multiplying by contractSize for inverse contracts. Incorrect cost calculation causes wrong position sizing, leading to unexpected liquidation or insufficient margin for perpetual trading positions.

## `CW-CRYPTO-TRADING-006` — Strict Connection Lifecycle Ordering
**From**: cryptofeed, ccxt · **Applicable to**: crypto-trading

Both projects enforce strict execution order for connection operations: cryptofeed requires authenticate -> subscribe -> message handler sequence, while ccxt mandates connect -> on_connected_callback -> subscriptions -> on_close_callback. Out-of-order operations cause subscription failures and no data flow through connections.

## `CW-CRYPTO-TRADING-007` — Validate Input Data Structure Before Processing
**From**: rotki, cryptofeed · **Applicable to**: crypto-trading

Rotki validates EVM address checksum format before RPC calls; cryptofeed checks Symbols.populated() before symbol mapping access. Validating data structure before processing prevents downstream crashes (KeyError, InvalidAddress) and data corruption that is harder to debug when symptoms appear in unrelated code paths.

## `CW-CRYPTO-TRADING-008` — Validate Order Sizes Against Exchange Minimums
**From**: hummingbot · **Applicable to**: crypto-trading

DCAExecutor amounts must be validated against min_notional_size and amounts_quote/prices against min_order_size before execution. Orders below exchange minimums are rejected, breaking strategy execution and potentially leaving positions partially unfilled at unfavorable prices.


path: references/components/backtesting_layer.md
content: # backtesting_layer (5 classes)

## `BacktestingEngineBase.run_backtesting`
`backtesting_layer/backtestingenginebase-run-backtesting.py:0`

## `ExecutorSimulatorBase.simulate_fill`
`backtesting_layer/executorsimulatorbase-simulate-fill.py:0`

## `PositionExecutorSimulator.evaluate_barriers`
`backtesting_layer/positionexecutorsimulator-evaluate-barri.py:0`

## `DCAExecutorSimulator.get_break_even_price`
`backtesting_layer/dcaexecutorsimulator-get-break-even-pric.py:0`

## `backtesting_resolution`
`backtesting_layer/backtesting-resolution.py:0`


path: references/components/cli_interface_layer.md
content: # cli_interface_layer (5 classes)

## `HummingbotApplication.start`
`cli_interface_layer/hummingbotapplication-start.py:0`

## `CreateCommand.create`
`cli_interface_layer/createcommand-create.py:0`

## `StartCommand.start`
`cli_interface_layer/startcommand-start.py:0`

## `ConfigCommand.config`
`cli_interface_layer/configcommand-config.py:0`

## `rate_source`
`cli_interface_layer/rate-source.py:0`


path: references/components/execution_control_-controllers.md
content: # execution_control_(controllers) (6 classes)

## `ControllerBase.determine_executor_actions`
`execution_control_(controllers)/controllerbase-determine-executor-action.py:0`

## `DirectionalTradingControllerBase.evaluate_signals`
`execution_control_(controllers)/directionaltradingcontrollerbase-evaluat.py:0`

## `MarketMakingControllerBase.get_level_configs`
`execution_control_(controllers)/marketmakingcontrollerbase-get-level-con.py:0`

## `ControllerBase.update_processed_data`
`execution_control_(controllers)/controllerbase-update-processed-data.py:0`

## `trading_strategy`
`execution_control_(controllers)/trading-strategy.py:0`

## `execution_strategy`
`execution_control_(controllers)/execution-strategy.py:0`


path: references/components/executor_execution_layer.md
content: # executor_execution_layer (6 classes)

## `ExecutorBase.execute_actions`
`executor_execution_layer/executorbase-execute-actions.py:0`

## `PositionExecutor.control_barriers`
`executor_execution_layer/positionexecutor-control-barriers.py:0`

## `DCAExecutor.execute_trade`
`executor_execution_layer/dcaexecutor-execute-trade.py:0`

## `ArbitrageExecutor.check_arbitrage_opportunity`
`executor_execution_layer/arbitrageexecutor-check-arbitrage-opport.py:0`

## `executor_type`
`executor_execution_layer/executor-type.py:0`

## `close_type`
`executor_execution_layer/close-type.py:0`


path: references/components/gateway_integration.md
content: # gateway_integration (5 classes)

## `GatewayHttpClient.get_balance`
`gateway_integration/gatewayhttpclient-get-balance.py:0`

## `GatewayHttpClient.amm_swap`
`gateway_integration/gatewayhttpclient-amm-swap.py:0`

## `GatewayHttpClient.clmm_position_info`
`gateway_integration/gatewayhttpclient-clmm-position-info.py:0`

## `GatewayHttpClient.get_allowances`
`gateway_integration/gatewayhttpclient-get-allowances.py:0`

## `gateway_chain`
`gateway_integration/gateway-chain.py:0`


path: references/components/market_data_layer.md
content: # market_data_layer (5 classes)

## `MarketDataProvider.get_price_by_indicator`
`market_data_layer/marketdataprovider-get-price-by-indicato.py:0`

## `MarketDataProvider.get_order_book`
`market_data_layer/marketdataprovider-get-order-book.py:0`

## `MarketDataProvider.get_candles`
`market_data_layer/marketdataprovider-get-candles.py:0`

## `RateOracle.get_rate`
`market_data_layer/rateoracle-get-rate.py:0`

## `price_data_sources`
`market_data_layer/price-data-sources.py:0`


path: references/components/orchestration_layer.md
content: # orchestration_layer (5 classes)

## `ExecutorOrchestrator.execute_actions`
`orchestration_layer/executororchestrator-execute-actions.py:0`

## `StrategyV2Base.on_tick`
`orchestration_layer/strategyv2base-on-tick.py:0`

## `MarketsRecorder.save_filled_order`
`orchestration_layer/marketsrecorder-save-filled-order.py:0`

## `PositionHold.get_unified_position`
`orchestration_layer/positionhold-get-unified-position.py:0`

## `backtesting_engine`
`orchestration_layer/backtesting-engine.py:0`


path: references/components/position_management_layer.md
content: # position_management_layer (4 classes)

## `PerpetualTrading.get_position`
`position_management_layer/perpetualtrading-get-position.py:0`

## `BudgetChecker.adjust_candidate`
`position_management_layer/budgetchecker-adjust-candidate.py:0`

## `PerpetualTrading.get_funding_info`
`position_management_layer/perpetualtrading-get-funding-info.py:0`

## `position_mode`
`position_management_layer/position-mode.py:0`


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)