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

金融证券系统

开发平台:

Visual C++

  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <malloc.h>
  4. #include <string.h>
  5. #include "resource.h"
  6. #include "global.h"
  7. #include "fx.h"
  8. extern LPFX Fx;
  9. int CreateRsiData(K_DATA *lpKData,int RNum,DATA *Data,PARA *Para)
  10. {
  11.     
  12. int i,j,k,l; 
  13.     long m;
  14. double Tun[2],Tdn[2];
  15. RSI_DATA *RsiData;
  16. RsiData=(RSI_DATA*)_fmalloc(sizeof(RSI_DATA)*RNum);
  17. memset(RsiData,0,sizeof(RSI_DATA)*RNum);
  18. for(j=0;j<RNum;j++)
  19. {
  20.      if(j==0)
  21.     {   
  22.     for(k=0;k<2;k++)
  23.      {
  24.            RsiData[j].un[k]=0;
  25.            RsiData[j].dn[k]=0;
  26.            Tun[k]=0;
  27.            Tdn[k]=0;
  28.            if(lpKData[j].ks<lpKData[j].ss)
  29.            {
  30.            RsiData[j].un[k]=lpKData[j].ss-lpKData[j].ks;
  31.            }
  32.            if(lpKData[j].ss<lpKData[j].ks)
  33.            {
  34.            RsiData[j].dn[k]=lpKData[j].ks-lpKData[j].ss;
  35.            }          
  36.      }
  37.      }
  38.      else
  39.      {   
  40.       for(k=0;k<2;k++)
  41.        {
  42.           if(j<=Para->periods[k]-1)
  43.           {    
  44.            if(lpKData[j-1].ss<lpKData[j].ss)
  45.            {
  46.            RsiData[j].un[k]=RsiData[j-1].un[k]+
  47.            lpKData[j].ss-lpKData[j-1].ss;
  48.            }
  49.            if(lpKData[j-1].ss>lpKData[j].ss)
  50.            {
  51.            RsiData[j].dn[k]=RsiData[j-1].dn[k]+
  52.            lpKData[j-1].ss-lpKData[j].ss;
  53.            } 
  54.           }
  55.           m=Para->periods[k];
  56.           if(j==Para->periods[k]-1)
  57.           { 
  58.            if((RsiData[j].un[k]+RsiData[j].dn[k])!=0)
  59.            RsiData[j].rsi[k]=RsiData[j].un[k]/(RsiData[j].un[k]+RsiData[j].dn[k]);
  60.           }
  61.           if(j>Para->periods[k]-1)
  62.           {   
  63.           RsiData[j].un[k]=RsiData[j].dn[k]=0;
  64.           for(l=1;l<=Para->periods[k];l++)
  65.           {              
  66.           m=j+l-Para->periods[k];
  67.           if(lpKData[m-1].ss<lpKData[m].ss)
  68.           {
  69.                  RsiData[j].un[k]+=lpKData[m].ss-lpKData[m-1].ss;
  70.           }
  71.           if(lpKData[m-1].ss>lpKData[m].ss)
  72.           {
  73.                RsiData[j].dn[k]+=lpKData[m-1].ss-lpKData[m].ss;
  74.           }               
  75.           }
  76.                     
  77.           m=Para->periods[k];
  78.           RsiData[j].un[k] =RsiData[j-1].un[k]*(m-1)/(m+1)+RsiData[j].un[k]*2/(m+2);
  79.           RsiData[j].dn[k] =RsiData[j-1].dn[k]*(m-1)/(m+1)+RsiData[j].dn[k]*2/(m+2);
  80.            if((RsiData[j].un[k]+RsiData[j].dn[k])!=0)
  81.            RsiData[j].rsi[k]=RsiData[j].un[k]*100.00/(RsiData[j].un[k]+RsiData[j].dn[k]);          
  82.           }         
  83.        }
  84.      }
  85.     }
  86.     for(j=0;j<10;j++)
  87.     {
  88.         if(Data->v==NULL) 
  89.          break;
  90.      if(Data->v[j]!=NULL)
  91.      {
  92.      _ffree(Data->v[j]);
  93.      Data->v[j]=NULL;
  94.      }
  95.     }
  96.     Data->v==NULL;     
  97.     Data->num =Para->dnum; 
  98.     Data->no =Para->no;
  99.     strcpy(Data->gpdm,Fx->gpdm);
  100.     Data->type =Fx->type;
  101.     Data->range =Fx->range;
  102.     Data->size =RNum;
  103.     for(j=0;j<Data->num;j++)
  104.      Data->v[j]=(double *)_fmalloc(sizeof(double)*RNum);
  105.     for(i=0;i<Data->num;i++)
  106.     {
  107.      for(j=0;j<RNum;j++) 
  108.      Data->v[i][j]=RsiData[j].rsi[i];
  109.      Data->method[i]=CURVE_METHOD;
  110.     }
  111.     Para->price[0] =100;
  112.     Para->price[1] =0;
  113.     Para->price[2] =20;
  114.     Para->price[3] =50;
  115.     Para->price[4] =80;
  116.     Para->feature |=DW_ALL;
  117.     Para->feature &=~DW_MAX;
  118.     Para->feature &=~DW_MIN;
  119.     _ffree(RsiData);
  120. return TRUE;