1、风控报表公式详细说明1. 报表界面风控报表界面菜单中选择“报表”- “风控报表 ”即可弹出风控报表界面:界面功能:1. 选择基金名称;如果是货币基金;“价格编辑”按钮可用;如果为非货币基金, “价格编辑”按钮不可用;2. 选择日期,时间段可以自由选择,最小可以是一天。报表数据为此时间段的数据。 3. 点击“生成报表” ;将根据帐户类型(货币还是非货币)生成对应的报表;并显示进度;当生成报表完成,有文字提示“报表生成完毕!” 。4. 如果是货币基金,还可以进行债券手工价格编辑或者编辑买入收益率,点“价格编辑”将弹出如下界面在界面中可以对头寸集合中的债券品种的价格进行编辑;价格范围15,200 ;
2、价格和收益率可以互相换算,浅紫色背景为贴现券,贴现券的输入价格为全价,其他债券为净价。 (互相换算方法:价格)收益率:贴现券:myYield = myIMBond.GetYield(mBondDate, myPrice, Dirty_Price) 利用全价计算收益率其他券:myYield = myIMBond.GetYield(mBondDate, myPrice, Clean_Price) 利用净价计算收益率收益率价格:myPrice = myIMBond.GetPrice(mBondDate, myYield) 全价贴现券:价格=myPrice 全价其他券先计算利息,用全价-利息= 价格:
3、myInterest = myIMBond.GetAccruedInterestNew(mBondDate)myPrice = myPrice - myInterest 净价)买入收益率列的增加是在 2010 年 1 月 12 号-2010 年 1 月 26 号进行的,具体的文档见本文档附录5. 头寸债券初始价格为空,需要手工输入;如果想使用会计估值净价对债券价格进行初始化,点击“设置会计估值净价”即可(此时没有价格的债券或者价格不合法的债券都将被初始化) 。如果选上“覆盖已设定价格” ;则所有的债券价格都将被初始化。6. 编辑价格完毕后需要点击“保存”才能将价格保存到数据库中(头寸集合中)
4、;如果保存成功,将有文字提示“保存成功!” ,价格可以为空。7. 点击“关闭”按钮将价格编辑界面关闭;8. 对于货币基金;每次生成报表时都会检测头寸集合中是否有债券品种信息;如果没有,将有提示;然后继续生成报表9. 对于货币基金,每次生成报表时都会检测头寸集合中的债券价格信息;如果有的债券品种价格没有;将会有提示(如下图) ;如果选择“是” ;将弹出价格编辑界面,如果选择“否” ,将继续生成报表。2. 强债基金风险监控概览(蓝色为开发时实现方法)2.1 强债基金风险监控周报强债基金风险监控周报时间 开始日期-截止日期整体久期 上周 整体久期(债券) 上周 利率及短债久期 上周 基金规模 上周
5、整体仓位仓位(亿元) 占净值比例(%)债券 仓位(亿元)/基金规模(即标号)股票 同上 现金 同上一年内到期政府债券 同上【整体久期】截止日期,整体 久期,取值=资产明细 2 界面 ,“基金概览”选项卡中的“组合久期”【整体久期(债券)】截止日期, 债券头寸集合的久期,用单债券的 修正久期*权重汇总 【利率及短债久期】获得截止日期债券头寸,从中 筛选出国 债、政策性金融 债、央票+剩余期限在 3 年内的其他债券,然后,用单债券的 修正久期*权重 汇总【基金规模】取基金净资产=总资产- 负债=头寸集合(ColATSecurityPosition.objColIncome).IncomeTotal
6、. Asset 头寸集合(ColATSecurityPosition.objColIncome).IncomeTotal.Debt- 【上周】日期取开始日期前一个自然日,公式同该行左边【债券】债券头寸取金额(即净价*数量)后进行汇总取值等于”资产明细”界面,根据报表帐户及日期,所得债券 ”市场金额(万)” 汇总【股票】股票头寸取金额(即净价*数量)后进行汇总取值等于”资产明细”界面, 根据报表帐户及日期,所得股票 ”市场金额(万)” 汇总【现金】现金头寸取金额(即数量) 后进行汇总取值等于”资产明细” 界面,根据报表帐户及日期,所得 存款-活期存款-活期存款-深圳 ”的 ”市场金额(万)”(或
7、” 数量 ”)【一年内到期政府债券】筛选出剩余期限在一年内到期的国债、政策性金融债、央票的 头寸,汇总金额(净价*数量)取值等于”资产明细” 界面,根据报表帐户及日期,所得债券,过滤出符合上述条件的债券后,对”市场金额(万)”汇总注意:1) 单个债券 修正久期的计算用函数 CalculateBondInf2) 单个债券 权重= ClsATSecurityHold .ShadowPrice * ClsATSecurityHold.HoldQty/帐户头寸净资产(.objColIncome.IncomeTotal.NetValue)3) 净价*数量=ClsATSecurityHold .Shado
8、wPrice * ClsATSecurityHold.HoldQty4) 数量= ClsATSecurityHold.HoldQty5) 现金头寸取值:BT_SecEvaluateValueDic 表 SecurityID=300004752.2 上周主要操作上周主要操作债券部分 卖出(亿元) 买入(亿元)证券名称 价值(万) 剩余年限(年) 证券名称 价值(万) 剩余年限(年) 股票部分简称 市值(万) 占基金净值比例(%)单位成本(元) 单位市值(元) 转入时间 附计算方法和公式: 获取债券交易记录(开始日期截止日期)循环集合,判断单条交易记录 的 tradeType = “0203”(卖
9、出)或者 “0202”(债券买入),分 别填入表格相应位置。【卖出(亿元)】汇总卖出债券金额【证券名称】取证券简称【价值(万) 】取交易记录的金额,注意 单位=my IATTradeRecord.SettlementAmount取值等于”交易-交易查询(按类型)”界面,根据报表帐户及日期范围(开始日期 截止日期)所得交易类型为“债券卖出”的债券的”交易金额( 元)”,【剩余年限(年)】剩余期限按年处理保留 2 位小数,注意单 位 计算及取值等同于”资产明细”界面,根据选定帐户和日期,行权”赎回权、回售权”后,所得结果集中的“剩余存续期(年)”债券买入部分,同卖出部分 同 读取股票的交易记录(开
10、始日期 截止日期) 和截止日期的 头寸【简称】证券简称【市值(万) 】头寸对象(ClsSecurity).shadowPrice*.HoldqQty/ 10000取值见 附 【占基金净值比例(%】头寸 对象(ClsSecurity).shadowPrice*.HoldqQty / 基金净资产 * 100手工计算【单位成本(元)】头寸对象(ClsSecurity).CostPrice取值见 附【单位市值(元)】头寸对象(ClsSecurity).ShadowPrice取值见 附【转入时间】从交易表中查询,用 开始日期、截止日期 两个日期参数取得股票的交易 记录集合,把每一条的买入日期记录 在“
11、转入时间内”字符串型,如遇多个日期则用“, ”号分隔。附:基金 净资产 = 头寸集合(ColATSecurityPosition).ObjColIncome.IncomeTotal.NetValue读取股票交易记录的语句SELECT a.CostBalance, a.costprice, a.shadowvalue / a.amount AS SUMFROM BT_SecEvaluateValue a INNER JOINBT_SecEvaluateValueDic b ON a.RelatID = b.IDWHERE (LEN(b.PropCode) 0) AND (a.JSZDate =
12、2009-02-20) AND (b.AccountID = 13) AND (b.JSZType = 81)ORDER BY a.JSZDate其中结果集中的:CostBalance市值(万)Costprice单位成本SUM单位市值2.3 详细持仓分析 基金名称债券部分仓位(亿) 占比(%)央票 国债(交易所) 国债(银行间) 政策性金融债 企业债(交易所) 企业债(银行间) 可转债 2.67%17.58%5.60%7.56%27.35%9.04%14.05%0.63%2.10%1.84%0.82%0%5%10%15%20%25%30%3个月 6个月 1年 2年 3年 4年 5年 6年 7年
13、 10年 30年2.71%17.83%5.68%18.30%20.53%8.44%10.87%0.54%1.38% 0.27%0%5%10%15%20%25%3个 月 6个 月 1年 2年 3年 4年 5年 6年 7年 10年1 【仓位(亿) 】取日期为截止日期的头寸集合,循 环头寸过滤 出相应类型(央票、国债(交易所)、国债(银行间)、政策性债.),取得市值= 影子价格*数量。将所有符合条件的数据加和汇总后得到仓位,注意单位是亿元市值= myClsSecurity .HoldQty * myClsSecurity.ShadowPrice 求和 取值等于”资产明细” 界面,根据报表帐户及日期,
14、所得不同类型再汇总”市场金额(万)” !注意:政策性金融债、企业债 (交易所)、企业债(银行间) 的分 类方法,附下面2 【占比(%) 】(1)仓位(亿) 的值 /基金净资产基金净资产 即 sheet 页【强债基金风险监控概览中】的基金 规模附 政策性金融债的确定:IMBond.nnerBond.mtype2=金融债 且 IMBond.InnerBond.IsPolitical=true【企业债(交易所)】的划分:企业债+公司债【企业债(银行间)】的划分:企业债+公司债+次级债+ 非政策性金融债 图表中的图设计方法: 本周(左图)取截止日期债券头寸分析,横坐标:剩余年限分组(资产明细界面,考虑
15、行权后,所得的期限分组)纵坐标:为成本余额/净资产的比 值= 每个期限范围内的,所有单 个头寸的成本金额求和/ 资金净资产= 同期限头寸对象(ClsATSecurityHold ).shadowPrice*(ClsATSecurityHold).HoldQty 求和/基金净资产 基金净资产 同 sheet 页【强债基金风险监控概览】中的基金 规模数据参见 sheet 页 ,I、J 列 上周(右图)取开始日期前一自然日债券头寸分析,横坐标:剩余年限分组(资产明细界面,考虑行权后,所得的期限分组)纵坐标:为成本余额/净资产的比 值=每个期限范围内的,所有单 个头寸的成本金额求和/ 资金净资产= 同
16、期限头寸对象(ClsATSecurityHold ).PriceBalance 求和/基金净资产 基金净资产 同 sheet 页【强债基金风险监控概览】中的基金 规模数据参见 sheet 页 ,I、J 列2.4 附录基金名称加强型债券基金的净值统计证券简称 基金规模(亿)成立时间 累计费率(%)单位净值(亿)近一个月表现09 年以来表现 !注意:此报表用到的数据是数据库中的债券行基金数据,时间为上周五, 读取一天的所有基金净值数据,然后过滤 TypeDesc=2 :加强行债券基金【证券简称】根据交易品种集合 lookup 函数传入交易 id 号取得基金对象,然后得到证券简称【基金规模(亿)】B
17、T_BMFFinance 表中的 FundSum 字段【成立时间】bt_fund 表中的合同生效日, 参照徐柳发的文档【累计费率(%)】基金费率信息表 BT_FundFee 中的基金管理 费+托管费+销售服务费【单位净值(%)】直接用数据 库 HQ_OpenFundIncome 中的字段 UnitNet,【近一个月表现】根据截止日期推算上一个月的日期,广发强债:分析日累计单位净值 1 个月前的累计单位净值其他强债基金:分析日累计单位净值 1 个月前的累计单位净值+费率调整 t2it基 金 分 析 日 费 率 广 发 基 金 分 析 日 费 率【09 年以来表现】广发强债:分析日累计单位净值 上
18、年 12 月 31 日基金累计单位净值其他强债基金:分析日累计单位净值 上年 12 月 31 日基金累计单位净值+t 365iit(基 金 分 析 日 费 率 广 发 基 金 分 析 日 费 率 )*截 至 分 析 日 本 年 度 已 有 天 数其 中 基 金 非 广 发 强 债 基 金!截至分析日本年度已有天数:分析日与本年度 1 月 1 日间隔天数附:【基金规模(亿)】字段的获取,需要通过三个表:BT_BMFReportDic(债券型基金公告报表分类字典表) BT_BMFBulletinBaseInfo(公告基本信息)BT_BMFFinance(主要财务指标)取数据流程:上述三表关联,取得
19、 BT_BMFFinance(主要财务指标)的 FundSum 值(此条数据对应 BT_BMFBulletinBaseInfo 中 DeclareDate 必须是距离现在最近的)SQL 查询语句如下:SELECT a.BulletinID, a.ReportTypeID, a.FundSum, a.MoreTradevarietyID, b.ReportTypeDesc, b.ReportTypeCode, c.FundGroupID, c.DeclareDate, c.FinanceYear, c.FinanceQuarter , c.BulletinType FROM BT_BMFFina
20、nce a INNER JOIN BT_BMFReportDic b ON a.ReportTypeID = b.ReportTypeID and b.ReportTypeID=57 INNER JOIN BT_BMFBulletinBaseInfo c ON a.BulletinID = c.BulletinID ORDER BY c.DeclareDate DESC强债持有明细年限 债券名称 净值(亿) 收益率 修正久期 剩余年限(%) (年) (年) 近一个月强债排名 上周 09 年强债排名 上周 !注意:强债持有明细(用周五的头寸筛选出债券的进行分析)【年限】 按期限范围(3 个月,6
21、 个月,1 年) 汇总注意:要修改模版的年限合并风格【债券名称】债券简称= myIMBond.ShortName【净值(亿) 】单个头寸的净价*数量=ClsATSecurityHold.ShadowPrice * ClsATSecurityHold.HoldQty当该只债券是交易所时按上述方法,但是银行间的情况要取该只基金的数量 ClsATSecurityHold.HoldQty。【收益率(%) 】用单债券的收益率单债券的收益率计算用新增函数 CalculateBondInf_Report,计算时采用 alpha 利息【修正久期(年)】用单债券的 修正久期单债券的修正久期计算用新增函数 Cal
22、culateBondInf_Report,计算时采用 alpha 利息【剩余年限(年)】计算及取值等同于”资产明细”界面,根据选定帐户和日期,行权”赎回权、回售权”后,所得结果集中的“剩余存续期( 年) ” 将净值统计表的数据根据“近一个月表现”排序,取得广发基金的排名 将净值统计表的数据根据“09 年以来表现”排序,取得广发基金的排名:同上,日期取开始日期前一个自然日3. 货币基金风险监控模板3.1 货币基金风险监控概览货币基金风险监控周报基金名称 (1)时间 (2)基金 A 排名(周期内万份基金单位净收益) (3) 上周期 (4)基金 B 排名(周期内万份基金单位净收益) (5) 上周期
23、(6)规模 (7)组合久期 (8)浮息债久期 (9)利率产品久期 (10)买入 卖出名称 金额(亿) 名称 金额(亿)(11) (12) (13) (14)(1)【基金名称】 货币基金帐户名称;(2)【时间】 开始日期-截止日期;(3)【基金 A 排名】 上周货币基金帐户基金 A(不包括 B 基金)的每日万份收益排名;*(4)【上周】 上上周货币基金帐户基金 A(不包括 B 基金)的每日万份收益排名;(5)【基金 B 排名】 上周货币基金帐户基金 B(只包含 B 的基金进行排名)的每日万份收益排名;(6)【上周】 上上周货币基金帐户基金 B(只包含 B 的基金进行排名)的每日万份收益排名;(7
24、)【规模】 货币基金帐户净资产;*(8)【组合久期】 上周日头寸整体集合的久期;*(9)【浮息债久期】 从总头寸集合中筛选是浮息券的债券头寸集合,计算得到久期;(10)【利率产品久期】 总头寸集合去除浮息券后得到新头寸集合,计算得到久期;(11)【名称】 总头寸集合中的买入单品种债券的名称;(12)【金额】 总头寸集合中的买入单品种债券的金额;*(13)【名称】 总头寸集合中的卖出单品种债券的名称;(14)【金额】 总头寸集合中的卖出单品种债券的金额;相关公式:基金排名:从库表 HQ_MMFIncome 按每日万份收益相加后降序排序得到该基金的排名(一个货币基金账户有两个排名,一个是基金 A
25、排名,一个是基金 B 排名);A 基金的排名总数中不包括 B 基金,B 基金排名总数只包含 B 基金。规模(净资产):ColATSecurityPosition.ObjColIncome.IncomeTotal.NetValue组合久期:货币基金的组合久期取剩余天数;ColATSecurityPosition.ObjColIncome.IncomeTotal.AccountRemainDays金额:NsBTATAccount.IATTradeRecord. SettlementAmount/108浮息债久期:单个浮息券的剩余天数乘以权重后累加得到浮息券的久期。权重为:影子价格净价* 数量/净资
26、产ObjSecurity.ShadowPrice*ObjSecurity.HoldQty/myOutSecurity.ObjColIncome.IncomeTotal.NetValue利率产品久期:单个非浮息券的剩余天数乘以权重后累加得到利率产品的久期。权重为:影子价格净价* 数量/净资产ObjSecurity.ShadowPrice*ObjSecurity.HoldQty/myOutSecurity.ObjColIncome.IncomeTotal.NetValue3.2 基金结构与浮动盈亏计算方法:取得截止日期日期的头寸,循环头寸集合筛选出央票、浮息债、短融、逆回购(银行间逆回购+交易所逆
27、回购+ 封闭式逆回购)共 4 个头寸集合(1) (4)【持仓券面】 分别为每个头寸集合中的头寸持有量汇合;之后除以 100(回购部分除以10000)做单位转换(万元), 持有量: ClsATSecurityHold.HoldQty(5) (8)【成本占净资产比例】 会计帐户净价成本 * 数量 得到成本,将每个集合的头寸成本汇总。用汇总结果除以净资产即可得到比例;净价成本 * 数量:ClsATSecurityHold. NetCostPrice * ObjSecurity.HoldQty(9) (12)【静态收益率】取得单品种静态收益率后,用加权平均法计算各个集合的静态收益率,其中短融的静态收益
28、率经过计算后还要乘以 0.8。每个头寸集合中如果有一个品种的静态收益率不存在,则该集合的静态收益率不能计算,以“-”表示。(下面以央票为例)a. 计算一条债券的成本价值/总央票集合资产得到加权比率;b. 央票集合中每个品种的静态收益率*加权比率后汇总得到集合静态收益率。静态收益率:调用函数 GetStaticYield()得到;逆回购的静态收益率为回购利率。到期价格:IMBond.GetMaturityPrice(头寸日期)买入价格:ClsATSecurityHold.CostPrice一条债券的成本价值:ClsATSecurityHold.PriceBalance总央票集合资产:净价成本 *
29、 数量 然后累加得,见 【成本占净资产比例】(13) (15)【中债估值损益】 (估值价格* 持有数量 -溢折价余额)然后累加得;(估值价格 * 持有数量 -溢折价余额):(ClsATSecurityHold.ShadowPrice* ClsATSecurityHold.HoldQty - ClsATSecurityHold. PriceBalance) (17)(19)【实际浮亏】 (手动输入价格-成本净价)*持有数量对应程序:(ObjSecurity.ShadowPrice - ObjSecurity.NetCostPrice) * ObjSecurity.HoldQty (16) 【中债
30、估值损益】 留空(20) 【实际浮亏】 留空(21)【小计】(1)(4)简单相加;(22)【小计】(5)(8)简单相加;(23)【小计】(9)(12)每个集合的静态收益率 * 成本占资产比例 后相加即可;(24)【小计】(13)(16)简单相加;(25)【小计】(17)(20)简单相加;(26)【持仓券面】 货币基金账户的净资产;(27)【成本占净资产比例】 净资产/净资产 * 100%;(28)【静态收益率】 留空,不用计算;(29)【中债估值损益】 (24)/净资产;(30)【实际浮亏】 (25)/净资产;(31)【平均剩余期限】 (31-34)循环头寸计算每一只债券的剩余期限(按行权处理
31、)*该只券的成本,结果进行相加/成本之和,加权平均计算,按每一类进行计算。(35)小计的计算 :把央票、短融、浮息债、逆回购 看做一个资产组合,按上述方法计算平均剩余期限(36)就直接取分析日当天的 基金剩余期限就行 单位:统一为日3.3 现金流总表基金名称 (1)时间未来到期现金流(扣除浮息债)期限金额(亿元) 占资产净值比(%)30 天以内 (2) (3) 30-90 天 (4) (5) 90-180 天 (6) (7) 180-270 天 (8) (9) 270-365 天 (10) (11) 1、计算方法:取得截止日期的账户头寸集合后循环每个头寸,选取定期存款、活期存款、债券(扣除浮息
32、债)、回购的头寸,按剩余天数不同分别放在 12 个时间段(月)的数组中,每个时间段时间为一个月(30 天算)。 活期存款按 30 天算。(1) 【基金名称】 货币基金账户名称(2) 剩余天数在 30 天(含)以内的头寸金额累加;头寸金额:ClsATSecurityHold.PriceBalance(3) 将(2)的累加结果/净资产;(4) 剩余天数在 30 天到 90 天(含)以内的头寸金额累加;(5) 将(4)的累加结果/净资产;(6) 剩余天数在 90 天到 180 天(含)以内的头寸金额累加;(7) 将(6)的累加结果/净资产;(8) 剩余天数在 180 天到 270 天(含)以内的头寸
33、金额累加;(9) 将(8)的累加结果/净资产;(10) 剩余天数在 270 天到 365 天(含)以内的头寸金额累加;(11) 将(10)的累加结果/净资产;图表中数据取值方法:1、定义一个数组按 12 月大小分类,按剩余期限将债券的资产按月加和2、按月计算每只债券的静态收益率,*成本加和后/成本合计,加权平均计算月静态收益率,将结果显示在表格中的隐藏列。一个月到期现金流一个月内到期情况名称 评级 发行总额(亿) 剩余存续期(天) 静态收益率(%) 到期日期 数量(1) (2) (3) (4) (5) (6) (7)1、计算方法:取得截止日期的头寸集合,把剩余存续期是一个月内(30 天)的债券
34、数据取得后明细列出(1)【名称】 债券简称;IMBond.ShortName(2)【评级】 债券主体评级;IMBond.InnerBond.IssuerCredit(3)【发行总额】 债券发行量;IMBond.InnerBond.GetIssuedVolume(头寸日期)(4)【剩余存续期】 债券剩余存续期;债券品种调用 GetTermToMatureByExercisType (),非债券品种调用 ClsATSecurityHold. CalShDays(计算日期) (4)【静态收益率】 调用函数 GetStaticYield()(5)【到期日期】 债券到期日期;IMBond.InnerBo
35、nd.MatureDate(6)【数量】 头寸持有量;ClsATSecurityHold.HoldQty3.4 信用产品列表1、计算方法:取得截止日期的头寸进行分析,要筛选出企业债和短融组成新头寸集合(0)【基金名称】 货币基金账户名称;(1)【名称】 债券简称;IMBond.ShortName(2)【评级】 债券主体评级;IMBond.InnerBond.IssuerCredit(3)【发行总额】 债券发行总额;IMBond.InnerBond.GetIssuedVolume(头寸日期)(4)【剩余存续期】 债券剩余存续期;GetTermToMatureByExercisType()(5)【
36、静态收益率】 调用函数;GetStaticYield()(6)【实际损益】(手动输入价格-成本价)*持有数量;见基金结构与浮动盈亏中的实际浮亏计算公式(7)【持仓数量】 头寸持有量;同现金流中的【数量】(8)【发行人】 债券发行人;IMBond.InnerBond.Issuer(9)【持有量】 同一发行人的债券的持有量累加;(10)【占基金净值比例】 同一发行人成本汇总/净资产;(11)【时间】 计算日期;(12)【买入收益率】 直接从数据库中表 BS_ReportPrice 读取数据;附录一、价格编辑界面增加买入收益率列涉及到的文档(2010-1-26)1、 BS_ReportPrice 表
37、结构修改 列 AccountID 由 decimal 类型修改为 Int 类型 增加 YieldBE,YieldBuy 两列,分别存估值收益率和买入收益率结构如下图修改脚本为:-修改 BS_ReportPrice 表结构,增加 YieldBE,YieldBuy 两列if exists(select * from syscolumns as a inner join sysobjects as b on a.id = b.idwhere a.name =AccountID and b.name=BS_ReportPrice )begin-修改字段类型ALTER TABLE dbo.BS_Repo
38、rtPrice ALTER ColumnAccountID Int Not NULLendif not exists(select * from syscolumns as a inner join sysobjects as b on a.id = b.idwhere a.name =YieldBE and b.name=BS_ReportPrice )begin-增加字段 YieldBEALTER TABLE dbo.BS_ReportPrice ADD YieldBE float NULLendif not exists(select * from syscolumns as a inn
39、er join sysobjects as b on a.id = b.idwhere a.name =YieldBuy and b.name=BS_ReportPrice )begin-增加字段 YieldBuyALTER TABLE dbo.BS_ReportPrice ADD YieldBuy Float NULLend2、 增加表 BS_ReportBondYielddetail计算买入收益率涉及到的交易明细的表 BS_ReportBondYielddetail名称 字段名 类型及长度 是否 null 备注账户 ID AccountID Int Not交易 ID TradeID Int
40、 Not 手工添加记录的交易ID 为 0,头寸产生的初始交易 ID 也为 0交易类型 ID TradeTypeID Nvarchar(10) Not 0202:买入0203:卖出日期 Date datetime Not品种 ID SecurityID Int Not数量 Quantity Float Not成交金额 CJAmount Float Not交易日成交价格CJPrice Float Not 对应表 BT_TradeBond中的字段SettlementPrice价格模式 PriceModel Int Not PriceModel=1:净价,PriceModel=0 全价成交收益率 CJ
41、Yield Float Not手动添加标志 IsManual Bit Not 1:手动添加记录0:真实交易记录是否修改过收益率IsModYield Bit Not 1:修改过0:未修改是否初始头寸产生的交易IsIniTrade Int Not 0:不是初始交易1:是初始交易,且是初始头寸产生的初始交易2:是初始交易,且是真实交易产生的初始交易如下图:增加表结构脚本为:if not exists (select * from dbo.sysobjects where id = object_id(Ndbo.BS_ReportBondYielddetail) and OBJECTPROPERTY(
42、id, NIsUserTable) = 1)CREATE TABLE dbo.BS_ReportBondYielddetail (AccountID int NOT NULL ,TradeID int NOT NULL ,TradeTypeID nvarchar (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,Date datetime NOT NULL ,SecurityID int NOT NULL ,Quantity float NOT NULL ,CJAmount float NOT NULL ,CJPrice float NOT NULL ,Pric
43、eModel int NOT NULL ,CJYield float NOT NULL ,IsManual bit NOT NULL ,IsModYield bit NOT NULL,IsIniTrade int NOT NULL ) ON PRIMARY3、 主界面设计需要增加列“买入收益率(%) ”和按钮“设置买入收益率” ,如图所示1)加载页面显示买入收益率(%)列:得到为实际交易记录且(不在 BS_ReportBondYielddetail 表中的交易记录集或者在BS_ReportBondYielddetail 表中但 IsIniTrrade=2 的交易记录)交易记录集,调用函数Get
44、RealTradeAndNotInDetail,第三个参数 mySecurityIDs 为在债券价格编辑界面中存在的债券的品种 ID组成的字符串,最终的记录集为窗体级变量 mRst1读取在表 BS_ReportBondYielddetail 中存在并且不是手工录入的记录并且(不在实际交易记录中存在或者在实际交易中存在但是初始头交易记录(IsIniTrade0 ) )参数:myAccountID:账户 IDmyDate 日期mySecurityIDs:品种 ID 字符串,格式为: 品种 ID1, 品种 ID2, 品种 ID3myOutRst:返回参数:满足条件的交易记录集返回值:True:成功,
45、false:失败3) 函数名:AdustReportBondYielddetail(myAccountID,SecurityID, myRst1,myRst2,myExecuteAffairFlag,myOutIniDate)as boolean功能:对于一支债券补齐表 BS_ReportBondYielddetail 中的交易数据参数:myAccountID:账户 IDmySecurityID:品种 IDmyRst1:一支债券的,为实际交易记录且(不在 BS_ReportBondYielddetail 表中的交易记录集或者在 BS_ReportBondYielddetail 表中但 IsIn
46、iTrrade=2 的交易记录)交易记录集myRst2:一支债券的,在表 BS_ReportBondYielddetail 中存在并且不是手工录入的记录并且(不在实际交易记录中存在或者在实际交易中存在但是初始头交易记录(IsIniTrade0 ) ) 。myExecuteAffairFlag:是否执行事务标志,true:执行,false :不执行myOutIniDate:初始交易日期返回值:True:成功,false:失败函数过程:从表 BS_ReportBondYielddetail 中删除 myRst2 的记录根据初始头寸生成初始交易,如果初始头寸中无此债券,则找初始的导入的该债券的交易,
47、根据此交易生成初始交易myRst1 的记录与 myRst2 的记录进行比对(比对方法:是否同账户,是否同日期、是否同品种、是否同一交易类型 ID、是否同数量、是否同价格) ,看是否为同一条记录是同一条记录,则根据 myRst2 中 IsModYield 来判断取 myRst1 还是根据 myRst2 的成交价格自动计算成交收益率,IsModYield=1,取 myRst2 的成交收益率, IsModYield=0,根据 myRst2的成交价格自动计算成交收益率,将 myRst1 的其他字段以及新得到的成交收益率字段保存入数据库。不是同一条记录,则是一条新导入的交易,需要自动计算成交收益率,然后
48、将数据添加到数据库中。备注:单个交易的成交收益率计算函数为:myIMBond.GetYield(日期, 成交价格,价格模式) ,价格模式:Dirty_Price=1 全价,Clean_Price=2 净价,Tax_Price = 3 带税净价4) 函数名:GetReportBondYielddetail(myAccountID,myBeginDate,myEndDate ,mySecurityID, myOutRst) as boolean功能:从表 BS_ReportBondYielddetail 中得到满足给定账户、满足大于等于开始日期小于等于给定日期以及满足给定品种的记录集参数:myAccountID:账户 IDmyBeginDate:初始交易日期myEndDate:结束日期mySecurityID:品种 IDmyOutRst:从表 BS_ReportBondYielddetail 中得到满足给定账户、满足大于等于开始日期小于等于结束日期以及满足给定品种的记录集返回值:True:成功,false:失败5) 函数名:CalBondYieldBuy功能:计算一支债券的买入收益率,根据每个交易的成交收益率和成交金额加权得到买入收益率,卖出债券只影响持仓量,不影响收益率。参数:myRst:参与计算买入收益率的交易记录