From c5963f2bdb3d8e56c85c586a9ebf03651f728f00 Mon Sep 17 00:00:00 2001 From: tslijianguo <591085278@qq.com> Date: Mon, 4 Dec 2023 16:54:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=90=A5=E4=B8=9A=E6=80=BB?= =?UTF-8?q?=E6=94=B6=E5=85=A5=E8=A7=84=E5=88=99=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- factors/feature_f10.go | 49 +++++++++++++++++----------------- factors/feature_f10_reports.go | 7 +++-- rules/rule_f10.go | 5 ++++ 3 files changed, 35 insertions(+), 26 deletions(-) diff --git a/factors/feature_f10.go b/factors/feature_f10.go index 1d3a0f7..579b4a5 100644 --- a/factors/feature_f10.go +++ b/factors/feature_f10.go @@ -18,30 +18,31 @@ const ( // F10 证券基本面 type F10 struct { - cache.DataSummary `dataframe:"-"` - Date string `name:"日期" dataframe:"Date"` // 日期 - Code string `name:"代码" dataframe:"Code"` // 证券代码 - SecurityName string `name:"名称" dataframe:"Name"` // 证券名称 - SubNew bool `name:"次新股" dataframe:"SubNew"` // 是否次新股 - VolUnit int `name:"每手" dataframe:"VolUnit"` // 每手单位 - DecimalPoint int `name:"小数点" dataframe:"DecimalPoint"` // 小数点 - IpoDate string `name:"上市日期" dataframe:"IpoDate"` // 上市日期 - UpdateDate string `name:"更新日期" dataframe:"UpdateDate"` // 更新日期 - TotalCapital float64 `name:"总股本" dataframe:"TotalCapital"` // 总股本 - Capital float64 `name:"流通股本" dataframe:"Capital"` // 流通股本 - FreeCapital float64 `name:"自由流通股本" dataframe:"FreeCapital"` // 自由流通股本 - Top10Capital float64 `name:"前十大流通股东总股本" dataframe:"Top10Capital"` // 前十大流通股东股本 - Top10Change float64 `name:"前十大流通股东总股本变化" dataframe:"Top10Change"` //前十大流通股东股本变化 - ChangeCapital float64 `name:"前十大流通股东持仓变化" dataframe:"ChangeCapital"` // 前十大流通股东持仓变化 - IncreaseRatio float64 `name:"当期增持比例" dataframe:"IncreaseRatio"` // 当期增持比例 - ReductionRatio float64 `name:"当期减持比例" dataframe:"ReductionRatio"` // 当期减持比例 - BPS float64 `name:"每股净资产" dataframe:"BPS"` // 每股净资产 - BasicEPS float64 `name:"每股收益" dataframe:"BasicEPS"` // 每股收益 - SafetyScore int `name:"安全分" dataframe:"SafetyScore"` // 通达信安全分 - Increases int `name:"增持" dataframe:"Increases"` // 公告-增持 - Reduces int `name:"减持" dataframe:"Reduces"` // 公告-减持 - Risk int `name:"风险数" dataframe:"Risk"` // 公告-风险数 - RiskKeywords string `name:"风险关键词" dataframe:"RiskKeywords"` // 公告-风险关键词 + cache.DataSummary `dataframe:"-"` + Date string `name:"日期" dataframe:"Date"` // 日期 + Code string `name:"代码" dataframe:"Code"` // 证券代码 + SecurityName string `name:"名称" dataframe:"Name"` // 证券名称 + SubNew bool `name:"次新股" dataframe:"SubNew"` // 是否次新股 + VolUnit int `name:"每手" dataframe:"VolUnit"` // 每手单位 + DecimalPoint int `name:"小数点" dataframe:"DecimalPoint"` // 小数点 + IpoDate string `name:"上市日期" dataframe:"IpoDate"` // 上市日期 + UpdateDate string `name:"更新日期" dataframe:"UpdateDate"` // 更新日期 + TotalCapital float64 `name:"总股本" dataframe:"TotalCapital"` // 总股本 + Capital float64 `name:"流通股本" dataframe:"Capital"` // 流通股本 + FreeCapital float64 `name:"自由流通股本" dataframe:"FreeCapital"` // 自由流通股本 + Top10Capital float64 `name:"前十大流通股东总股本" dataframe:"Top10Capital"` // 前十大流通股东股本 + Top10Change float64 `name:"前十大流通股东总股本变化" dataframe:"Top10Change"` //前十大流通股东股本变化 + ChangeCapital float64 `name:"前十大流通股东持仓变化" dataframe:"ChangeCapital"` // 前十大流通股东持仓变化 + IncreaseRatio float64 `name:"当期增持比例" dataframe:"IncreaseRatio"` // 当期增持比例 + ReductionRatio float64 `name:"当期减持比例" dataframe:"ReductionRatio"` // 当期减持比例 + BPS float64 `name:"每股净资产" dataframe:"BPS"` // 每股净资产 + BasicEPS float64 `name:"每股收益" dataframe:"BasicEPS"` // 每股收益 + SafetyScore int `name:"安全分" dataframe:"SafetyScore"` // 通达信安全分 + Increases int `name:"增持" dataframe:"Increases"` // 公告-增持 + Reduces int `name:"减持" dataframe:"Reduces"` // 公告-减持 + Risk int `name:"风险数" dataframe:"Risk"` // 公告-风险数 + RiskKeywords string `name:"风险关键词" dataframe:"RiskKeywords"` // 公告-风险关键词 + TOTALOPERATEINCOME float64 `name:"营业总收入" dataframe:"TOTAL_OPERATE_INCOME"` // 营业总收入 } func NewF10(date, code string) *F10 { diff --git a/factors/feature_f10_reports.go b/factors/feature_f10_reports.go index 88e958d..86c0ecf 100644 --- a/factors/feature_f10_reports.go +++ b/factors/feature_f10_reports.go @@ -28,8 +28,9 @@ func loadQuarterlyReports(date string) { } type quarterlyReportSummary struct { - BPS float64 - BasicEPS float64 + BPS float64 + BasicEPS float64 + TOTALOPERATEINCOME float64 } func getQuarterlyReportSummary(securityCode, date string) quarterlyReportSummary { @@ -41,12 +42,14 @@ func getQuarterlyReportSummary(securityCode, date string) quarterlyReportSummary if ok { summary.BPS = v.BPS summary.BasicEPS = v.BasicEPS + summary.TOTALOPERATEINCOME = v.TOTALOPERATEINCOME return summary } q := dfcf.GetCacheQuarterlyReportsBySecurityCode(securityCode, date) if q != nil { summary.BPS = q.BPS summary.BasicEPS = q.BasicEPS + summary.TOTALOPERATEINCOME = q.TOTALOPERATEINCOME } return summary } diff --git a/rules/rule_f10.go b/rules/rule_f10.go index d5a8a47..fc8462f 100644 --- a/rules/rule_f10.go +++ b/rules/rule_f10.go @@ -25,6 +25,7 @@ var ( ErrF10RangeOfSafetyCode = exception.New(errorRuleF10+5, "非安全分范围") ErrF10RangeOfBasicEPS = exception.New(errorRuleF10+6, "非每股收益范围") ErrF10RangeOfBPS = exception.New(errorRuleF10+7, "非净增长范围") + ErrF10RangeOfTOTALOPERATEINCOME = exception.New(errorRuleF10+8, "非营业总收入范围") ) // RuleF10 基本面规则 @@ -87,6 +88,10 @@ func (r RuleF10) Exec(snapshot models.QuoteSnapshot) error { //if f10.Reduce > 0 || f10.Increase > 0 || f10.Risk > 0 { // return false //} + // 10.7 营业总收入小于等于1亿 + if f10.TOTALOPERATEINCOME != 0 && f10.TOTALOPERATEINCOME <= 1*Billion { + return ErrF10RangeOfTOTALOPERATEINCOME + } } // 规则通过 return nil -- Gitee