# 统一网格逻辑 ## 核心规则 对任意 `grid_index`,两个方向各挂一单: | 方向 | 条件 | 价格 | 含义 | |------|------|------|------| | 卖出(上移) | `grid_index > 0` | `grid[grid_index - 1]` | 涨回到上一格时卖出获利 | | 买入(下移) | `grid_index < len(grid)-1` | `grid[grid_index + 1]` | 跌到下一格时补仓 | 不需要"建仓"概念,`grid_index=0` 自然表示空仓。 ## 流程图 ```mermaid flowchart TD START["refreshGridOrder()"] --> GUARD{"isMarketActive AND enabled ?"} GUARD -->|No| EXIT0["跳过不下单"] GUARD -->|Yes| QUERY["查询未成交订单
queryPendingOrder()"] QUERY --> IDX["currentIdx = grid_index"] IDX --> SELL{"currentIdx > 0 ?"} SELL -->|"No
(空仓,无持仓可卖)"| BUY SELL -->|"Yes"| SELL_IDX["sellIdx = currentIdx - 1
卖价 = grid[sellIdx]"] SELL_IDX --> SELL_EXIST{"已有同 remark 卖单?"} SELL_EXIST -->|No| SELL_CHECK{"卖价 > 涨停价 ?"} SELL_CHECK -->|Yes| SELL_SKIP["跳过(超出涨停)"] SELL_CHECK -->|No| SELL_PLACE["挂卖出单
orderGrid[sellIdx] = seq"] SELL_EXIST -->|Yes| SELL_DUP["跳过(已挂单)"] SELL_SKIP --> BUY SELL_PLACE --> BUY SELL_DUP --> BUY BUY{"currentIdx < len(grid)-1 ?"} BUY -->|"No
(已到最低价)"| EXIT["结束"] BUY -->|"Yes"| BUY_IDX["buyIdx = currentIdx + 1
买价 = grid[buyIdx]"] BUY_IDX --> BUY_EXIST{"已有同 remark 买单?"} BUY_EXIST -->|No| BUY_CHECK{"买价 < 跌停价 ?"} BUY_CHECK -->|Yes| BUY_SKIP["跳过(低于跌停)"] BUY_CHECK -->|No| BUY_PLACE["挂买入单
orderGrid[buyIdx] = seq"] BUY_EXIST -->|Yes| BUY_DUP["跳过(已挂单)"] BUY_SKIP --> EXIT BUY_PLACE --> EXIT BUY_DUP --> EXIT ``` ## 三种典型状态 ``` grid = [11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] ↑ ↑ ↑ ↑ 0 1 2 3 ... grid_index=0(空仓): ┌────┬────┬────┬────┐ │ 11 │ 10 │ 9 │ 8 │ ... └────┴────┴────┴────┘ sell=无 buy=10 ← 第一笔买单 grid_index=1(持1份@10元): ┌────┬────┬────┬────┐ │ 11 │ 10 │ 9 │ 8 │ ... └────┴────┴────┴────┘ sell=11 → buy=9 → grid_index=3(持3份@8,9,10元): ┌────┬────┬────┬────┐ │ 11 │ 10 │ 9 │ 8 │ ... └────┴────┴────┴────┘ ↑ sell=9 buy=7 → 当前位置=3 成交后处理(onOrderTrade): 卖单成交 gridIdx < currentIdx → grid_index -= 1(上移,赚差价) 买单成交 gridIdx > currentIdx → grid_index += 1(下移,补仓) 然后 refreshGridOrder → 在新位置重新挂单 ``` ## 和之前的区别 | | 之前 | 之后 | |---|---|---| | 分支数 | 2 个(status=0 / status=1) | 1 个(统一网格逻辑) | | 空仓第一笔 | INIT 单 @ grid[0]=11 | 普通买单 @ grid[1]=10 | | grid[0]=11 的用途 | 建仓买入 | 永远只卖不买 | | 状态字段 | status + grid_index | 仅 grid_index |