MACD.C
上传用户:bjghjy
上传日期:2007-01-07
资源大小:379k
文件大小:2k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <malloc.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. #include <math.h>
  7. #include "resource.h"
  8. #include "global.h"
  9. #include "fx.h"
  10. int CreateMacdData(K_DATA *lpKData,int RNum,DATA *Data,PARA *Para)
  11. {
  12.     int j;
  13.     MACD_DATA *MacdData;
  14.     
  15.     MacdData=(MACD_DATA*)_fmalloc(sizeof(MACD_DATA)*RNum);
  16.     memset(MacdData,0,sizeof(MACD_DATA)*RNum);
  17.     for(j=0;j<RNum;j++)
  18.     {
  19.      if(j==0)
  20.      {
  21.           Para->price[0]=0;
  22.           MacdData[0].ema1=lpKData[0].ss;
  23.           MacdData[0].ema2=lpKData[0].ss;
  24.           MacdData[0].macd=MacdData[0].dif=0;
  25.           MacdData[0].macd=MacdData[0].cha=0;
  26.           Para->price[0]=0;
  27.           continue;
  28.      }  
  29.          MacdData[j].ema1=lpKData[j].ss*2/(Para->periods[0]+1)+
  30.           MacdData[j-1].ema1*(Para->periods[0]-1)/(Para->periods[0]+1);
  31.          MacdData[j].ema2=lpKData[j].ss*2/(Para->periods[1]+1)+
  32.           MacdData[j-1].ema2*(Para->periods[1]-1)/(Para->periods[1]+1);
  33.          
  34.          MacdData[j].dif=MacdData[j].ema1-MacdData[j].ema2;
  35.          MacdData[j].macd=MacdData[j].dif*2/(Para->periods[2]+1)+
  36.              MacdData[j-1].macd*(Para->periods[2]-1)/(Para->periods[2]+1);
  37.              
  38.          MacdData[j].cha=MacdData[j].dif-MacdData[j].macd;    
  39.          
  40.          if(Para->price[0]<fabs(MacdData[j].dif)) 
  41.            Para->price[0]=fabs(MacdData[j].dif);
  42.             
  43.          if(Para->price[0]<fabs(MacdData[j].cha)) 
  44.            Para->price[0]=fabs(MacdData[j].cha);
  45.     
  46.     }
  47.     
  48.     for(j=0;j<10;j++)
  49.     {
  50.         if(Data->v==NULL) 
  51.          break;
  52.      if(Data->v[j]!=NULL)
  53.      {
  54.      _ffree(Data->v[j]);
  55.      Data->v[j]=NULL;
  56.      }
  57.     }
  58.     Data->v==NULL;     
  59.     Data->num =Para->dnum; 
  60.     Data->no =Para->no;
  61.     strcpy(Data->gpdm,Fx->gpdm);
  62.     Data->type =Fx->type;
  63.     Data->range =Fx->range;
  64.     Data->size =RNum;
  65.     for(j=0;j<Data->num;j++)
  66.      Data->v[j]=(double *)_fmalloc(sizeof(double)*RNum);
  67.     for(j=0;j<RNum;j++) 
  68.      Data->v[0][j]=MacdData[j].macd;
  69.     Data->method[0]=CURVE_METHOD;
  70.     for(j=0;j<RNum;j++) 
  71.      Data->v[1][j]=MacdData[j].dif;
  72.     Data->method[1]=CURVE_METHOD;
  73.     for(j=0;j<RNum;j++) 
  74.      Data->v[2][j]=MacdData[j].cha;
  75.     Data->method[2]=VERT_LINE_METHOD;    
  76.     Para->price[0] =0;
  77.     Para->price[1] =0;
  78.     Para->feature |=DW_ALL;
  79.     _ffree(MacdData);
  80. return TRUE;
  81. }