refactor(zt): migrate strategy logic to new state model
This commit is contained in:
@@ -1,38 +1,43 @@
|
||||
package logic
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"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
|
||||
}
|
||||
func openSignal(ctx context.Context, client *sdk.Client, books *OrderBook, ticks map[string]sdk.Tick, openSignals []libs.SignalItem) {
|
||||
for _, item := range openSignals {
|
||||
if state.Get(item.Code) != nil {
|
||||
// 是否有锁
|
||||
if _, err := QuantState.Get(item.Code); err == nil {
|
||||
continue
|
||||
}
|
||||
// 验证价格
|
||||
price := ticks[item.Code].LastPrice
|
||||
if price <= 0 {
|
||||
continue
|
||||
}
|
||||
if !dipTriggered(&openDip.mu, openDip.store, "开仓", item.Code, price) {
|
||||
// 防止接飞刀
|
||||
if !OpenWatch.Triggered("开仓", 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()
|
||||
// 保存数量
|
||||
QuantState.Set(&StateItem{Code: item.Code, BaseOrderId: orderID, BaseQty: volume, BaseCost: price, BaseStatus: StatusIng})
|
||||
if err := QuantState.Save(); err != nil {
|
||||
logf("ERROR", "%v", err)
|
||||
}
|
||||
logf("INFO", "[ZT][开仓] %s 买入 %d 股", item.Code, volume)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user