Skip to content

Commit

Permalink
格式化股票检测结果
Browse files Browse the repository at this point in the history
  • Loading branch information
axiaoxin committed Jul 15, 2021
1 parent e2db97a commit e9f2a78
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 27 deletions.
48 changes: 24 additions & 24 deletions core/checker.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ func (c Checker) CheckFundamentals(ctx context.Context, stock models.Stock) (res
itemOK := true
desc := fmt.Sprintf("最新一期 ROE:%f", stock.BaseInfo.RoeWeight)
if stock.BaseInfo.RoeWeight < c.Options.MinROE {
desc = fmt.Sprintf("最新一期 ROE:%f 低于:%f", stock.BaseInfo.RoeWeight, c.Options.MinROE)
desc = fmt.Sprintf("最新一期 ROE:%f</br>低于:%f", stock.BaseInfo.RoeWeight, c.Options.MinROE)
ok = false
itemOK = false
}
Expand All @@ -140,7 +140,7 @@ func (c Checker) CheckFundamentals(ctx context.Context, stock models.Stock) (res
c.Options.CheckYears,
eastmoney.FinaReportTypeYear,
)
desc = fmt.Sprintf("%d 年内 ROE:%+v", c.Options.CheckYears, roeList)
desc = fmt.Sprintf("%d 年内 ROE:</br>%+v", c.Options.CheckYears, roeList)
roeavg, err := goutils.AvgFloat64(roeList)
if err != nil {
logging.Warn(ctx, "roe avg error:"+err.Error())
Expand All @@ -152,7 +152,7 @@ func (c Checker) CheckFundamentals(ctx context.Context, stock models.Stock) (res
c.Options.CheckYears,
eastmoney.FinaReportTypeYear,
) {
desc = fmt.Sprintf("%d 年内未逐年递增:%+v", c.Options.CheckYears, roeList)
desc = fmt.Sprintf("%d 年内未逐年递增:</br>%+v", c.Options.CheckYears, roeList)
ok = false
itemOK = false
}
Expand All @@ -170,7 +170,7 @@ func (c Checker) CheckFundamentals(ctx context.Context, stock models.Stock) (res
c.Options.CheckYears,
eastmoney.FinaReportTypeYear,
)
desc = fmt.Sprintf("%d 年内 EPS:%+v", c.Options.CheckYears, epsList)
desc = fmt.Sprintf("%d 年内 EPS:</br>%+v", c.Options.CheckYears, epsList)
if c.Options.IsCheckEPSGrow && len(epsList) > 0 {
if epsList[len(epsList)-1] <= 0 ||
!stock.HistoricalFinaMainData.IsIncreasingByYears(
Expand Down Expand Up @@ -201,7 +201,7 @@ func (c Checker) CheckFundamentals(ctx context.Context, stock models.Stock) (res
for _, rev := range revList {
revs = append(revs, goutils.YiWanString(rev))
}
desc = fmt.Sprintf("%d 年内营收: %s", c.Options.CheckYears, strings.Join(revs, ", "))
desc = fmt.Sprintf("%d 年内营收:</br>%s", c.Options.CheckYears, strings.Join(revs, "</br>"))
if c.Options.IsCheckRevGrow && len(revList) > 0 {
if revList[len(revList)-1] <= 0 ||
!stock.HistoricalFinaMainData.IsIncreasingByYears(
Expand Down Expand Up @@ -232,7 +232,7 @@ func (c Checker) CheckFundamentals(ctx context.Context, stock models.Stock) (res
for _, np := range netprofitList {
nps = append(nps, goutils.YiWanString(np))
}
desc = fmt.Sprintf("%d 年内净利润: %s", c.Options.CheckYears, strings.Join(nps, ", "))
desc = fmt.Sprintf("%d 年内净利润:</br>%s", c.Options.CheckYears, strings.Join(nps, "</br>"))
if c.Options.IsCheckNetprofitGrow && len(netprofitList) > 0 {
if netprofitList[len(netprofitList)-1] <= 0 ||
!stock.HistoricalFinaMainData.IsIncreasingByYears(
Expand Down Expand Up @@ -295,14 +295,14 @@ func (c Checker) CheckFundamentals(ctx context.Context, stock models.Stock) (res
itemOK = false
}
result[checkItemName] = map[string]string{
"desc": strings.Join(valuationDesc, "\n"),
"desc": strings.Join(valuationDesc, "</br>"),
"ok": fmt.Sprint(itemOK),
}

// 股价低于合理价格
checkItemName = "合理股价"
itemOK = true
desc = fmt.Sprintf("最新股价:%f 合理价:%f", stock.GetPrice(), stock.RightPrice)
desc = fmt.Sprintf("最新股价:%f</br>合理价:%f", stock.GetPrice(), stock.RightPrice)
if c.Options.IsCheckPriceByCalc {
if stock.RightPrice != -1 && stock.GetPrice() > stock.RightPrice {
ok = false
Expand All @@ -323,7 +323,7 @@ func (c Checker) CheckFundamentals(ctx context.Context, stock models.Stock) (res
if !goutils.IsStrInSlice(stock.GetOrgType(), []string{"银行", "保险"}) {
if c.Options.MaxDebtAssetRatio != 0 && len(stock.HistoricalFinaMainData) > 0 {
if fzl > c.Options.MaxDebtAssetRatio {
desc = fmt.Sprintf("负债率:%f 高于:%f", fzl, c.Options.MaxDebtAssetRatio)
desc = fmt.Sprintf("负债率:%f</br>高于:%f", fzl, c.Options.MaxDebtAssetRatio)
ok = false
itemOK = false
}
Expand All @@ -341,7 +341,7 @@ func (c Checker) CheckFundamentals(ctx context.Context, stock models.Stock) (res
desc = fmt.Sprintf("历史波动率:%f", stock.HistoricalVolatility)
if c.Options.MaxHV != 0 {
if stock.HistoricalVolatility > c.Options.MaxHV {
desc = fmt.Sprintf("历史波动率:%f 高于:%f", stock.HistoricalVolatility, c.Options.MaxHV)
desc = fmt.Sprintf("历史波动率:%f</br>高于:%f", stock.HistoricalVolatility, c.Options.MaxHV)
ok = false
itemOK = false
}
Expand All @@ -357,7 +357,7 @@ func (c Checker) CheckFundamentals(ctx context.Context, stock models.Stock) (res
sz := goutils.YiWanString(stock.BaseInfo.TotalMarketCap)
desc = fmt.Sprintf("市值:%s", sz)
if stock.BaseInfo.TotalMarketCap < c.Options.MinTotalMarketCap*100000000 {
desc = fmt.Sprintf("市值:%s 低于:%f亿", sz, c.Options.MinTotalMarketCap)
desc = fmt.Sprintf("市值:%s</br>低于:%f亿", sz, c.Options.MinTotalMarketCap)
ok = false
itemOK = false
}
Expand All @@ -373,7 +373,7 @@ func (c Checker) CheckFundamentals(ctx context.Context, stock models.Stock) (res
itemOK = true
desc = fmt.Sprintf("最新 ROA:%f", stock.BaseInfo.ROA)
if stock.BaseInfo.ROA < c.Options.BankMinROA {
desc = fmt.Sprintf("ROA:%f 低于:%f", stock.BaseInfo.ROA, c.Options.BankMinROA)
desc = fmt.Sprintf("ROA:%f</br>低于:%f", stock.BaseInfo.ROA, c.Options.BankMinROA)
ok = false
itemOK = false
}
Expand All @@ -386,7 +386,7 @@ func (c Checker) CheckFundamentals(ctx context.Context, stock models.Stock) (res
itemOK = true
desc = fmt.Sprintf("资本充足率:%f", fmd.Newcapitalader)
if fmd.Newcapitalader < c.Options.BankMinZBCZL {
desc = fmt.Sprintf("资本充足率:%f 低于:%f", fmd.Newcapitalader, c.Options.BankMinZBCZL)
desc = fmt.Sprintf("资本充足率:%f</br>低于:%f", fmd.Newcapitalader, c.Options.BankMinZBCZL)
ok = false
itemOK = false
}
Expand All @@ -400,7 +400,7 @@ func (c Checker) CheckFundamentals(ctx context.Context, stock models.Stock) (res
desc = fmt.Sprintf("不良贷款率:%f", fmd.Newcapitalader)
if c.Options.BankMaxBLDKL != 0 {
if fmd.NonPerLoan > c.Options.BankMaxBLDKL {
desc = fmt.Sprintf("不良贷款率:%f 高于:%f", fmd.Newcapitalader, c.Options.BankMinZBCZL)
desc = fmt.Sprintf("不良贷款率:%f</br>高于:%f", fmd.Newcapitalader, c.Options.BankMinZBCZL)
ok = false
itemOK = false
}
Expand All @@ -414,7 +414,7 @@ func (c Checker) CheckFundamentals(ctx context.Context, stock models.Stock) (res
itemOK = true
desc = fmt.Sprintf("不良贷款拨备覆盖率:%f", fmd.Newcapitalader)
if fmd.Bldkbbl < c.Options.BankMinBLDKBBFGL {
desc = fmt.Sprintf("不良贷款拨备覆盖率:%f 低于:%f", fmd.Newcapitalader, c.Options.BankMinZBCZL)
desc = fmt.Sprintf("不良贷款拨备覆盖率:%f</br>低于:%f", fmd.Newcapitalader, c.Options.BankMinZBCZL)
ok = false
itemOK = false
}
Expand All @@ -433,15 +433,15 @@ func (c Checker) CheckFundamentals(ctx context.Context, stock models.Stock) (res
)
checkItemName = "毛利率稳定性"
itemOK = true
desc = fmt.Sprintf("%d 年内毛利率:%v", c.Options.CheckYears, mllList)
desc = fmt.Sprintf("%d 年内毛利率:</br>%v", c.Options.CheckYears, mllList)
if c.Options.IsCheckMLLStability && !goutils.IsStrInSlice(stock.GetOrgType(), []string{"银行", "保险"}) {
if !stock.HistoricalFinaMainData.IsStability(
ctx,
eastmoney.ValueListTypeMLL,
c.Options.CheckYears,
eastmoney.FinaReportTypeYear,
) {
desc = fmt.Sprintf("%d 年内稳定性较差:%v", c.Options.CheckYears, mllList)
desc = fmt.Sprintf("%d 年内稳定性较差:</br>%v", c.Options.CheckYears, mllList)
ok = false
itemOK = false
}
Expand All @@ -454,7 +454,7 @@ func (c Checker) CheckFundamentals(ctx context.Context, stock models.Stock) (res
// 毛利率逐年递增
checkItemName = "毛利率逐年递增且 > 0"
itemOK = true
desc = fmt.Sprintf("%d 年内毛利率:%v", c.Options.CheckYears, mllList)
desc = fmt.Sprintf("%d 年内毛利率:</br>%v", c.Options.CheckYears, mllList)
if c.Options.IsCheckMLLGrow && len(mllList) > 0 {
if revList[len(mllList)-1] <= 0 ||
!stock.HistoricalFinaMainData.IsIncreasingByYears(
Expand All @@ -481,15 +481,15 @@ func (c Checker) CheckFundamentals(ctx context.Context, stock models.Stock) (res
)
checkItemName = "净利率稳定性"
itemOK = true
desc = fmt.Sprintf("%d 年内净利率:%v", c.Options.CheckYears, jllList)
desc = fmt.Sprintf("%d 年内净利率:</br>%v", c.Options.CheckYears, jllList)
if c.Options.IsCheckJLLStability {
if !stock.HistoricalFinaMainData.IsStability(
ctx,
eastmoney.ValueListTypeJLL,
c.Options.CheckYears,
eastmoney.FinaReportTypeYear,
) {
desc = fmt.Sprintf("%d 年内稳定性较差:%v", c.Options.CheckYears, jllList)
desc = fmt.Sprintf("%d 年内稳定性较差:</br>%v", c.Options.CheckYears, jllList)
ok = false
itemOK = false
}
Expand All @@ -502,7 +502,7 @@ func (c Checker) CheckFundamentals(ctx context.Context, stock models.Stock) (res
// 净利率逐年递增
checkItemName = "净利率逐年递增且 > 0"
itemOK = true
desc = fmt.Sprintf("%d 年内净利率:%v", c.Options.CheckYears, jllList)
desc = fmt.Sprintf("%d 年内净利率:</br>%v", c.Options.CheckYears, jllList)
if c.Options.IsCheckJLLGrow && len(jllList) > 0 {
if revList[len(jllList)-1] <= 0 ||
!stock.HistoricalFinaMainData.IsIncreasingByYears(
Expand All @@ -526,7 +526,7 @@ func (c Checker) CheckFundamentals(ctx context.Context, stock models.Stock) (res
desc = fmt.Sprintf("PEG:%v", stock.PEG)
if c.Options.MaxPEG != 0 {
if stock.PEG > c.Options.MaxPEG {
desc = fmt.Sprintf("PEG:%v 高于:%v", stock.PEG, c.Options.MaxPEG)
desc = fmt.Sprintf("PEG:%v</br>高于:%v", stock.PEG, c.Options.MaxPEG)
ok = false
itemOK = false
}
Expand All @@ -542,7 +542,7 @@ func (c Checker) CheckFundamentals(ctx context.Context, stock models.Stock) (res
desc = fmt.Sprintf("当前本业营收比:%v", stock.BYYSRatio)
if c.Options.MinBYYSRatio != 0 && c.Options.MaxBYYSRatio != 0 {
if stock.BYYSRatio > c.Options.MaxBYYSRatio || stock.BYYSRatio < c.Options.MinBYYSRatio {
desc = fmt.Sprintf("当前本业营收比:%v 超出范围:%v-%v", stock.BYYSRatio, c.Options.MinBYYSRatio, c.Options.MaxBYYSRatio)
desc = fmt.Sprintf("当前本业营收比:%v</br>超出范围:%v-%v", stock.BYYSRatio, c.Options.MinBYYSRatio, c.Options.MaxBYYSRatio)
ok = false
itemOK = false
}
Expand Down Expand Up @@ -602,7 +602,7 @@ func (c Checker) CheckFundamentals(ctx context.Context, stock models.Stock) (res
itemOK = true
if len(stock.HistoricalCashflowList) > 0 {
desc = fmt.Sprintf(
`经营活动产生的现金流量净额(>0): %s; 投资活动产生的现金流量净额(<0):%s; 筹资活动产生的现金流量净额: %s; 自由现金流量(>0):%s`,
`经营活动产生的现金流量净额(>0): %s</br>投资活动产生的现金流量净额(<0):%s</br>筹资活动产生的现金流量净额: %s</br>自由现金流量(>0):%s`,
goutils.YiWanString(stock.NetcashOperate),
goutils.YiWanString(stock.NetcashInvest),
goutils.YiWanString(stock.NetcashFinance),
Expand Down
13 changes: 12 additions & 1 deletion datacenter/eastmoney/fina_main.go
Original file line number Diff line number Diff line change
Expand Up @@ -247,13 +247,24 @@ const (
ValueListTypeJLL ValueListType = "JLL"
)

// FinaValueList 历史数据值列表
type FinaValueList []float64

func (fvl FinaValueList) String() string {
s := []string{}
for _, i := range fvl {
s = append(s, fmt.Sprint(i))
}
return strings.Join(s, "</br>")
}

// ValueList 获取历史数据值,最新的在最前面
func (h HistoricalFinaMainData) ValueList(
ctx context.Context,
valueType ValueListType,
count int,
reportType FinaReportType,
) []float64 {
) FinaValueList {
r := []float64{}
data := h.FilterByReportType(ctx, reportType)
dataLen := len(data)
Expand Down
4 changes: 2 additions & 2 deletions statics/js/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -311,8 +311,8 @@ $(document).ready(function () {
"</br>最新财报预约发布日期:" +
data.FinaAppointPublishDates[i] +
"</div>" +
'<table class="striped">' +
'<thead><tr><th width="25%">指标</th><th width="65%">描述</th><th width="10%">结果</th></tr></thead>' +
'<table class="centered striped">' +
'<thead><tr><th width="30%">指标</th><th width="40%">描述</th><th width="30%">结果</th></tr></thead>' +
"<tbody></tbody>" +
"</table>" +
"</div>"
Expand Down

0 comments on commit e9f2a78

Please sign in to comment.