44 lines
1.0 KiB
Go
44 lines
1.0 KiB
Go
package logic
|
|
|
|
import (
|
|
"context"
|
|
|
|
"big-qmt/go-client/config"
|
|
"big-qmt/go-client/libs"
|
|
"big-qmt/go-client/sdk"
|
|
)
|
|
|
|
func openSignal(ctx context.Context, client *sdk.Client, ticks map[string]sdk.Tick, openSignals []libs.SignalItem) {
|
|
for _, item := range openSignals {
|
|
// 是否有锁
|
|
if OrderBook.IsLock("BUY", item.Code) {
|
|
continue
|
|
}
|
|
// 验证价格
|
|
price := ticks[item.Code].LastPrice
|
|
if price <= 0 {
|
|
continue
|
|
}
|
|
// 防止接飞刀
|
|
if !OpenWatch.Triggered("开仓", item.Code, price) {
|
|
continue
|
|
}
|
|
// 计算开仓数量
|
|
volume := libs.CalcBuyVolume(price, config.Account.BuyValue)
|
|
if volume <= 0 {
|
|
continue
|
|
}
|
|
// 开仓
|
|
orderID := NewOrderID("base")
|
|
if !OrderBook.Place(client, sdk.OpBuy, item.Code, volume, orderID) {
|
|
continue
|
|
}
|
|
// 保存状态
|
|
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)
|
|
}
|
|
}
|