Files
gostock/cmd/pnl/main.go

57 lines
1.5 KiB
Go
Raw Normal View History

2026-02-10 19:04:09 +08:00
package main
import (
"fmt"
"git.apinb.com/bsm-sdk/core/utils"
"git.apinb.com/quant/gostock/internal/config"
"git.apinb.com/quant/gostock/internal/impl"
"git.apinb.com/quant/gostock/internal/models"
"github.com/jedib0t/go-pretty/v6/table"
)
var (
ServiceKey = "gostock"
)
func main() {
config.New(ServiceKey)
impl.NewImpl()
fmt.Println("")
run()
fmt.Println("")
}
func run() {
tw := table.NewWriter()
tw.SetStyle(table.StyleLight)
2026-02-11 01:34:34 +08:00
tw.AppendHeader(table.Row{"ID", "Code", "Name", "OpenDate", "OpenPrice", "TodayPrice", "PNL/Per", "PNLRate(%)"})
2026-02-10 19:04:09 +08:00
var data []models.MockPosition
impl.DBService.Where("status=?", 0).Find(&data)
2026-02-11 01:34:34 +08:00
var tPNL, tPNLR, cost, sell float64
2026-02-10 19:04:09 +08:00
for _, item := range data {
var stock models.StockBasic
impl.DBService.Where("ts_code=?", item.Code).First(&stock)
var daily models.StockDaily
impl.DBService.Model(&models.StockDaily{}).Where("ts_code=?", item.Code).Order("id desc").Limit(1).First(&daily)
2026-02-11 01:34:34 +08:00
high := utils.FloatRound(daily.High*0.997, 2)
pnl := utils.FloatRound(high-item.OpenPrice, 2)
2026-02-10 19:04:09 +08:00
pnlRate := utils.FloatRound(pnl/item.OpenPrice*100, 2)
2026-02-11 01:34:34 +08:00
tPNL = tPNL + pnl
cost = cost + item.OpenPrice
sell = sell + high
tw.AppendRow(table.Row{item.ID, item.Code, stock.Name, item.CreatedAt.Format("2006-01-02"), item.OpenPrice, high, pnl, pnlRate})
2026-02-10 19:04:09 +08:00
}
2026-02-11 01:34:34 +08:00
tPNLR = utils.FloatRound(((sell-cost)/cost)*100, 2)
tw.AppendFooter(table.Row{"", "", "", "TOTAL", utils.FloatRound(cost, 2), utils.FloatRound(sell, 2), utils.FloatRound(tPNL, 2), tPNLR})
2026-02-10 19:04:09 +08:00
fmt.Println(tw.Render())
}