Files
coin/internal/models/spot_position.go

48 lines
1.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Package models 中的现货持仓表模型,由 logic 包读写;表名 spot_positions。
package models
import (
"time"
"git.apinb.com/bsm-sdk/core/database"
)
// SpotPosition 现货策略在库中的一行:按 BaseAsset 唯一,对应 watchList 里每个基础资产。
type SpotPosition struct {
ID uint `gorm:"primarykey"`
CreatedAt time.Time
UpdatedAt time.Time
// BaseAsset 基础资产代码,如 BTC唯一索引用于 upsert 与内存 map 的键
BaseAsset string `gorm:"uniqueIndex:uk_spot_base_asset;size:32;not null"`
// Symbol 交易对,如 BTCUSDT
Symbol string `gorm:"size:32;not null"`
// AvgCostUSDT 加权平均持仓成本USDT/枚)
AvgCostUSDT float64 `gorm:"column:avg_cost_usdt;not null;default:0"`
// Quantity 策略侧同步的持仓数量(枚)
Quantity float64 `gorm:"not null;default:0"`
// DipLegLocked 超跌加仓波段锁
DipLegLocked bool `gorm:"column:dip_leg_locked;not null;default:false"`
// RallyLegLocked 冲高减仓波段锁
RallyLegLocked bool `gorm:"column:rally_leg_locked;not null;default:false"`
}
func init() {
database.AppendMigrate(&SpotPosition{})
}
// TableName 显式表名,避免与结构体名推导不一致。
func (SpotPosition) TableName() string {
return "spot_positions"
}
// SpotPortfolioSnapshot 内存中的组合视图:从数据库加载后填充 Positions。
type SpotPortfolioSnapshot struct {
Positions map[string]*SpotPosition
}
// NewSpotPortfolioSnapshot 创建空快照。
func NewSpotPortfolioSnapshot() *SpotPortfolioSnapshot {
return &SpotPortfolioSnapshot{Positions: make(map[string]*SpotPosition)}
}