package logic import ( "big-qmt/go-client/config" "big-qmt/go-client/libs" "big-qmt/go-client/sdk" ) func openSignal(client *sdk.Client, books *OrderBook, ticks map[string]sdk.Tick, openSignals []libs.SignalItem) { state := getState() if state.LoadError != "" { logf("ERROR", "[ZT][开仓] 状态文件异常,禁止新开仓: %s", state.LoadError) return } for _, item := range openSignals { if state.Get(item.Code) != nil { continue } price := ticks[item.Code].LastPrice if price <= 0 { continue } if !dipTriggered(&openDip.mu, openDip.store, "开仓", item.Code, price) { continue } volume := libs.CalcBuyVolume(price, config.Account.BuyValue) if volume <= 0 { continue } orderID := newOrderTag("base") if !books.place(ctx, client, sideBuy, item.Code, volume, orderID) { continue } setPending(state.Ensure(item.Code), pendingBaseOpening, orderID) state.Save() logf("INFO", "[ZT][开仓] %s 买入 %d 股", item.Code, volume) } }