发信人: 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]
|
|