发信人: youduofu() 
整理人: ifeelyou(2000-01-14 16:56:37), 站内信件
 | 
 
 
   本程序摘至<电脑爱好者>18期擂台赛点评栏目:
    它对胜龙股票分析软件的数据加以读取,加适当的修改可以边写自己
 的选股和分析程序.
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <math.h>
 #include <string.h>
 
 struct Slon_day
 {    /* in *.day files of Slon */
 unsigned long day_date;
 unsigned long open_price;
 unsigned long close_price;
 unsigned long high_price;
 unsigned long low_price;
 unsigned long day_amount;
 unsigned long day_vollume;
 unsigned int reserved[ 6];
 } slonday;
 
 int weekday( int y, int m, int d)
 {
     int i;
     long unsigned s= 0;
     static int md[ 12]={ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 3 1};
     if((y%4== 0&& y%100!= 0)|| %400== 0) md[ 1]= 29;
     else md[ 1]= 28;
     y= y-1;
     s= d;
     for( i= 0; i< m-1; i++) s+= md[ i];
     s+= y+ y/4+ y/400- y/100;
     return( s%7);
 }
 
 main( int argc, char* argv[])
 {
     register int i, j;
     unsigned int im;
     int year, month, day, wd, in, don;
     double p1= 0, p0= 0, kd= -1000000;
     unsigned long hd[ 7][ 200]={ 0}, hf;
     double hdf[ 7][ 200], dy[ 7];
 
     char h;
     FILE *fn, *fp;
     char cfn[ 20], cdir[]={"\\slon\\data\\sh\\day\\"},cf[ 80];
 
     if( argc!=2){ printf("order fname.cad"); exit( 0);}
     if(( fn= fopen( argv[ 1], "r"))== NULL){
          printf("\ncan not open %s, work break now !", argv[ 1]);
          exit( 0);
     }
 
     /*  ini0 */
     for( i= 0; i< 7; i++)
          for( j= 0 j< 200; j++)
               hd[ i][ j]= 0;
     /*********/
     while( !feof(fn)){
          fscanf( fn, "%s\n", cfn);
          if( cfn[ 0]=='6') strcpy( cdir, "\\slon\\data\\sh\\day\\");
          else if (cfn[ 0]== '0') strcpy( cdir, "\\slon\\data\\sz\\day\ \");
          cf[ 0]= "\0";
          strcpy(cf, cdir);
          strcat(cf, cfn);
          if(( fp= fopen(cf, "rb"))== NULL){
               printf("Can not open file %s\n",cf);
               break;
          }
 
     /*  init1  */
     im= 0;
     /***********/
     while(!feof(fp)){
          if(fread(&slonday, sizeof( struct Slon_day), 1, fp)== 1){
               slonday.day_date=~slonday.day_date;
               slonday.open_price=~slonday.open_price;
               slonday.close_price=~slonday.close_price;
               slonday.high_price=~slonday.high_price;
               slonday.low_price=~slonday.low_price;
               slonday.day_amount=~slonday.day_amount;
               slonday.day_volume=~slonday.day_volume;
     /*========analyse body ======*/
     /*        printf( "\n%ld %ld %ld %ld %ld %ld %ld", slonday.day_dat e,
                slonday.open_price, slonday.close_price, slonday.high_p rice,
                slonday.low_price, slonday.day_amount, slonday.day_volu me);*/
               p0= p1;
               p1= 0.001*slonday.close_price;
               year= slonday.day_date/ 10000;
               month= ( slonday.day_date/ 100- year* 100);
               day= slonday.day_date- year*10000- month* 100;
               wd= weekday( year, month, day);
               if( im&& p0){
                   kd= 100.*( p1- p0)/ p0;
                   if( kd> 10.5|| kd<= -10.5) continue;
                   if( kd> 9.9999) in= 199;
                   else if( kd< -9.9999) in= 0;
                   else{
                       in=( kd+ 10.)*10;
                       if( in> 199) in= 199;
                       else if( in< 0) in= 0;
                   }
                   ++hd[wd][in];
               }
        /*============ *  *  * ===========*/
               ++ im;
           }
           else break;
        }
        fclose( fp);
     }
     fclose( fn);
     /*======*/
     for( i= 0; i< 7; i++){
         hf=0;dy[ i]= 0;
         for( j= 0; j< 200; j++)
             {hf+= hd[i][j];dy[i]+= hd[i][j]*(j*0.1-10.);}
         if(hf){
              for( j= 0; j< 200; j++)
                  hdf[i][j]=(double) hd[ i][j]/(double)hf;
              dy[i]/=hf;
         }
         fn= fopen( "dweek.dat","w");
         for( i= 0; i< 7;i++){
             fprintf(fn, "402 2\n");
             fprintf(fn, "%f  %f\n", -10., 0.);
             for( j= 0; j< 200; j++){
                 fprintf(fn, "%f  %f\n", -10.+j*0.1, hdf[i][j]);
                 fprintf(fn, "%f  %f\n", -10.+(j+1)*0.1, hdf[i][j]);
             }
         fprintf(fn, "%f  %f\n", 10., 0.);
         }
     fclose( fn);
     for( j= 0; j< 200; j++){
         printf("%d ",j);
         for( j= 0; j< 200; j++)
             printf( "%f ",hdf[i][j]);
         printf( "\n");
     }
     printf("\n______________\n");
     for( i= 0; i< 7; i++)
         printf("%f ", dy[ i]);
     /*===*/
 }
 在此感谢<电脑爱好者>及本程序的作者.
  -- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.103.37.204]
  | 
 
 
 |