dev mock report
This commit is contained in:
@@ -37,7 +37,7 @@ func run() {
|
|||||||
var daily models.StockDaily
|
var daily models.StockDaily
|
||||||
impl.DBService.Model(&models.StockDaily{}).Where("ts_code=?", item.Code).Order("id desc").Limit(1).First(&daily)
|
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)
|
pnl := utils.FloatRound(high-item.OpenPrice, 2)
|
||||||
pnlRate := utils.FloatRound(pnl/item.OpenPrice*100, 2)
|
pnlRate := utils.FloatRound(pnl/item.OpenPrice*100, 2)
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package mock
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
"time"
|
||||||
|
|
||||||
"git.apinb.com/bsm-sdk/core/utils"
|
"git.apinb.com/bsm-sdk/core/utils"
|
||||||
"git.apinb.com/quant/gostock/internal/impl"
|
"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.")
|
log.Println("Check Close Mock Order.")
|
||||||
var positions []*models.MockPosition
|
var positions []*models.MockPosition
|
||||||
impl.DBService.Where("status=0").Find(&positions)
|
impl.DBService.Where("status=0").Find(&positions)
|
||||||
for _, p := range positions {
|
for _, p := range positions {
|
||||||
var item models.StockDaily
|
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 {
|
if err != nil {
|
||||||
log.Printf("No data for %s, skip.", p.Code)
|
log.Printf("No data for %s, skip.", p.Code)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// 1.通过最高价计算平仓价格
|
// 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)
|
log.Printf("Latest price for %s is %f,close %f", p.Code, item.High, newClosePrice)
|
||||||
|
|
||||||
// 2.计算盈亏
|
// 2.计算盈亏
|
||||||
pnl := utils.FloatRound(newClosePrice-p.OpenPrice, 2)
|
pnl := utils.FloatRound(newClosePrice-p.OpenPrice, 2)
|
||||||
pnlRate := utils.FloatRound(pnl/p.OpenPrice*100, 2)
|
pnlRate := utils.FloatRound(pnl/p.OpenPrice*100, 2)
|
||||||
log.Printf("Pnl for %s is %f,rate %f", p.Code, pnl, pnlRate)
|
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%,才确定平仓
|
// 3.判断盈亏超过20%,才确定平仓
|
||||||
if pnlRate >= 20 {
|
if pnlRate >= 20 {
|
||||||
impl.DBService.Model(&models.MockPosition{}).Where("id=?", p.ID).Updates(map[string]any{
|
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