<code> 股票预测程序设计思路与实现 <持续更新>

  1 View Code 
  2  import java.io.BufferedReader;
  3  import java.io.FileReader;
  4  import java.util.ArrayList;
  5  
  6  
  7  public class Z_gess_stock {
  8  /**
  9   * using up--related to calculate the situation, when UP appear, one UP, two UP...
 10   * to predict what next when this day we get a rise.
 11   *  
 12   * using down--related to calculate the situation, when DOWN happens, 
 13   * that is to say, to predict what will happen, when this day we get a fall.
 14   */
 15      private Vector[] points_perday;//used to pridict the quantity
 16      static int limit=5;//to set the biggest days after today
 17      double[][] UP;//the probability of A[i][j], i days up then j days down
 18      double[][] DOWN;//i days down then j days up
 19      double[] upprob;
 20      double[] downprob;
 21      
 22      
 23      public Z_gess_stock(int k) {    
 24          points_perday=new Vector[k];
 25          UP=new double[limit][limit];
 26          upprob=new double[limit];
 27          
 28      }
 29      
 30      public void init_up(ArrayList<Double> points){
 31          
 32          int A=0,B=0;
 33          double temp=points.get(0);
 34          
 35          double sum_upprob=0;
 36          
 37          for(int i=0;i<points.size();i++){
 38  
 39              for(;i<points.size();i++)//calculate value i
 40              {
 41                  if(temp<points.get(i)){
 42                      temp=points.get(i);
 43                      A++;
 44                  }
 45                  else if(temp>points.get(i)){
 46                      temp=points.get(i);
 47                      B++;
 48                      i++;
 49                      break;
 50                  }
 51              }
 52              
 53  
 54              for(;i<points.size();i++)//calculate value j
 55              {
 56                  if(temp<points.get(i)){
 57                      temp=points.get(i);
 58                      A++;
 59                      i++;
 60                      break;
 61                  }
 62                  else if(temp>points.get(i)){
 63                      temp=points.get(i);
 64                      B++;
 65                  }
 66              }
 67              if(A-1<limit&&B-1<limit)
 68              {
 69                  UP[A-1][B-1]+=1;
 70                  upprob[B-1]++;
 71              }
 72              else {
 73              //    UP[limit-1][limit-1]++;
 74              //    upprob[limit-1]++;
 75              }
 76              sum_upprob++;
 77              
 78              B=0;
 79              A=1;    
 80          }
 81          printMatrix(UP);
 82          
 83          for(int i=0;i<upprob.length;i++){
 84              for(int j=0;j<upprob.length&&upprob[i]!=0;j++)
 85                  UP[j][i]/=upprob[i];
 86          upprob[i]/=sum_upprob;
 87          }
 88          
 89          
 90          
 91      }
 92      
 93      public void printMatrix(double[][] A){
 94          for(int i=0;i<A.length;i++){
 95              for(int j=0;j<A[0].length;j++)
 96                  System.out.print(A[i][j]+" ");
 97              System.out.println();
 98          }
 99          System.out.println();
100      }
101          
102      public void init_down(){
103          
104      }    
105      /**
106       * making matrix converges to a steady state
107       * @param n to calculate A^n, the powers of the transition
108       */
109      public double[][] Matrix_mul(double[][] A,double[][] B){
110          if(A[0].length!=B.length){
111              System.out.println("wrong size");
112              return A;
113          }
114          
115          double[][] temp =new double[A.length][B[0].length];
116          
117          int n=A[0].length;//column
118          int m=A.length;//row
119          for(int i=0,x,y;i<m;i++){
120              for(x=0;x<m;x++){
121                  double sum=0;
122                  for(y=0;y<n;y++)
123                      sum+=A[i][y]*B[y][x];
124                  temp[i][x]=sum;
125              }            
126          }
127          
128          return temp;    
129      }
130      
131      private double[][] iterature(int n, double[][] A){
132          if(n==1){
133              return A;
134          }
135          
136          if(n%2.0==0)
137              {
138              double[][] B=iterature(n/2,A);
139              return Matrix_mul(B,B);
140              }
141          else{
142              double[][] B=iterature((n-1)/2,A);
143              return Matrix_mul(Matrix_mul(B,B),B);
144          }
145          
146          
147      }
148      
149       public static ArrayList<Double> read_data(String filename,int column){
150          ArrayList<Double> list =new ArrayList<Double>();
151          
152          FileReader fr;
153          BufferedReader bfr;
154          try{
155              fr =new FileReader(filename);
156              bfr =new BufferedReader(fr);
157              String str =bfr.readLine();
158  
159              while(str != null){
160                  String[] temp =str.split(" ");
161                  list.add(Double.valueOf(temp[column-1]));
162                  str =bfr.readLine();
163              }
164              
165          }catch(Exception e){
166              //System.out.println("\n??");
167              e.printStackTrace();
168          }
169          return list;
170      }
171      
172      public static void main(String[] args) {
173          //limit=7;
174          ArrayList<Double> points=read_data("stock.txt",5);//只计算收盘价格
175  
176          //For every 5 days we name it one cluster
177          Z_gess_stock stock=new Z_gess_stock(points.size()-4);
178          System.out.println(points.size());
179  //        for(int i=0;i<points.size();i++)
180  //            System.out.print(points.get(i)+" ");
181          
182          stock.init_up(points);
183          
184          stock.printMatrix(stock.UP);
185                  
186          stock.UP=stock.iterature(100, stock.UP);
187          stock.printMatrix(stock.UP);
188                      
189          for(int j=0;j<stock.UP.length;j++)
190              System.out.print(stock.upprob[j]+" ");
191          
192          
193          System.out.println("\n  ");
194  
195          double test[][]={
196                  {0.1, 0.2, 0.3, 0.4},
197                  {0.9, 0.0, 0.0, 0.0},
198                  {0.0, 0.8, 0.0, 0.0},
199                  {0.0, 0.0, 0.7, 0.6}};
200          test=stock.iterature(1000, test);
201          System.out.print("\n");
202          //System.out.println("\n"+test[0].length+" "+test.length);
203          for(int i=0;i<4;i++){
204              for(int j=0;j<4;j++)
205                  System.out.print(test[i][j]+" ");
206              System.out.println();
207          }
208          
209  
210      }
211  
212  }

 

posted @ 2013-04-15 16:56  SONGHY  阅读(299)  评论(0编辑  收藏  举报