0版系统成本等算法.docx
- 文档编号:14786029
- 上传时间:2023-06-27
- 格式:DOCX
- 页数:16
- 大小:21.24KB
0版系统成本等算法.docx
《0版系统成本等算法.docx》由会员分享,可在线阅读,更多相关《0版系统成本等算法.docx(16页珍藏版)》请在冰点文库上搜索。
0版系统成本等算法
06版系统算法维护手册
1前言
本文档用于介绍06版柜台交易系统的一些主要算法的说明和举例,提供工程、维护人员、证券公司信息技术人员实际应用中作为参考。
2成本价和盈亏额算法
算法相关表的主要字段说明
1)股票表算法相关字段说明(stock)
字段名字段含义
STOCK_CODE股票代码
CURRENT_AMOUNT当前数量
……
SUM_BUY_AMOUNT累计买入数量
SUM_BUY_BALANCE累计买入金额
SUM_SELL_AMOUNT累计卖出数量
SUM_SELL_BALANCE累计卖出金额
COST_PRICE成本价
2)股票变动表算法相关字段说明(stockreal)
字段名字段含义
STOCK_CODE股票代码
……
ENTRUST_SELL_AMOUNT委托卖出数量
REAL_BUY_AMOUNT回报买入数量
REAL_SELL_AMOUNT回报卖出数量
REAL_BUY_BALANCE回报买入金额
REAL_SELL_BALANCE回报卖出金额
成本和赢亏说明
成本价的算法目前共有三种,分别为买入均价、持仓成本、保本价,有关成本价的一些知识说明如下:
1、成本价计算模式支持到个人,即每个客户都可以通过“资金-帐户修改-资产帐户修改”对成本价计算模式进行设置和调整(fundaccount.profit_flag)。
如果客户的成本价类型(profit_flag)为空,则取系统的成本价类型,即1002开关设置的值。
2、后台每条股份记录(stock)都具有四个字段:
sum_buy_amount累计买入数量、sum_buy_balance累计买入金额、sum_sell_amount累计卖出数量、sum_sell_balance累计卖出金额。
这四个字段对于计算累计买卖后的成本价和盈亏金额非常有用,通常在日终清算时对这四个字段进行相关处理。
3、当日发生交易,产生股份变动记录(stockreal),也具有四个字段:
real_buy_amount成交买入数量、real_buy_balance成交买入金额、real_sell_amount成交卖出数量、real_sell_balance成交卖出金额。
这四个字段对于计算当日买卖后的成本价和盈亏金额非常有用,通常在回报成交时对这四个字段进行相关处理。
4、每天股份记录同时还有一个成本价字段cost_price,是日终清算时自动根据买入均价计算得到的,对于成本类型为0的客户,成本价直接取自该字段。
5、系统后台本身不记录股份盈亏金额,查询的时候通过同一个算法(不论当前客户是哪种成本价计算模式)计算出股份盈亏金额income_balance。
6、当费用比率通过前台程序进行进行修改时,as上缓存的费用(支持设置在内存数据库的那些表)会自动进行同步,不需要重启AS。
目前基准费用设置需要重启AS。
7、3107开关设置的多冻结的值,会对计算当天买入卖出的费用计算和盈亏中的费用部分产生一定的但较小的影响。
成本价算法
类型0买入均价
成本价由日终来计算,白天实时成交买入和卖出不影响成本价,不考虑卖出费用;
在200708的基线包前,cost_price包含了买入费用,以后不再包含买入费用。
【公式】
后台
成本价日终后处理时对成本价字段进行自动设置。
前台显示
成本价=后台股票表的成本价
cost_price=stock.cost_price
类型1持仓成本
成本价实时计算,考虑白天实时成交买入,但不考虑白天实时成交卖出;该成本价包含了买入费用,但不考虑卖出费用。
【公式】
后台
成本价日终后处理时对成本价相关字段进行自动设置。
前台显示
成本价=(累计买入金额+回报买入金额)/(累计买入数量+回报买入数量)
=(sum_buy_balance+real_buy_balance)/(sum_buy_amount+real_buy_amount)
类型2保本价
成本价实时计算,考虑白天实时成交买入和卖出,所以白天买入卖出均影响成本价,同时该成本价包含了买入卖出费用;且采用步进算法,计算时步长以1厘为单位。
【公式】
后台
成本价日终后处理时对成本价相关字段进行自动设置。
前台显示
1)成本价需要分步进行步进计算,首先得到一个不包含卖出费用的成本价的起始值cost_price
=(累计买入金额+回报买入金额-累计卖出金额-回报卖出金额)
/(累计买入数量+回报买入数量-累计卖出数量-回报卖出数量)
=(sum_buy_balance+real_buy_balance-sum_sell_balance-real_sell_balance)/(sum_buy_amount+real_buy_amount-sum_sell_amount-real_sell_amount);
2)计算卖出费用temp_fare,需根据4125配置不同进行计算
4125=1,则为估算方式,费用比例取4126设置
temp_fare=(current_amount+real_buy_amount-real_sell_amount)*last_price*0.00000001*4126的配置值
cost_price=(sum_buy_balance+real_buy_balance-sum_sell_balance-real_sell_balance)/(1-0.00000001*4126的配置值)/(current_amount+real_buy_amount-real_sell_amount)
4125=2,则为预算方式,费用比例取自后台设置的标准费用类别计算得到temp_fare。
4125=0,则为实算方式,费用比例取自后台设置的客户实际费用类别计算得到temp_fare。
3)按步长单位进行计算
如果temp_mis=(current_amount+real_buy_amount-real_sell_amount)*cost_price-(sum_buy_balance+real_buy_balance-sum_sell_balance-real_sell_balance)-temp_fare<0
则按成本价步长1厘进行逼近计算,直到temp_mis>=0.0000000000001,计算结束,此时cost_price即为保本价。
盈亏算法
无论选择何种成本价类型,盈亏算法一样,区别在于卖出费用计算部分(针对不同的4125设置),其中标准券888886和200000不计盈亏:
盈亏金额=证券市值-累计买入金额-回报买入金额+累计卖出金额+回报卖出金额-卖出费用
=market_value-(sum_buy_balance+real_buy_balance-sum_sell_balance
-real_sell_balance)–temp_fare
其中temp_fare的计算按price表的最新价(last_price)计算且依赖于开关4125:
开关4125为2,卖出费用进行预算,则按标准费用类别(bfare0)计算后台计算得到temp_fare
开关4125=0,或1则为实算方式,费用比例取自后台设置的客户实际费用类别计算得到temp_fare。
成本赢亏的举例
1)某个客户某天买入000008,10000股,成交价格10元,假设客户对应费用类别的费用比例为0.004,预算费用比例4126设置为0.005,标准费用比例为0.006(此费用不是9999的费用),目前行情最新价已为11元,则白天成交后,后台stock和stockreal表中和成本盈亏相关的字段情况。
白天成交后的stock和stockreal表中和成本盈亏相关的字段情况如下:
Stock:
Current_amount
Sum_buy_balance
Sum_buy_amount
Sum_sell_amount
Sum_sell_balance
Cost_price
0
0
0
0
0
0
Stockreal:
Real_buy_balance
real_buy_amount
real_sell_amount
real_sell_balance
100400
10000
0
0
则选择不同成本类型时的成本价如下:
0成交均价:
成本价=cost_price=0
1持仓成本:
成本价=(sum_buy_balance+real_buy_balance)/(sum_buy_amount+real_buy_amount)=100400/10000=10.040
2保本价:
4125=1
则成本价=(sum_buy_balance+real_buy_balance-sum_sell_balance-real_sell_balance)/(1-0.005)/(current_amount+real_buy_amount-real_sell_amount)=100400/(1-0.005)/10000=10.090
4125=2,成本价在初始的10.040基础上,按步长进行步进计算,直到temp_mis=(current_amount+real_buy_amount-real_sell_amount)*cost_price-(sum_buy_balance+real_buy_balance-sum_sell_balance-real_sell_balance)-temp_fare=10000×成本价-100400-110000×0.006》=0为止,得到成本价=10.101
盈亏:
=market_value-(sum_buy_balance+real_buy_balance-sum_sell_balance
-real_sell_balance)–temp_fare
4125=2,盈亏=10000×11-100400-10000×11×0.006=8940
4125=0或1,盈亏=10000×11-100400-10000×11×0.004=9160
日终清算后的stock和stockreal表中和成本盈亏相关的字段情况如下:
Stock:
Current_amount
Sum_buy_balance
Sum_buy_amount
Sum_sell_amount
Sum_sell_balance
Cost_price
10000
100400
10000
0
0
10
Stockreal:
Real_buy_balance
real_buy_amount
real_sell_amount
real_sell_balance
0
0
0
0
0成交均价:
成本价=cost_price=10
1持仓均价:
成本价=10.040
2保本价:
4125=1则成本价=10.090
4125=2则成本价=10.101
盈亏:
4125=2,盈亏=8940
4125=0或1,盈亏=9160
2)假如第二天客户以12元的价格卖出了5000股000008,假设客户对应费用类别的费用比例为0.004,预算费用比例4126设置为0.005,标准费用比例为0.006(此费用不是9999的费用),目前行情最新价已为12元,则白天成交后,后台stock和stockreal表中和成本盈亏相关的字段情况如下:
Stock:
Current_amount
Sum_buy_balance
Sum_buy_amount
Sum_sell_amount
Sum_sell_balance
Cost_price
10000
100400
10000
0
0
10
Stockreal:
Real_buy_balance
real_buy_amount
real_sell_amount
real_sell_balance
0
0
5000
59760
则选择不同成本类型时的成本价如下:
0成交均价:
成本价=cost_price=10
1持仓均价:
成本价=10.040
2保本价:
4125=1
则成本价=(100400-59760)/(1-0.005)/5000=8.169
4125=2,成本价在初始的8.128基础上,按步长进行步进计算,直到temp_mis=(current_amount+real_buy_amount-real_sell_amount)*cost_price-(sum_buy_balance+real_buy_balance-sum_sell_balance-real_sell_balance)-temp_fare》=0为止,得到成本价=8.178
盈亏:
=market_value-(sum_buy_balance+real_buy_balance-sum_sell_balance
-real_sell_balance)–temp_fare
4125=2,盈亏=5000*12-(100400-59760)-5000×12×0.006=19000
4125=0或1,盈亏=5000*12-(100400-59760)-5000×12×0.004=19120
日终清算后的stock和stockreal表中和成本盈亏相关的字段情况如下:
Stock:
Current_amount
Sum_buy_balance
Sum_buy_amount
Sum_sell_amount
Sum_sell_balance
Cost_price
5000
100400
10000
5000
59760
10
Stockreal:
Real_buy_balance
real_buy_amount
real_sell_amount
real_sell_balance
0
0
0
0
0成交均价:
成本价=cost_price=10
1持仓均价:
成本价=10.040
2保本价:
4125=1
则成本价=(100400-59760)/(1-0.005)/5000=8.169
4125=2,成本价在初始的8.128基础上,按步长进行步进计算,直到temp_mis=(current_amount+real_buy_amount-real_sell_amount)*cost_price-(sum_buy_balance+real_buy_balance-sum_sell_balance-real_sell_balance)-temp_fare》=0为止,得到成本价=8.178
盈亏:
=market_value-(sum_buy_balance+real_buy_balance-sum_sell_balance
-real_sell_balance)–temp_fare
4125=2,盈亏=5000*12-(100400-59760)-5000×12×0.006=19000
4125=0或1,盈亏=5000*12-(100400-59760)-5000×12×0.004=19120
日终业务对成本的影响
日终系统根据不同的业务计算sum_buy_amount,sum_sell_amount,sum_buy_balance,sum_sell_balance,cost_price值,并更新stock表。
a、证券买卖等:
business_typein('0','U','F','D')的业务,如果occur_balance>0.0,则sum_sell_balance增加occur_balance,否则,sum_buy_balance增加abs(occur_balance);如果occur_amount>0,则sum_buy_amount增加occur_amount,否则sum_sell_amount增加abs(occur_amount)。
b、申购中签、配售确认等:
business_typein('1','E','O')业务,sum_buy_balance增加abs(occur_balance),sum_buy_amount增加abs(occur_amount)。
c、红股入帐:
business_type='3'业务,sum_buy_amount增加abs(occur_amount)。
d、新股入帐和配股入帐:
business_typein('2','4')业务,其中对lof上市stock_type=’K’除外,其他sum_buy_balance增加occur_amount×business_price,sum_buy_amount增加occur_amount。
e、股息入帐:
business_type='6'业务,sum_sell_balance增加abs(occur_balance)。
f、证券托管、转托和余额入帐:
business_typein('7','8','B')业务,以price的收盘价asset_price作为成交价business_price计算成本,如果occur_amount>0,则sum_buy_balance增加business_price×occur_amount,则sum_buy_amount增加occur_amoun;否则sum_sell_balance增加business_price×abs(occur_amount),sum_sell_amount增加abs(occur_amount)。
g、指定交易:
business_type='A'且7511<>1(不是上海新接口),则置sum_buy_balance=0,
sum_sell_balance=0,sum_buy_amount=0,sum_sell_amount=0,cost_price=0,
如为上海新接口,则成本字段不作变化。
h、开基申赎:
business_flag=4073业务,sum_buy_balance增加abs(occur_balance),sum_buy_amount增加abs(occur_amount);business_flag=4074业务,sum_sell_balance增加abs(business_balance),sum_sell_amount增加abs(occur_amount)。
i、置买入均价:
根据上面的结算结果,对于sum_buy_balance的增加量》0,如果证券后余额post_amount为0的,置cost_price=0.0,
否则,cost_price=【(post_amount-_occur_amount)×cost_price+sum_buy_balance的增加量】/【post_amount】
3资金算法
表和相关字段的说明
资金表相关字段说明(fund)
字段名字段含义
fund_account资金帐号
begin_balance期初余额
current_balance当前余额
cash_balance现金余额
check_balance支票余额
frozen_balance冻结资金
unfrozen_balance解冻资金
uncome_buy_balance未回买入金额
uncome_sell_balance未回卖出金额
uncome_correct_balance未回买卖净额
correct_balance资产修正金额
foregift_balance禁取资金
mortgage_balance禁取资产
bail_balance交易产生的可用资金
具体算法计算
在系统中,将用到几种不同含义的资金余额:
期初余额、当前余额、可取金额、可用金额等。
期初余额(begin_balance)
指当天初始化后的最初余额,往往等同与前一天的最终余额。
当前余额(current_balance)
当前余额=期初余额+存入金额-取出金额+蓝补金额-红冲金额
可用资金(enable_balance)
可用金额=当前金额-冻结金额+解冻金额+交易解冻和冻结的差
Enable_balance=fund.current_balance-fund.frozen_balance+fund.unfrozen_balance
+fund.bail_balance
其中fund.bail_balance是交易产生的解冻和冻结之差,通过以下实时计算得到
fund.bail_balanc=sum(business_unfrozen_balance-business_frozen_balance)
可取金额(fetch_balance)
1)可取金额=当前金额-冻结金额+sum(交易解冻-交易冻结)-max(临时资金,0)-禁取资金-未回卖出金额
注1:
sum(交易解冻-交易冻结=bail_balance=sum(business_unfrozen_balance-business_frozen_balance)为交易解冻和交易冻结的差,现在实时体现在FUND表bail_balance字段上,
注2:
临时资金=未回差额(uncome_correct_balance)+sum(交易解冻-交易冻结),即临时资金=uncome_correct_balance+bail_balance,其中未回差额uncome_correct_balance在fund表里每日初始化会根据undeliver算得一个uncome_correct_balance字段。
2)如果2019设置为当天存入不允许取出,则
可取资金=可取资金-当日存入不许取的发生额
其中当日存入不允许取的发生额为fundjour中现金类业务标志包含2001,2003,2041的累计发生额和支票类业务标志为2405的累计发生额。
3)如果客户有禁取资产且(总资产-禁取资产)>0,
a.当可取资金>总资产-禁取资产时,
则可取资金=总资产-禁取资产,
b.当可取资金<总资产-禁取资产时
可取资金=0。
可取现金(fetch_cash)
1)如果2018设置允许支票自动套现:
则可取现金fetch_cash=可取资金fetch_balance。
2)如果2018设置不允许支票自动套现:
如当前余额current_balance-支票金额check_balance<现金余额cash_balance时,
则可取现金fetch_cash=现金余额cash_balance;
如当前余额current_balance-支票金额check_balance>可取资金fetch_balance时,
则可取现金fetch_cash=可取资
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 系统 成本 算法