static public MoneyMenagement moneyMenagementRecount_forFrame(int fantancha ,ArrayList<PriceNow> Array_list,double highest,double lowest ,double ratio,double totelmoney,double difference,ArrayList<PriceNow> out,StringObj doc_out)
{
double beginTotelMoney=totelmoney;
ArrayList<PriceNow> list=new ArrayList<PriceNow>();
for(int i=0;i<Array_list.size();i++)
{
list.add(new PriceNow());
list.get(i).value=Array_list.get(i).value;
list.get(i).deleteFlag=Array_list.get(i).deleteFlag;
}
boolean flagX[]=new boolean[list.size()-1];
//boolean flagX[0]=list[1]-list[0]>=0?true:false;
double levelKeep=difference/fantancha; //2分之1的差值
//double UP_levelKeepHigh=difference/2; //2分之1的差值
double UP_levelPrice=list.get(0).value+list.get(0).value*levelKeep;
double LevelPrice=list.get(0).value;
double DOWN_levelPrice=list.get(0).value-list.get(0).value*levelKeep;
String direction[]=new String[list.size()-1];
double deleteList[];
//boolean [] x=new boolean [list.length-1];
//boolean turn=false;
for(int i=0;i<list.size()-1;i++)
{
if(list.get(i+1).value-list.get(i).value>=0)
direction[i]="up";
else
direction[i]="down";
}
for(int i=0;i<direction.length-1;i++)
{
if(direction[i]==direction[i+1])
flagX[i+1]=true;
else
flagX[i+1]=false;
}
flagX[0]=true; //INIT_flag
list.get(0).deleteFlag=true;//INIT_deleteFlag
boolean breakFlag=false;
boolean realBreakFlag=true;
for(int i=0;i<direction.length;i++)
{
if(flagX[i]==true) // (up/down) not change
{
if(direction[i]=="up") //up
{
if(list.get(i+1).value-list.get(i).value>=difference*list.get(i).value) //up > = difference
{
LevelPrice=list.get(i+1).value-list.get(i+1).value*levelKeep;
//DOWN_levelPrice=UP_levelPrice;
breakFlag=true;
}
else if(list.get(i+1).value-list.get(i).value<difference*list.get(i).value) //up < difference
{
list.get(i+1).deleteFlag=false;
list.get(i+1).value=list.get(i).value;
}
}
else if(direction[i]=="down") //down
{
if(Math.abs(list.get(i+1).value-list.get(i).value)>=difference*list.get(i).value) //down > = difference
{
LevelPrice=list.get(i+1).value+list.get(i+1).value*levelKeep;
//UP_levelPrice=DOWN_levelPrice;
breakFlag=true;
}
else if(Math.abs(list.get(i+1).value-list.get(i).value)<difference*list.get(i).value)//down < difference
{
list.get(i+1).deleteFlag=false;
list.get(i+1).value=list.get(i).value;
}
}
}
else if(flagX[i]==false) // (up/down) changed
{
if(breakFlag==true)
{
if(direction[i]=="up") //up
{
if(realBreakFlag==true && list.get(i+1).value>LevelPrice )
{
list.get(i+1).deleteFlag=true;
LevelPrice=list.get(i+1).value-list.get(i+1).value*levelKeep;
//DOWN_levelPrice=UP_levelPrice;
realBreakFlag=true;
}
else if(list.get(i+1).value<=LevelPrice)
{
list.get(i+1).deleteFlag=false;
list.get(i+1).value=list.get(i).value;
if(i<direction.length-1)
{
if(direction[i+1]=="up" && flagX[i+1]==true)
flagX[i+1]=false;
else if(direction[i+1]=="down" && flagX[i+1]==false)
flagX[i+1]=true;
}
}
}
else if(direction[i]=="down") //down
{
if(realBreakFlag==true && list.get(i+1).value<LevelPrice )
{
list.get(i+1).deleteFlag=true;
LevelPrice=list.get(i+1).value+list.get(i+1).value*levelKeep;
//UP_levelPrice=DOWN_levelPrice;
realBreakFlag=true;
}
else if(list.get(i+1).value>=LevelPrice)
{
list.get(i+1).deleteFlag=false;
list.get(i+1).value=list.get(i).value;
if(i<direction.length-1)
{
if(direction[i+1]=="down" && flagX[i+1]==true)
flagX[i+1]=false;
else if(direction[i+1]=="up" && flagX[i+1]==false)
flagX[i+1]=true;
}
}
}
}
else
{
list.get(i+1).deleteFlag=false;
list.get(i+1).value=list.get(i).value;
flagX[i+1]=true;
}
}
}
ArrayList<PriceNow> list_temp=new ArrayList<PriceNow>();
for(int i=0;i<list.size();i++)
{
if(list.get(i).deleteFlag==true)
{
list_temp.add(list.get(i));
}
out.add(list.get(i));
}
//huifu
list_temp.add(new PriceNow(Array_list.get(Array_list.size()-1).value,true));
out.add(new PriceNow(Array_list.get(Array_list.size()-1).value,true));
list=list_temp;
for(int i=0;i<list.size();i++)
{
System.out.print(list.get(i).value+" ");
}
System.out.println();
System.out.println("buy_time:"+list.size());
System.out.println();
///begin
int sum=0;
ArrayList<Percentage> tempPercentageList=new ArrayList<Percentage>(list.size());
for(int i=0;i<list.size();i++)
{
if(list.get(i).value<lowest){lowest=list.get(i).value;}
//if(list.get(i).value>lowest+(highest-lowest)/2){highest=list.get(i).value; }
tempPercentageList.add(new Percentage(highest,lowest,list.get(i).value,ratio));
}
ArrayList<MoneyMenagement> tempMoneyMenagementList=new ArrayList<MoneyMenagement>(list.size());
tempMoneyMenagementList.add(new MoneyMenagement(totelmoney));
tempMoneyMenagementList.get(0).moneyMenagementInit(tempPercentageList.get(0));
tempMoneyMenagementList.get(0).showMoneyMenagement();
for(int i=0;i<list.size()-1;i++)
{
System.out.println("price:"+tempPercentageList.get(i).getNowPrice());
tempMoneyMenagementList.add(MoneyMenagement.moneyMenagementRecount(tempMoneyMenagementList.get(i), tempPercentageList.get(i+1)));
tempMoneyMenagementList.get(i+1).moneyMenagementInit(tempPercentageList.get(i+1));
sum+=Math.abs(tempMoneyMenagementList.get(i).realityStocks-tempMoneyMenagementList.get(i+1).realityStocks);
System.out.println("buy:"+Math.abs(tempMoneyMenagementList.get(i).realityStocks-tempMoneyMenagementList.get(i+1).realityStocks));
System.out.println("\n");
tempMoneyMenagementList.get(i+1).showMoneyMenagement();
System.out.println();
if(i==list.size()-2)
{
if(Array_list.get(Array_list.size()-1).value-Array_list.get(0).value>=0)
{
System.out.println("原利润:+"+(Array_list.get(Array_list.size()-1).value-Array_list.get(0).value)/Array_list.get(0).value*100+"%");
doc_out.doc_out+="原利润:+"+(Array_list.get(Array_list.size()-1).value-Array_list.get(0).value)/Array_list.get(0).value*100+"%"+ "\n";
}
else
{
System.out.println("原利润:-"+(Array_list.get(0).value-Array_list.get(Array_list.size()-1).value)/Array_list.get(0).value*100+"%");
doc_out.doc_out+="原利润:-"+(Array_list.get(0).value-Array_list.get(Array_list.size()-1).value)/Array_list.get(0).value*100+"%"+ "\n";
}
if(tempMoneyMenagementList.get(i+1).getTotleMoney()>=beginTotelMoney)
{
System.out.println("实际利润:+"+(tempMoneyMenagementList.get(i+1).getTotleMoney()-beginTotelMoney)/beginTotelMoney*100+"%");
doc_out.doc_out+="实际利润:+"+(tempMoneyMenagementList.get(i+1).getTotleMoney()-beginTotelMoney)/beginTotelMoney*100+"%"+ "\n";
}
else
{
System.out.println("实际利润:-"+(beginTotelMoney-tempMoneyMenagementList.get(i+1).getTotleMoney())/beginTotelMoney*100+"%");
doc_out.doc_out+="实际利润:-"+(beginTotelMoney-tempMoneyMenagementList.get(i+1).getTotleMoney())/beginTotelMoney*100+"%"+ "\n";
}
}
}
System.out.println("开始价格(price):"+Array_list.get(0).value);
doc_out.doc_out+="开始价格(price):"+Array_list.get(0).value+ "\n";
System.out.println("现价(price):"+tempPercentageList.get(list.size()-1).getNowPrice());
doc_out.doc_out+="现价(price):"+tempPercentageList.get(list.size()-1).getNowPrice()+ "\n";
MoneyMenagement b=new MoneyMenagement();
System.out.println("交易总额(sum):"+sum);
doc_out.doc_out+="交易总额(sum):"+sum+ "\n";
System.out.println("交易次数:"+list.size());
doc_out.doc_out+="交易次数:"+list.size()+ "\n";
//b.setTotleMoney(a.getRealityStocks()*percentage.getNowPrice()+a.getRemainMoney());
return b;
}
{
double beginTotelMoney=totelmoney;
ArrayList<PriceNow> list=new ArrayList<PriceNow>();
for(int i=0;i<Array_list.size();i++)
{
list.add(new PriceNow());
list.get(i).value=Array_list.get(i).value;
list.get(i).deleteFlag=Array_list.get(i).deleteFlag;
}
boolean flagX[]=new boolean[list.size()-1];
//boolean flagX[0]=list[1]-list[0]>=0?true:false;
double levelKeep=difference/fantancha; //2分之1的差值
//double UP_levelKeepHigh=difference/2; //2分之1的差值
double UP_levelPrice=list.get(0).value+list.get(0).value*levelKeep;
double LevelPrice=list.get(0).value;
double DOWN_levelPrice=list.get(0).value-list.get(0).value*levelKeep;
String direction[]=new String[list.size()-1];
double deleteList[];
//boolean [] x=new boolean [list.length-1];
//boolean turn=false;
for(int i=0;i<list.size()-1;i++)
{
if(list.get(i+1).value-list.get(i).value>=0)
direction[i]="up";
else
direction[i]="down";
}
for(int i=0;i<direction.length-1;i++)
{
if(direction[i]==direction[i+1])
flagX[i+1]=true;
else
flagX[i+1]=false;
}
flagX[0]=true; //INIT_flag
list.get(0).deleteFlag=true;//INIT_deleteFlag
boolean breakFlag=false;
boolean realBreakFlag=true;
for(int i=0;i<direction.length;i++)
{
if(flagX[i]==true) // (up/down) not change
{
if(direction[i]=="up") //up
{
if(list.get(i+1).value-list.get(i).value>=difference*list.get(i).value) //up > = difference
{
LevelPrice=list.get(i+1).value-list.get(i+1).value*levelKeep;
//DOWN_levelPrice=UP_levelPrice;
breakFlag=true;
}
else if(list.get(i+1).value-list.get(i).value<difference*list.get(i).value) //up < difference
{
list.get(i+1).deleteFlag=false;
list.get(i+1).value=list.get(i).value;
}
}
else if(direction[i]=="down") //down
{
if(Math.abs(list.get(i+1).value-list.get(i).value)>=difference*list.get(i).value) //down > = difference
{
LevelPrice=list.get(i+1).value+list.get(i+1).value*levelKeep;
//UP_levelPrice=DOWN_levelPrice;
breakFlag=true;
}
else if(Math.abs(list.get(i+1).value-list.get(i).value)<difference*list.get(i).value)//down < difference
{
list.get(i+1).deleteFlag=false;
list.get(i+1).value=list.get(i).value;
}
}
}
else if(flagX[i]==false) // (up/down) changed
{
if(breakFlag==true)
{
if(direction[i]=="up") //up
{
if(realBreakFlag==true && list.get(i+1).value>LevelPrice )
{
list.get(i+1).deleteFlag=true;
LevelPrice=list.get(i+1).value-list.get(i+1).value*levelKeep;
//DOWN_levelPrice=UP_levelPrice;
realBreakFlag=true;
}
else if(list.get(i+1).value<=LevelPrice)
{
list.get(i+1).deleteFlag=false;
list.get(i+1).value=list.get(i).value;
if(i<direction.length-1)
{
if(direction[i+1]=="up" && flagX[i+1]==true)
flagX[i+1]=false;
else if(direction[i+1]=="down" && flagX[i+1]==false)
flagX[i+1]=true;
}
}
}
else if(direction[i]=="down") //down
{
if(realBreakFlag==true && list.get(i+1).value<LevelPrice )
{
list.get(i+1).deleteFlag=true;
LevelPrice=list.get(i+1).value+list.get(i+1).value*levelKeep;
//UP_levelPrice=DOWN_levelPrice;
realBreakFlag=true;
}
else if(list.get(i+1).value>=LevelPrice)
{
list.get(i+1).deleteFlag=false;
list.get(i+1).value=list.get(i).value;
if(i<direction.length-1)
{
if(direction[i+1]=="down" && flagX[i+1]==true)
flagX[i+1]=false;
else if(direction[i+1]=="up" && flagX[i+1]==false)
flagX[i+1]=true;
}
}
}
}
else
{
list.get(i+1).deleteFlag=false;
list.get(i+1).value=list.get(i).value;
flagX[i+1]=true;
}
}
}
ArrayList<PriceNow> list_temp=new ArrayList<PriceNow>();
for(int i=0;i<list.size();i++)
{
if(list.get(i).deleteFlag==true)
{
list_temp.add(list.get(i));
}
out.add(list.get(i));
}
//huifu
list_temp.add(new PriceNow(Array_list.get(Array_list.size()-1).value,true));
out.add(new PriceNow(Array_list.get(Array_list.size()-1).value,true));
list=list_temp;
for(int i=0;i<list.size();i++)
{
System.out.print(list.get(i).value+" ");
}
System.out.println();
System.out.println("buy_time:"+list.size());
System.out.println();
///begin
int sum=0;
ArrayList<Percentage> tempPercentageList=new ArrayList<Percentage>(list.size());
for(int i=0;i<list.size();i++)
{
if(list.get(i).value<lowest){lowest=list.get(i).value;}
//if(list.get(i).value>lowest+(highest-lowest)/2){highest=list.get(i).value; }
tempPercentageList.add(new Percentage(highest,lowest,list.get(i).value,ratio));
}
ArrayList<MoneyMenagement> tempMoneyMenagementList=new ArrayList<MoneyMenagement>(list.size());
tempMoneyMenagementList.add(new MoneyMenagement(totelmoney));
tempMoneyMenagementList.get(0).moneyMenagementInit(tempPercentageList.get(0));
tempMoneyMenagementList.get(0).showMoneyMenagement();
for(int i=0;i<list.size()-1;i++)
{
System.out.println("price:"+tempPercentageList.get(i).getNowPrice());
tempMoneyMenagementList.add(MoneyMenagement.moneyMenagementRecount(tempMoneyMenagementList.get(i), tempPercentageList.get(i+1)));
tempMoneyMenagementList.get(i+1).moneyMenagementInit(tempPercentageList.get(i+1));
sum+=Math.abs(tempMoneyMenagementList.get(i).realityStocks-tempMoneyMenagementList.get(i+1).realityStocks);
System.out.println("buy:"+Math.abs(tempMoneyMenagementList.get(i).realityStocks-tempMoneyMenagementList.get(i+1).realityStocks));
System.out.println("\n");
tempMoneyMenagementList.get(i+1).showMoneyMenagement();
System.out.println();
if(i==list.size()-2)
{
if(Array_list.get(Array_list.size()-1).value-Array_list.get(0).value>=0)
{
System.out.println("原利润:+"+(Array_list.get(Array_list.size()-1).value-Array_list.get(0).value)/Array_list.get(0).value*100+"%");
doc_out.doc_out+="原利润:+"+(Array_list.get(Array_list.size()-1).value-Array_list.get(0).value)/Array_list.get(0).value*100+"%"+ "\n";
}
else
{
System.out.println("原利润:-"+(Array_list.get(0).value-Array_list.get(Array_list.size()-1).value)/Array_list.get(0).value*100+"%");
doc_out.doc_out+="原利润:-"+(Array_list.get(0).value-Array_list.get(Array_list.size()-1).value)/Array_list.get(0).value*100+"%"+ "\n";
}
if(tempMoneyMenagementList.get(i+1).getTotleMoney()>=beginTotelMoney)
{
System.out.println("实际利润:+"+(tempMoneyMenagementList.get(i+1).getTotleMoney()-beginTotelMoney)/beginTotelMoney*100+"%");
doc_out.doc_out+="实际利润:+"+(tempMoneyMenagementList.get(i+1).getTotleMoney()-beginTotelMoney)/beginTotelMoney*100+"%"+ "\n";
}
else
{
System.out.println("实际利润:-"+(beginTotelMoney-tempMoneyMenagementList.get(i+1).getTotleMoney())/beginTotelMoney*100+"%");
doc_out.doc_out+="实际利润:-"+(beginTotelMoney-tempMoneyMenagementList.get(i+1).getTotleMoney())/beginTotelMoney*100+"%"+ "\n";
}
}
}
System.out.println("开始价格(price):"+Array_list.get(0).value);
doc_out.doc_out+="开始价格(price):"+Array_list.get(0).value+ "\n";
System.out.println("现价(price):"+tempPercentageList.get(list.size()-1).getNowPrice());
doc_out.doc_out+="现价(price):"+tempPercentageList.get(list.size()-1).getNowPrice()+ "\n";
MoneyMenagement b=new MoneyMenagement();
System.out.println("交易总额(sum):"+sum);
doc_out.doc_out+="交易总额(sum):"+sum+ "\n";
System.out.println("交易次数:"+list.size());
doc_out.doc_out+="交易次数:"+list.size()+ "\n";
//b.setTotleMoney(a.getRealityStocks()*percentage.getNowPrice()+a.getRemainMoney());
return b;
}