dev mock report

This commit is contained in:
yanweidong
2026-02-11 19:25:56 +08:00
parent 0a2e26035f
commit 09be57182a
3 changed files with 45 additions and 5 deletions

View File

@@ -2,6 +2,7 @@ package mock
import (
"log"
"time"
"git.apinb.com/bsm-sdk/core/utils"
"git.apinb.com/quant/gostock/internal/impl"
@@ -46,29 +47,45 @@ func Run(key string, ymd int) {
})
}
CheckClose()
Report()
}
func CheckClose() {
func Report() {
log.Println("Check Close Mock Order.")
var positions []*models.MockPosition
impl.DBService.Where("status=0").Find(&positions)
for _, p := range positions {
var item models.StockDaily
err := impl.DBService.Model(&models.StockDaily{}).Where("ts_code=?", p.Code).Order("id desc").Limit(1).First(&item).Error
err := impl.DBService.Model(&models.StockDaily{}).Where("ts_code=?", p.Code).Order("trade_date desc").Limit(1).First(&item).Error
if err != nil {
log.Printf("No data for %s, skip.", p.Code)
continue
}
// 1.通过最高价计算平仓价格
newClosePrice := utils.FloatRound(item.High*0.99, 2)
newClosePrice := utils.FloatRound(item.High*0.995, 2)
log.Printf("Latest price for %s is %f,close %f", p.Code, item.High, newClosePrice)
// 2.计算盈亏
pnl := utils.FloatRound(newClosePrice-p.OpenPrice, 2)
pnlRate := utils.FloatRound(pnl/p.OpenPrice*100, 2)
log.Printf("Pnl for %s is %f,rate %f", p.Code, pnl, pnlRate)
// 3.写入报表
t, _ := time.Parse(utils.Int2String(item.TradeDate), "20260102")
var cnt int64
impl.DBService.Model(&models.MockReport{}).Where("today_date = ?", t).Count(&cnt)
if cnt == 0 {
impl.DBService.Model(&models.MockReport{}).Create(&models.MockReport{
PositionId: p.ID,
Code: p.Code,
ClosePrice: newClosePrice,
Pnl: pnl,
PnlRate: pnlRate,
TodayDate: t,
})
}
// 3.判断盈亏超过20%,才确定平仓
if pnlRate >= 20 {
impl.DBService.Model(&models.MockPosition{}).Where("id=?", p.ID).Updates(map[string]any{

View File

@@ -0,0 +1,23 @@
package models
import (
"time"
"git.apinb.com/bsm-sdk/core/database"
)
type MockReport struct {
ID uint `gorm:"primarykey"`
PositionId uint
TodayDate time.Time
Code string
ClosePrice float64
Pnl float64
PnlRate float64
}
func (m *MockReport) TableName() string { return "mock_report" }
func init() {
database.AppendMigrate(&MockReport{})
}