实现交易计算盈利

简介: 来源:根据先进先出原则实现交易.例如:buy 100 share(s) at $20 eachbuy 20 share(s) at $24 eachbuy 200 share(s) at $36 eachsell 150 share(s) at $30 each得出计算结果 940.

来源:

根据先进先出原则实现交易.
例如:

buy 100 share(s) at $20 each
buy 20 share(s) at $24 each
buy 200 share(s) at $36 each
sell 150 share(s) at $30 each

得出计算结果 940.

优先卖掉持有时间最长的.

解题思路

直接使用Arraylist保存,卖出时从第一个开始即可.

当然也可以用队列做.

实现代码

/**
 * calculation the result
 * @param transactions
 * @return
 */
private Integer calculation(List<String> transactions) {
  int result = 0;

  //make the input to sell-100-20 format
  List<String> t = new ArrayList<>();
  for (String transaction : transactions) {
    if ("".equals(transaction)) {
      continue;
    }
    String[] ss = transaction.split(" ");
    t.add(ss[0] + "-" + ss[1] + "-" + ss[4].replace("$", ""));
  }

  for (int i = 0; i < t.size(); i++) {
    //cal while sell
    if (t.get(i).startsWith("sell")) {
      //get the num and the sell price
      int num = Integer.valueOf(t.get(i).split("-")[1]);
      int sellPrice = Integer.valueOf(t.get(i).split("-")[2]);
      //cal the buy before sell
      for (int j = 0; j < i; j++) {
        //sell shares, use FIFO.
        String[] sss = t.get(j).split("-");
        //if sell num < buy num, cal sell num shares in that transcation.
        if (num <= Integer.valueOf(sss[1])) {
          result += num * (sellPrice - Integer.valueOf(sss[2]));
          break;
        } else {
          //if sell num > buy num, cal all shares ,and cal new sellnum.
          result += Integer.valueOf(sss[1]) * (sellPrice - Integer.valueOf(sss[2]));
          num -= Integer.valueOf(sss[1]);
        }
      }
    }
  }

  return result;

}

完。







ChangeLog


2019-02-24 完成



以上皆为个人所思所得,如有错误欢迎评论区指正。

欢迎转载,烦请署名并保留原文链接。

联系邮箱:huyanshi2580@gmail.com

更多学习笔记见个人博客------>呼延十

目录
相关文章
|
6月前
|
弹性计算 运维 Shell
基于市场利率变化的智能存款调整
【4月更文挑战第30天】
51 0
融资租赁产品计算内部收益率IRR
融资租赁产品计算内部收益率IRR
融资租赁产品计算内部收益率IRR
|
6月前
|
存储 区块链
量化合约交易|秒合约|现货期权交易系统开发(成熟源码)
区块链技术虽然有许多优势,但也面临着一些挑战。
|
6月前
|
人工智能 供应链 安全
现货期权交易|秒合约系统开发技术方案
使用智能合约还可以保护和安全地与区块链和传统的业务主体的数据链接
|
Serverless Python
现货期权交易所系统丨现货期权交易所系统开发(方案及详细)丨现货期权交易所源码功能及案例
 As a new information and network technology,blockchain uses encryption technology,distributed network and consensus mechanism to ensure that the information recorded by each node in the network is true and effective.Blockchain is constantly penetrating into all walks of life and has shown a good de
按键精灵实现交易开拓者33个品种回测时间和交易费用的设置
按键精灵实现交易开拓者33个品种回测时间和交易费用的设置
218 0
|
数据采集 监控 安全
北京公交每天超1.6亿的交易数据,是这样撑住的!
车载刷卡机的出现,为公交出行服务提高了一个档次,但它的档次还可以继续提高。 启迪公交(北京)科技股份有限公司,作为国内领先的公交出行服务提供商,携手阿里云研发北京公交二维码乘车业务系统方案,让车载刷卡机设备实现数据采集上云,带来更加便捷的公交出行服务。
402 14
北京公交每天超1.6亿的交易数据,是这样撑住的!
|
区块链 数据安全/隐私保护
区块链应用 | 以太坊网络交易量超 6 大币种总和
以太坊网络交易量超 6 大币种总和
1187 0
下一篇
无影云桌面