99 lines
3.2 KiB
Markdown
99 lines
3.2 KiB
Markdown
# 统一网格逻辑
|
||
|
||
## 核心规则
|
||
|
||
对任意 `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["查询未成交订单<br/>queryPendingOrder()"]
|
||
|
||
QUERY --> IDX["currentIdx = grid_index"]
|
||
|
||
IDX --> SELL{"currentIdx > 0 ?"}
|
||
|
||
SELL -->|"No<br/>(空仓,无持仓可卖)"| BUY
|
||
|
||
SELL -->|"Yes"| SELL_IDX["sellIdx = currentIdx - 1<br/>卖价 = grid[sellIdx]"]
|
||
SELL_IDX --> SELL_EXIST{"已有同 remark 卖单?"}
|
||
SELL_EXIST -->|No| SELL_CHECK{"卖价 > 涨停价 ?"}
|
||
SELL_CHECK -->|Yes| SELL_SKIP["跳过(超出涨停)"]
|
||
SELL_CHECK -->|No| SELL_PLACE["挂卖出单<br/>orderGrid[sellIdx] = seq"]
|
||
SELL_EXIST -->|Yes| SELL_DUP["跳过(已挂单)"]
|
||
|
||
SELL_SKIP --> BUY
|
||
SELL_PLACE --> BUY
|
||
SELL_DUP --> BUY
|
||
|
||
BUY{"currentIdx < len(grid)-1 ?"}
|
||
|
||
BUY -->|"No<br/>(已到最低价)"| EXIT["结束"]
|
||
|
||
BUY -->|"Yes"| BUY_IDX["buyIdx = currentIdx + 1<br/>买价 = grid[buyIdx]"]
|
||
BUY_IDX --> BUY_EXIST{"已有同 remark 买单?"}
|
||
BUY_EXIST -->|No| BUY_CHECK{"买价 < 跌停价 ?"}
|
||
BUY_CHECK -->|Yes| BUY_SKIP["跳过(低于跌停)"]
|
||
BUY_CHECK -->|No| BUY_PLACE["挂买入单<br/>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 |
|