`

计算成本价及要打到某一价位需要的投入

 
阅读更多
package com.lwf.test;

import java.math.BigDecimal;

public class Test {
	public static void main(String[] args) {
//		System.out.println(caculateCB("10.8","1800","6.42","3000"));
//		System.out.println(caculateCT("10.8","1800","6.42","7"));
		caculateYK("16.572","6500","19.2");
		caculateMBJ("16.572","5000","30");
	}
	
	/**
	 * 预计涨幅-计算目标价
	 * @param v1 原始买入价
	 * @param c1 原始买入数
	 * @param zf 涨幅如涨20%,只需要输入20
	 */
	public static void caculateMBJ(String v1,String c1 ,String zf1){
		BigDecimal vs1 = new BigDecimal(v1);
		BigDecimal cs1 = new BigDecimal(c1);
		BigDecimal zf = new BigDecimal(zf1);
		BigDecimal vs2 = vs1.add((vs1.multiply(zf)).divide(new BigDecimal("100")));
		BigDecimal yjz =  vs1.multiply(cs1) ;
		BigDecimal xjz =  vs2.multiply(cs1) ;
		BigDecimal yk = xjz.subtract(yjz);
		System.out.println("原始总价值=" + yjz + ",目标总价值=" + xjz + ",盈亏=" + yk + ",涨幅="+zf+"%" + ",原价=" + vs1 + ",目标价="+ vs2 );
	}
	
	/**
	 * 计算涨幅、盈亏
	 * @param v1 原始买入价
	 * @param c1 原始买入数
	 * @param v2 现价
	 */
	public static void caculateYK(String v1,String c1 ,String v2){
		BigDecimal vs1 = new BigDecimal(v1);
		BigDecimal vs2 = new BigDecimal(v2);
		BigDecimal cs1 = new BigDecimal(c1);
		BigDecimal yjz =  vs1.multiply(cs1) ;
		BigDecimal xjz =  vs2.multiply(cs1) ;
		BigDecimal yk = xjz.subtract(yjz);
		BigDecimal zf = ((vs2.subtract(vs1)).divide(vs1, BigDecimal.ROUND_HALF_UP)).multiply(new BigDecimal("100"));
		System.out.println("原始总价值=" + yjz + ",现在总价值=" + xjz + ",盈亏=" + yk + ",涨幅="+zf+"%" + ",原价=" + vs1 + ",现价="+ vs2);
	}
	
	/**
	 * 计算补仓后的成本价
	 * @param v1 原始买入价
	 * @param c1 原始买入数
	 * @param v2 补仓价即现价
	 * @param c2 补仓数
	 * @return 补仓后成本价
	 */
	public static String caculateCB(String v1,String c1 ,String v2, String c2){
		BigDecimal vs1 = new BigDecimal(v1);
		BigDecimal vs2 = new BigDecimal(v2);
		BigDecimal cs1 = new BigDecimal(c1);
		BigDecimal cs2 = new BigDecimal(c2);
		BigDecimal retVal = ((vs1.multiply(cs1)).add(vs2.multiply(cs2))).divide(cs1.add(cs2), BigDecimal.ROUND_HALF_UP);
		BigDecimal money = cs2.multiply(vs2);
		System.out.println("原始购入:" + c1 + "股,原成本价:"+ v1 + ",现价:" + v2 + ",购入:" + c2 + "股" + ",补仓后成本价降为:" + retVal.toString() + ",需要金额:" + money);
		return retVal.toString() ;
	}
	
	/**
	 * 计算要打到某一成本价需要补多少股
	 * @param v1 买入价
	 * @param c1 原始买入数
	 * @param v2 补仓价即现价
	 * @param v3 目标成本价即完成补仓后的成本价
	 * @return 需要补仓的股数
	 */
	public static String caculateCT(String v1,String c1,String v2, String v3){
		
		BigDecimal vs1 = new BigDecimal(v1);
		BigDecimal vs2 = new BigDecimal(v2);
		BigDecimal vs3 = new BigDecimal(v3);
		BigDecimal cs1 = new BigDecimal(c1);
		int cv = vs3.compareTo(vs2);
		if(cv <= 0){
			return "目标成本价跟现价一致或低于现价!";
		}
		int cv1 = vs1.compareTo(vs3);
		if(cv <=0){
			return "目标成本价跟原价一致或高于原价!";
		}
		Integer retVal =((vs1.subtract(vs3)).multiply(cs1)).divide((vs3.subtract(vs2)),BigDecimal.ROUND_HALF_UP).intValue();
		String val = String.valueOf((retVal*100/10000)*100);
		BigDecimal money = vs2.multiply(new BigDecimal(val));
		System.out.println("原始购入:" + c1 + "股,原成本价:"+ v1 + ",现价:" + v2 + ",想把成本价降为:" + v3 + ",需要购入:" + val + "股" + ",需要金额:" + money );
		return  val;
	}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics