⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trader3.java

📁 swarm模拟股市
💻 JAVA
字号:
import swarm.Globals;
import swarm.defobj.Zone;
import swarm.objectbase.SwarmImpl;
public class Trader3 extends SwarmImpl
{   
  public static final int NUM=10;
  public static  final int T=500; 
  public static final double limitPrice=300;  
  public static final double R=1.0,A=0.0;
  public int tradetime=0;
  //public double bprice,sprice;//bprice是买方开价。sprice是此买者卖时的心理价位   
  public static double bargainprice[]=new double[T+1];
  public double beta=0.1,gama=0.6;
  public double max,sellmax,roalprice;//max为买时价格;sellmax为卖时价格
  public double tao[]=new double[T+1];
  public static double expectedPrice[]=new double[T+1];
  public static double slopeProfit[]=new double[T+1];
  public double randomEncounterProb=0.1,probability=0.2;
  public static boolean isSold;
  public static double price[]=new double[NUM];
  public static double sellprice[]=new double[NUM];
  public double seller[]=new double[NUM];
  public int updateseller;
  public TraderMarket tradermarket;

  public Trader3(int numTraders){
	  //number=numTraders;
	  isSold=false;
	  tradetime=0;
	  tao=new double[T+1];
	  slopeProfit=new double[T+1];
	  expectedPrice=new double[T+1];
	  bargainprice=new double[T+1];
   }

  public double getPrice(){
	  double a;
	  a=tradeprocess();
	  return a;
 	  //return bargainprice[time];
	  
   }
  /*public Object setPrice(double pr){
	  bprice=pr;
	  return this;
   }*/
  /*public double getSlopeProfit(int t){
 	  return slopeProfit[t];
   }*/  

  /*public void init(){
	  int i,k,k1;
	  double max=0.0; 	   
	  price[0]=300+400*Math.random();//定义第一个买家的喊价(随机)
	  sellprice[0]=price[0]*(1+0.1);//0.1是市场当时的平均收益率
	  System.out.println("price[0]="+price[0]+"   "+"sellprice[0]="+sellprice[0]);
	  System.out.println("sellprice[0]="+sellprice[0]);
	  for(k=1;k<NUM;k++)//根据第一个买家喊价,以后的买家依次喊出的价格
	    {
	   	  double temp=0.0;
	   	  sellmax=0.0;	   
	   	  for(k1=0;k1<k;k1++)
	   	    {temp=price[k1]+temp;}
	   	  //price[k]=(temp/k)-100+200*Math.random();//后面的买家的喊价是用前面两个买家的喊价的加权平均算出的,要在加权平均的基础上加个随机数
	   	  //sellprice[k]=price[k]*(1+0.1);//根据市场平均收益率算出卖时心理价位(0.1为市场当时的平均收益率),如有可能将加入一个收益的随机扰动。
	   	      //price[k]=price[k-1]-100+200*Math.random();
	      //System.out.println("price["+k+"]="+price[k]+"   "+"sellprice["+k+"]="+sellprice[k]);	     
	     }	  	   
    }*/
	
