Files
sfgrid/grid_flow.md
T
2026-06-12 16:25:41 +08:00

3.2 KiB
Raw Blame History

统一网格逻辑

核心规则

对任意 grid_index,两个方向各挂一单:

方向 条件 价格 含义
卖出(上移) grid_index > 0 grid[grid_index - 1] 涨回到上一格时卖出获利
买入(下移) grid_index < len(grid)-1 grid[grid_index + 1] 跌到下一格时补仓

不需要"建仓"概念,grid_index=0 自然表示空仓。

流程图

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