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

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

    涉及的小知识点有:

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

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

 

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

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

打开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单元格中获取出相应的证券信息;

获取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、在证券价格或者数量更新时,更新该证券买入或者卖出费用及买入金额或者卖出所得;

更新费用及金额
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;

 

posted @ 2010-04-16 14:06  仙之小林  阅读(379)  评论(0编辑  收藏  举报