1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > ETF买卖基金网格生成器

ETF买卖基金网格生成器

时间:2019-07-08 15:47:26

相关推荐

ETF买卖基金网格生成器

看了E大网格操作的文章后,按照E大的思路生成了一个网格生成器,感谢E大!!

注意使用网格时,要合理设置小网,中网,大网。

import java.util.ArrayList;import java.util.List;// 网格生成器 用来生成基金的操作网格public class Solution {public static void main(String[] args) {List<RowData> smallNet = generateNet(1.0, 0.05, 0.50, 0.08, 0.07, 10000.00, 2.0);printNet(smallNet);// List<RowData> middleNet = generateNet(0.97, 0.15, 0.65// , 0.1, 10000.00, 0.0);// printNet(middleNet);//// List<RowData> bigNet = generateNet(0.87, 0.30, 0.65// , 0.2, 10000.00, 0.0);// printNet(bigNet);// List<RowData> allNet = new ArrayList<>();// allNet.addAll(smallNet);// allNet.addAll(middleNet);// allNet.addAll(bigNet);//// allNet = allNet.stream().sorted((d1, d2) -> {//if (d1.buyUnitPrice - d2.buyUnitPrice > 0) {// return -1;//} else {// return 1;//}// }).collect(Collectors.toList());//// printNet(allNet);}// 打印网格public static void printNet(List<RowData> net) {System.out.printf("%-5s %-4s %-5s %-10s %-9s %-4s %-9s %-9s %-9s %-8s %-9s %-9s\n\n", "序号", "幅度", "买入", "买入数量", "买入金额", "卖出", "卖出数量", "卖出金额", "盈利金额", "盈利比例%", "本期留存数量", "本期留存利润");for (int i = 0; i < net.size(); ++i) {RowData data = net.get(i);System.out.printf("%-6d %-6.2f %-6.3f %-12d %-12.2f %-6.3f %-12d %-12.2f %-12.2f %-12.2f %-12d %-12.2f\n\n", i + 1, data.retreatRate, data.buyUnitPrice, data.buyCnt, data.buyTotalPrice, data.saleUnitPrice, data.saleCnt, data.saleTotalPrice, data.profit, (data.profitRate * 100), data.curLeftCnt, data.curLeftProfit);}}/*** 传入参数,生成网格** @param initPrice 设定最开始的单价* @param decRate 递减比例* @param decRateUpperLimit 递减比例上限,最好能整除递减比例* @param incRate 递增比例* @param increaseRatePerGrid 递减一格增加总金额的比例* @param initTotalPrice最开始的买入总价* @param remainProfitRate 留利润比例* @return 产生的网格*/public static List<RowData> generateNet(double initPrice, double decRate, double decRateUpperLimit, double incRate, double increaseRatePerGrid, double initTotalPrice, double remainProfitRate) {List<RowData> ret = new ArrayList<>();int num = (int) (decRateUpperLimit / decRate);for (int i = 0; i <= num; ++i) {RowData data = new RowData();data.retreatRate = 1 - decRate * i;data.buyUnitPrice = initPrice * data.retreatRate;data.buyTotalPrice = initTotalPrice * Math.pow(1 + increaseRatePerGrid, i);data.buyCnt = (int) (data.buyTotalPrice / data.buyUnitPrice);data.saleUnitPrice = data.buyUnitPrice + initPrice * incRate;data.profit = data.saleUnitPrice * data.buyCnt - data.buyTotalPrice;data.saleTotalPrice = data.saleUnitPrice * data.buyCnt - data.profit * remainProfitRate;data.saleCnt = (int) (data.saleTotalPrice / data.saleUnitPrice);data.profitRate = data.profit / data.buyTotalPrice;data.curLeftCnt = data.buyCnt - data.saleCnt;data.curLeftProfit = data.curLeftCnt * data.saleUnitPrice;ret.add(data);}return ret;}}class RowData {double retreatRate = 0.0; // 变化幅度double buyUnitPrice = 0.0; // 买入单价double saleUnitPrice = 0.0; // 卖出单价int buyCnt = 0; // 买入数量double buyTotalPrice = 0.0; // 买入总价int saleCnt = 0; // 卖出数量double saleTotalPrice = 0.0; // 卖出总价double profit = 0.0; // 本期盈利double profitRate = 0.0; // 本期盈利比例int curLeftCnt = 0; // 本期留存数量double curLeftProfit = 0.0; // 本期留存利润}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。