`
hdu0704
  • 浏览: 12798 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

计算股票最大收益

 
阅读更多

       给定一个整数数组,数组的值代表股票的历史价格,找出令收益最大的买点和卖点。

       类似于找出数组中的最大差值,不过多了一个限定条件,就是买点必须在卖点之前。下面是用java写的一个时间复杂度为O(n)的算法。

public class TestStock {
	public static void main(String[] args) {
		int[] prices = { 32, 69, 3, 8, 1, 2, 19, 22, 2, 35, 23 };
		// int[] prices = { 35, 23, 22, 18, 15, 13, 1 };
		int[] result = maxProfit(prices);
		System.out.println("买入价为" + result[0] + ",卖出价为" + result[1] + ",利润为"
				+ result[2] + "。");
	}

	public static int[] maxProfit(int[] prices) {
		if (prices.length < 2) {
			throw new RuntimeException("股票价格数不小于2");
		}
		int lowPoint = prices[0];// 买入点
		int maybeLowPoint = prices[0];// 可能的买入点
		int hignPoint = prices[1];// 卖出点
		int diff = prices[1] - prices[0];// 差价
		for (int i = 1; i < prices.length; i++) {
			if (prices[i] < maybeLowPoint) {
				// 如果价格一直跌,选择跌得最少的那个点买入卖出
				if (prices[i] - maybeLowPoint > diff) {
					diff = prices[i] - maybeLowPoint;
					lowPoint = maybeLowPoint;
					hignPoint = prices[i];
				}
				maybeLowPoint = prices[i];
			} else {
				if (prices[i] - lowPoint > diff) {
					diff = prices[i] - lowPoint;
					hignPoint = prices[i];
				}
				if (prices[i] - maybeLowPoint > diff) {
					diff = prices[i] - maybeLowPoint;
					lowPoint = maybeLowPoint;
					hignPoint = prices[i];
				}
			}
		}
		// 将结果返回
		int[] result = new int[3];
		result[0] = lowPoint;
		result[1] = hignPoint;
		result[2] = diff;
		return result;
	}
}

       首先假设数组第一个数为买入点,第二个数为卖出点,第二个数减去第一个数为最大利润。问题的关键是什么时候替换买入点和卖出点。这里需要引入另一个常量,初始值与买入点相同,记作备用买入点。接着就可以开始遍历数组了。如果当前值比买入点还要低,我们先将这个值赋给备用买入点,因为不能保证后面还有值与其相减会大于原先的最大利润。如果当前减去备用买入点大于原先的最大利润,将这个值赋给卖出点,将备用买入点赋给买入点,同时更新最大利润。

       当最大利润不为正数,即数组里的数是递减的时候,需要在赋值给备用买入点之前再加一个判断。如果当前值减去备用买入点大于最大利润,更新买入点,卖出点及最大利润。

 

 

分享到:
评论

相关推荐

    Risk_VaR_VaR计算方法_risk_股票VaR计算_var_

    在本文件"Risk_VaR.m"中,我们将探讨如何使用这些方法来计算股票的VaR,并且可能涉及到从Yahoo Finance导入CSV文件获取股票历史数据。 首先,历史模拟法是通过历史价格数据来预测未来可能的损失。它假设历史会重演...

    var计算_蒙特卡洛VaR_蒙特卡洛_matlab_股票VaR计算_var_

    本文将详细探讨如何利用蒙特卡洛方法在MATLAB环境中计算股票VaR,以及与之相关的概念和技术。 首先,"蒙特卡洛VaR"是指通过随机模拟来估算VaR的方法。在金融市场中,由于价格的不确定性,未来收益分布往往是非正态...

    股票交易计算软件源代码

    在股票投资中,投资者往往关注何时卖出股票以获取最大利润。该功能允许用户输入购买价格、买入股数以及期望的盈利金额,软件将自动计算出需要卖出的价格,以确保达到预期的收益目标。 其次,软件支持“按卖出价计算...

    可以计算补仓的股票交易计算器

    7. **风险管理**:通过计算最大回撤、风险回报比等指标,股票交易计算器有助于投资者评估其风险承受能力,设定合理的止损点。 8. **交易费用理解**:不同的交易平台可能有不同的交易费用结构,如固定佣金、按比例...

    华龙股票收益计算器

    华龙股票收益计算器 V9.6[2002年7月18日版],主要增强以下一些功能: 一、修正了V9.5版本中的一个关于数据转换的重大错误,主要是由于在接近完成时临时添加了买卖时间的内容,所以对于老版本的数据文件转换为新版本...

    期中大作业 R语言 要求1:分别计算股票的均值、方差、峰度、偏度,并完成正态分布检验

    要求2:分别计算股票收益率在2020年均值、方差在95%置信水平下的置信区间; 要求3:计算两个公司股票的均值差、方差比,在95%置信水平下的置信区间; 要求4:依据2019年的财务数据处理为年末财务指标,首先剔除...

    基于协方差理论的最优股票投资组合分析

    本文采用的模型通过计算股票收益率的方差来衡量投资风险,并通过计算股票间的协方差来衡量不同股票之间的风险相关性。通过线性规划方法,计算出在既定的风险水平下的最优投资比例,即在不超过投资者预期收益率的情况...

    东吴证券_0913_东吴证券股票最大跌幅多因子研究.pdf

    【量化金融】领域的这篇报告——"东吴证券_0913_东吴证券股票最大跌幅多因子研究.pdf"深入探讨了如何运用多因子量化策略来评估和预测股票的最大跌幅,这对于绝对收益类产品的管理、两融业务担保品的选择、股票质押式...

    股票投资组合分析.doc

    这种分析旨在最大化预期收益,同时控制风险,通常涉及多个维度的数据处理,包括股票价格、收益率计算、风险评估和组合优化。 在本案例中,分析涉及了五支具体的股票,分别是韦国照选择的通鼎互联(002491)、杨志武...

    matlab简单投资组合净值计算

    在MATLAB中,可以使用`price2ret`函数从价格数据计算日收益率,或者通过差分法计算连续复利收益率。 4. **设定权重**:投资组合中的每个资产都有相应的权重,表示投资的相对比例。权重的确定可以根据投资者的风险...

    98年数学建模试题 投资的收益和风险

    市场上有n种资产(如股票、债券、…)Si ( i=1,…n) 供投资者选择,某公司有数额为M的一笔相当大的资金可用作一个时期的投资。公司财务分析人员对这n种资产进行 了评估,估算出在这一时期内购买Si的平均收益率为ri,...

    股票的最大利润(后序遍历)1

    股票的最大利润问题是一个经典的动态规划或贪心策略问题,它涉及到在给定的一系列股票价格中寻找最佳的买卖时机以获得最大收益。在这个问题中,我们假设不允许进行多次交易,即只能买入一次并卖出一次股票。 题目...

    证券投资学计算题类型及练习.doc

    证券组合投资的目标是分散风险并追求最大收益。练习10和11分别计算风险最小组合的投资比例和投资组合的预期收益率及标准差。这里需要用到协方差和相关系数来衡量资产间的关联性,进而确定最优投资比例。 【套利定价...

    财务管理第26章 每股收益.pptx

    例如,一家公司在一年中可能有增发新股票或回购旧股票的行为,此时就需要根据具体时间计算股票的实际发行数量,然后将其加权平均。 除了基本每股收益,稀释每股收益(Diluted EPS)也是评估企业盈利能力的重要指标...

    (2021-2022)年专题资料有无卖空条件下有效前沿的计算基于股票案例的研究.doc

    【实证分析】文章通过选取六只上交所上市的股票进行分析,利用历史数据计算预期收益率和协方差,以此来构建有效前沿。这种方法可以帮助理解不同股票组合的风险和收益特性,找到在特定风险水平下的最佳投资组合比例。...

    Excel模板股票投资组合分析模型.zip

    2. 计算区:利用Excel函数计算每只股票的平均收益率、标准差以及与其他股票的相关系数。 3. 组合绩效图表:通过散点图展示不同权重下的预期收益与风险关系,即有效前沿曲线。 4. 最优组合:找到给定风险下收益最大的...

    计算风险价值VaR

    在本文中,我们将深入探讨VaR的计算方法,包括数据可视化与标准化、历史模拟法、以及两种不同的蒙特卡罗模拟方法:基于随机收益率序列的计算和基于几何布朗运动的模拟。 首先,数据可视化与标准化是分析投资组合...

    基于蒙特卡罗方法及均值方差模型的股票投资策略研究

    通过计算股票收益率的方差和标准差,可以确定风险分位数,进而得到各个基金公司的风险价值,如H公司的风险价值为987710952元,而F公司为208297104元。 再者,蒙特卡罗模拟方法是通过大量随机抽样来解决问题的一种...

Global site tag (gtag.js) - Google Analytics