使用Delphi实现的证券交易费用及盈亏计算

    在cnblogs上开通了博客,想想总要写点什么咚咚吧,今天就把这两天业余时间做的一个小东西拿出来分享下。

2010041623315225.jpg

    涉及的小知识点有:

    1、如何使用Delphi从Excel中获取数据;

    2、证券交易费用及盈亏的简单计算;

 

    1、获取Excel的数据有多种,本程序使用比较简便的获取方式,采用Com的Ole对象。

    1)在创建窗体时创建Excel对象,同时打开Excel工作簿,置Excel窗口不显示;

ContractedBlock.gif ExpandedBlockStart.gif 打开Excel
 
   
1 procedure TForm1.FormCreate(Sender: TObject);
2   var
3 ExcelPath: string ;
4   begin
5 ExcelPath : = ExtractFilePath(Application.EXEName) + ' stockcode.xls ' ;
6 try
7 ExcelApp : = CreateOleObject( ' Excel.Application ' );
8 WorkBook : = ExcelApp.Workbooks.Open(ExcelPath);
9 ExcelApp.Visible : = False;
10 except
11 MessageDlg( ' stockcode.xls打开异常! ' , mtWarning, [mbYes], 0 );
12 end ;
13   end ;

    2)在更新证券代码时,按照指定的证券代码从Excel单元格中获取出相应的证券信息;

ContractedBlock.gif ExpandedBlockStart.gif 获取Excel单元格数据
 
   
1 procedure TForm1.edStockCodeValidate(Sender: TObject; var Valid: Boolean);
2   var
3 iRowCount: Integer;
4   begin
5 InitDisp( 0 );
6 if Copy(edStockCode.Text, 0 , 2 ) <> ' 60 ' then
7 lbExchangeName.Caption : = ' 深圳 '
8 else
9 lbExchangeName.Caption : = ' 上海 ' ;
10
11 for iRowCount : = 2 to 1000 do
12 begin
13 if edStockCode.Text = ExcelApp.Cells[iRowCount, 1 ].Value then
14 begin
15 lbStockName.Caption : = ExcelApp.Cells[iRowCount, 2 ].Value;
16 lbListingDate.Caption : = ExcelApp.Cells[iRowCount, 3 ].Value;
17 lbIndustryName.Caption : = ExcelApp.Cells[iRowCount, 6 ].Value;
18 lbRegion.Caption : = ExcelApp.Cells[iRowCount, 4 ].Value + ' ' + ExcelApp.Cells[iRowCount, 5 ].Value;
19 Break;
20 end ;
21 end ;
22   end ;

    3)在退出程序的时候,切勿忘记关闭Excel工作簿,并释放Excel对象。

 
  
1 procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
2   begin
3 WorkBook.Close;
4 ExcelApp.Quit;
5 ExcelApp : = Unassigned;
6   end ;

     2、在证券价格或者数量更新时,更新该证券买入或者卖出费用及买入金额或者卖出所得;

ContractedBlock.gif ExpandedBlockStart.gif 更新费用及金额
 
   
1 procedure TForm1.edBuyPriceValidate(Sender: TObject; var Valid: Boolean);
2   begin
3 // 成交金额 = 成交价格 * 成交数量
4 edBuyBal.Text : = FloatToStr(StrtoFloatDef(edBuyPrice.Text, 0 ) * StrtoFloatDef(edBuyAmount.Text, 0 ));
5
6 // 初始化卖出价格
7 edSellPrice.Text : = edBuyPrice.Text;
8
9 // 佣金 = 成交金额 * 佣金费率,最低5元
10 if edBuyBal.AsFloat * 0.0006 > 5 then
11 edCommission.Text : = FloatToStr(RoundTo(edBuyBal.AsFloat * 0.0006 , - 2 ))
12 else
13 edCommission.Text : = ' 5.00 ' ;
14
15 // 印花税 = 成交金额 * 印花税率 (交易所规定买方暂不收取印花税)
16 // edStampDuty.Text : = FloatToStr(edBuyBal.AsFloat * 0.001 )
17 edStampDuty.Text : = ' 0 ' ;
18
19 // 过户费 = 成交数量 * 过户费率 最低1元 (深圳不收取过户费)
20 if Trim(lbExchangeName.Caption) = ' 上海 ' then
21 begin
22 if edBuyAmount.AsFloat * 0.001 > 1 then
23 edTransFee.Text : = FloatToStr(RoundTo(edBuyAmount.AsFloat * 0.001 , - 2 ))
24 else
25 edTransFee.Text : = ' 1 ' ;
26 end
27 else
28 edTransFee.Text : = ' 0 ' ;
29
30 // 买入成本 = 成交金额 + 佣金 + 印花税 + 过户费
31 edCostBal.Text : = FloatToStr(RoundTo(edBuyBal.AsFloat + edCommission.AsFloat + edStampDuty.AsFloat +
32 edTransFee.AsFloat, - 2 ));
33
34 // 盈亏 = 卖出所得 - 买入盈亏
35 edIncome.Text : = FloatToStr(edGetBal.AsFloat - edCostBal.AsFloat);
36
37 // 盈亏大于0时,控件字体为红色,否则为绿色
38 if edIncome.AsFloat > 0 then
39 begin
40 edIncome.Font.Color : = clRed;
41 RzLabel21.Font.Color : = clRed;
42 end
43 else
44 begin
45 edIncome.Font.Color : = clGreen;
46 RzLabel21.Font.Color : = clGreen;
47 end ;
48   end ;

 

转载于:https://www.cnblogs.com/wangxl/archive/2010/04/16/1713548.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值