   public double tradeprocess(){
  	 //从可以开价的交易者群体中,随机选出一个“买方”h,其开价为price[h]。	
	  double ep,sp;	  
      TraderMarketModelSwarm3 solder=new TraderMarketModelSwarm3(getZone());
	  TraderMarket a=new TraderMarket();
	  tradetime=tradetime+1;	  
	  a.init();
	  int h=(int)(NUM*Math.random());
	  System.out.println("h="+h); 
      price[h]=a.price[h];
      sellprice[h]=a.sellprice[h];
      System.out.println("price["+h+"]="+price[h]);
      System.out.println("sellprice["+h+"]="+sellprice[h]+"\n");
            
      //确定一个买方后,买卖双方相遇,进行交易 
      //if(Math.random()<=randomEncounterProb)
      int l=0;
	  //System.out.println(l);
      for(int r=0;r<NUM;r++)
       { 
			if(price[h]>=a.sellprice[r]) 
			 { 
				isSold=true;
				System.out.println(isSold);
				//bargainprice=price[h];
				System.out.println("sellprice["+r+"]="+a.sellprice[r]);
				seller[l]=a.sellprice[r];
				System.out.println("seller["+l+"]="+seller[l]);
				l=l+1;
			  }       
        }
		//System.out.println("l="+l); 
      if(isSold==true)  //交易成功
	    {
		   int s=(int)(l*Math.random());//当有多个卖家满足条件可以与买家进行交易时,随机选出一个卖家,并更新其边际收益 
		   
		   double temp_price=seller[s];
		   for(int k=0;k<NUM;k++)
		   {
			   //通过遍历比较,记录下进行交易活动的卖家的编号,以便于下一轮交易开始之前更新此卖家的卖价和买价。
		   	   if (a.sellprice[k]==temp_price)
		   	       updateseller=k;
		   }
		   System.out.println("\n"+"s="+s); //随机选出的卖家的编号         
		   System.out.println("updateseller="+updateseller);		  
		   expectedPrice[1]=seller[s];
		   slopeProfit[1]=(seller[s]+tao[0])/limitPrice-1;		    
           System.out.println("slopeProfit[1]="+slopeProfit[1]);
		   System.out.println("expectedPrice[1]="+expectedPrice[1]);
		   //System.out.println("tradetime="+tradetime);
		   //System.out.println("expectedPrice[tradetime]="+expectedPrice[tradetime]);
		  
		   this.updateSlope(expectedPrice[tradetime],price[h],tradetime);//更新随机选出的卖家的边际收益
		   /*solder.calculateExpectedPrice(tradetime);//由更新之后的边际收益计算得出该卖家下一时刻的喊价		   
		   sellprice[updateseller]=expectedPrice[tradetime+1];//通过更新已进行交易的卖家的期望价格也即卖价来更新sellprice数组
		   price[updateseller]=expectedPrice[tradetime+1]/(1+0.1);//根据sellprice数组反算更新price数组		   
		   System.out.println("sellprice[updateseller]="+expectedPrice[tradetime+1]);
		   System.out.println("price[updateseller]="+price[updateseller]);*/
		   //ep=solder.calculateExpectedPrice(tradetime);
           ep=calculateExpectedPrice(tradetime);
		   sellprice[updateseller]=ep;
           sp=ep/(1+0.1);
		   price[updateseller]=sp;
		   System.out.println("sellprice[updateseller]="+ep);
		   System.out.println("price[updateseller]="+sp);
		   for(int k=0;k<NUM;k++){
			   if(k!=updateseller)
		          System.out.println("price["+k+"]="+a.price[k]+"   "+"sellprice["+k+"]="+a.sellprice[k]);
			   else 
				  System.out.println("price["+k+"]="+price[updateseller]+"   "+"sellprice["+k+"]="+sellprice[updateseller]);
		    }
		   //System.out.println("tradetime="+tradetime);
		   //System.out.println("成交价格捕捉"+price[h]);
		   bargainprice[tradetime]=price[h];			   
		}
	  else            //交易不成功
           System.out.println("This trading is not successful!");	  
	  return bargainprice[tradetime];	  
    }
  
   public Object updateSlope(double p,double q,int t){
	  //添加更新边际收益的方法内容
	  tao[0]=0;
	  roalprice=R*q+A;
	  tao[t]=tao[t-1]*gama+beta*(roalprice-p)*(1-gama);
	  slopeProfit[t+1]=(p+tao[t])/limitPrice-1;
	  return this;
	}
    public double calculateExpectedPrice(int t){
      int t2=0;
	  expectedPrice[t+1]=limitPrice*(1+slopeProfit[t+1]);
      t2=t+1;
	  return expectedPrice[t2];
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -