dev mock report
This commit is contained in:
@@ -37,7 +37,7 @@ func run() {
|
||||
var daily models.StockDaily
|
||||
impl.DBService.Model(&models.StockDaily{}).Where("ts_code=?", item.Code).Order("id desc").Limit(1).First(&daily)
|
||||
|
||||
high := utils.FloatRound(daily.High*0.997, 2)
|
||||
high := utils.FloatRound(daily.High*0.995, 2)
|
||||
pnl := utils.FloatRound(high-item.OpenPrice, 2)
|
||||
pnlRate := utils.FloatRound(pnl/item.OpenPrice*100, 2)
|
||||
|
||||
|
||||
@@ -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{
|
||||
|
||||
23
internal/models/mock_report.go
Normal file
23
internal/models/mock_report.go
Normal 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{})
|
||||
}
|
||||
Reference in New Issue
Block a user