📄 fx.c
字号:
#include <windows.h>#include <stdio.h>#include <malloc.h>#include <string.h>#include <math.h>#include <time.h>#include <stdlib.h>#include <io.h>#include <commdlg.h>#include "resource.h"#include "global.h"#include "appmain.h"#include "fx.h"#include "hq.h"#include "hq_cl.h"#include "hq_tcp.h"#include "jy_cl.h"#include "toolbar.h"#include "msg.h"void FxFreeData(LPFX);int InitObjectOne(void);int InitObjectTwo(void);int LoadData(FX* fx);BOOL CreateHistoryData(int arnge,char *gpdm); int FxExit(FX *fx);int CreateMacdData(K_DATA *Main,int RNum,DATA *Data,PARA *Para);int CreateRsiData(K_DATA *Main,int RNum,DATA *Data,PARA *Para);int CreateDmiData(K_DATA *Main,int RNum,DATA *Data,PARA *Para);int CreatePsyData(K_DATA *Main,int RNum,DATA *Data,PARA *Para);int CreateVrData(K_DATA *Main,int RNum,DATA *Data,PARA *Para);int CreateObvData(K_DATA *Main,int RNum,DATA *Data,PARA *Para);int CreateBiasData(K_DATA *Main,int RNum,DATA *Data,PARA *Para);int CreateWrData(K_DATA *Main,int RNum,DATA *Data,PARA *Para);int CreateKdjData(K_DATA *Main,int RNum,DATA *Data,PARA *Para);int SetColor(HWND hwnd);CHOOSECOLOR cc;extern char szDataPath[128];extern HWND hWndInput,ghWndHelp;extern BOOL IsZsRec(int, int);extern int UDP_Send_DataDay(int, int);extern int DlgJy(void);extern JY_ANS_CHKUSR curChkUsrRes;extern int LoadFile(char *filename,int sline,char *title);extern HFONT ghFontSmall;HWND ghWndSetup=NULL;FX *Fx;char *RANGE_NAME[]={"5分钟","15分钟","30分钟","60分钟","日","周","月"};unsigned int RANGE_MENU[7]={IDM_FX_5,IDM_FX_15,IDM_FX_30,IDM_FX_60,IDM_FX_DAY,IDM_FX_WEEK,IDM_FX_MONTH};char *DIAGR_NAME=NULL;ANALYSER_INIT_TABLE *INIT_TABLE;#define WIN_GAP 8PARA *FindOpPara(){ PARA *para; para =&Fx->KxPara; do { if(para->no ==Fx->PaintPara.object) return para; para =para->next; }while(para!=NULL); return NULL;}DATA *FindOpData(){ DATA *data; data =&Fx->KxData; do { if(data->no ==Fx->PaintPara.object) return data; data =data->next; }while(data!=NULL); return NULL;}// frome 0 to 9int GetNo(PARA *para,long feature){ int i; if(para==NULL) return -1; if(feature&DW_NAME) return((int)GetSerial(feature)); for(i=0;i<10;i++) { if(feature>>i&1L) return i; } return -1;}void GetDiagramName(PARA *Para,int range,char *gpmc){ PARA *para; para =Para; strcpy(DIAGR_NAME,RANGE_NAME[range]); do { if(para->rc.right >para->rc.left&& para->rc.bottom >para->rc.top) { if(strlen(DIAGR_NAME)>strlen(RANGE_NAME[range])) strcat(DIAGR_NAME,"-"); strcat(DIAGR_NAME,para->name); } para =para->next; }while(para!=NULL); strcat(DIAGR_NAME,"-"); strcat(DIAGR_NAME,gpmc);}void MakeWinSpace(){ int i=0,height,vert; PARA *para; height =Fx->PaintPara.rc.bottom -Fx->PaintPara.rc.top; para =&Fx->KxPara; do { if(para->feature&DW_BASE) i++; else memset(¶->rc,0,sizeof(RECT)); para=para->next; }while(para!=NULL); if(i<=0) { memcpy(&Fx->KxPara.rc,&Fx->PaintPara.rc,sizeof(RECT)); Fx->PaintPara.object=1; return; } switch(i) { case 1: para =&Fx->KxPara; do { if(para->feature&DW_BASE) break; para=para->next; }while(para!=NULL); memcpy(¶->rc,&Fx->PaintPara.rc,sizeof(RECT)); Fx->PaintPara.object=para->no; break; case 2: if(Fx->KxPara.feature&DW_BASE) { memcpy(&Fx->KxPara.rc,&Fx->PaintPara.rc,sizeof(RECT)); Fx->KxPara.rc.bottom =(height -WIN_GAP)*2/3+Fx->KxPara.rc.top; vert =Fx->KxPara.rc.bottom+WIN_GAP; para=Fx->KxPara.next; do { if(para->feature&DW_BASE) break; para=para->next; }while(para!=NULL); memcpy(¶->rc,&Fx->PaintPara.rc,sizeof(RECT)); Fx->PaintPara.object=para->no; para->rc.top =vert; } else { para=Fx->KxPara.next; vert =Fx->PaintPara.rc.top; do { if(para->feature&DW_BASE) { memcpy(¶->rc,&Fx->PaintPara.rc,sizeof(RECT)); para->rc.top =vert; para->rc.bottom =(height -WIN_GAP)/2 +vert; vert =para->rc.bottom+WIN_GAP; Fx->PaintPara.object=para->no; } para=para->next; }while(para!=NULL); } break; case 3: if(Fx->KxPara.feature&DW_BASE&&Fx->CjlPara.feature&DW_BASE) { memcpy(&Fx->KxPara.rc,&Fx->PaintPara.rc,sizeof(RECT)); Fx->KxPara.rc.bottom =(height -2*WIN_GAP)*3/6 +Fx->KxPara.rc.top; Fx->PaintPara.object=1; vert =Fx->KxPara.rc.bottom +WIN_GAP; memcpy(&Fx->CjlPara.rc,&Fx->PaintPara.rc,sizeof(RECT)); Fx->CjlPara.rc.top =vert; Fx->CjlPara.rc.bottom =(height -2*WIN_GAP)*1/6 +vert; vert =Fx->CjlPara.rc.bottom+WIN_GAP; para=Fx->CjlPara.next; do { if(para->feature&DW_BASE) break; para=para->next; }while(para!=NULL); memcpy(¶->rc,&Fx->PaintPara.rc,sizeof(RECT)); para->rc.top =vert; break; } default: para=Fx->KxPara.next; vert =Fx->PaintPara.rc.top; do { if(para->feature&DW_BASE) { memcpy(¶->rc,&Fx->PaintPara.rc,sizeof(RECT)); para->rc.top =vert; para->rc.bottom =(height -WIN_GAP*(i-1))/i +vert; vert =para->rc.bottom+WIN_GAP; Fx->PaintPara.object=para->no; } para=para->next; }while(para!=NULL); break; }}BOOL RegisterFx(void){ WNDCLASS wc; memset(&wc, 0, sizeof(wc)); wc.lpfnWndProc =FxWndProc; wc.lpszClassName =FX_CLASS; wc.hbrBackground =GetStockObject(BLACK_BRUSH); wc.hInstance = ghInstance; wc.hCursor = LoadCursor(NULL, IDC_ARROW); if(!RegisterClass(&wc)) return FALSE; return TRUE;}BOOL AnalyseInit(void){ LOGFONT lf; char temp[80]; ANALYSER_INIT_TABLE InitTable[]={ {IDM_FX_MACD,"MACD",CreateMacdData}, {IDM_FX_DMI,"DMI",CreateDmiData}, {IDM_FX_BIAS,"BIAS",CreateBiasData}, {IDM_FX_RSI,"RSI",CreateRsiData}, {IDM_FX_PSY,"PSY",CreatePsyData}, {IDM_FX_VR,"VR",CreateVrData}, {IDM_FX_OBV,"OBV",CreateObvData}, {IDM_FX_WR,"WR",CreateWrData}, {IDM_FX_KDJ,"KDJ",CreateKdjData}}; //init object 0 if(Fx==NULL) Fx=(FX*)_fmalloc(sizeof(FX)); if(Fx==NULL) return FALSE; memset(Fx,0,sizeof(FX)); Fx->type=IDM_FX_MACD; if(GetInitString("FX", "RANGE", temp)) Fx->range=atoi(temp); else Fx->range=MIN_5; //init object 1 strcpy(Fx->KxPara.name,"K线"); Fx->KxPara.no =1; GetAnalysePara(&Fx->KxPara); Fx->KxPara.feature |=DW_ALL; //init object 2 strcpy(Fx->CjlPara.name,"成交量"); Fx->CjlPara.no =2; GetAnalysePara(&Fx->CjlPara); Fx->CjlPara.feature |=(DW_ALL); Fx->KxPara.next =&Fx->CjlPara; Fx->KxData.next =&Fx->CjlData; //init para object 3 if(Fx->Para==NULL) Fx->Para=(PARA*)_fmalloc(sizeof(PARA)); if(Fx->Para ==NULL) return FALSE; memset(Fx->Para,0,sizeof(PARA)); Fx->Para->no=3; Fx->CjlPara.next =Fx->Para; Fx->Para->feature |=DW_ALL|1L; //init data object 3 if(Fx->Data==NULL) Fx->Data=(DATA*)_fmalloc(sizeof(DATA)); if(Fx->Data==NULL) return FALSE; memset(Fx->Data,0,sizeof(DATA)); Fx->Data->no=Fx->Para->no; Fx->CjlData.next =Fx->Data; //init selected object to object one Fx->PaintPara.object =1; Fx->PaintPara.item =DW_NULL; //init paint font if(Fx->PaintPara.hFont!=NULL) DeleteObject(Fx->PaintPara.hFont); memset(&lf, 0, sizeof(lf)); lf.lfHeight =13; lf.lfWeight =FW_NORMAL; strcpy(lf.lfFaceName,"宋体"); lf.lfItalic=0; lf.lfUnderline=0; Fx->PaintPara.hFont =CreateFontIndirect(&lf); if(Fx->PaintPara.hFont ==0) return FALSE; DIAGR_NAME =_fmalloc(sizeof(char)*60); if(DIAGR_NAME==NULL) return FALSE; memset(DIAGR_NAME,0,sizeof(char)*60); INIT_TABLE =_fmalloc(sizeof(InitTable)); if(INIT_TABLE ==NULL) return FALSE; memcpy(INIT_TABLE,InitTable,sizeof(InitTable)); Fx->PaintPara.num =sizeof(InitTable)/sizeof(ANALYSER_INIT_TABLE); return TRUE;}BOOL CreateWndFx(HWND hWnd){ int x, y; HWND hwnd; RECT rc; GetClientRect(ghWndMain, &rc); x =rc.right -rc.left; y =rc.bottom -rc.top; if(ghWndFx==NULL) { hwnd =CreateWindow(FX_CLASS, NULL, WS_CHILD|WS_CLIPSIBLINGS|WS_CLIPCHILDREN, 10, STATUS_HEIGHT+TOOLBAR_HEIGHT, x -20, (y-STATUS_HEIGHT)-20-TOOLBAR_HEIGHT -GetSystemMetrics(SM_CYCAPTION), hWnd, NULL, ghInstance, NULL); if(hwnd ==NULL) return FALSE; ghWndFx =hwnd; } else { SetWindowPos(ghWndFx, (HWND) NULL, 10, STATUS_HEIGHT+TOOLBAR_HEIGHT, x -20, (y-STATUS_HEIGHT)-20-TOOLBAR_HEIGHT -GetSystemMetrics(SM_CYCAPTION), NULL); } return TRUE;}int WriteDefaultPara(void){ OFSTRUCT os; HFILE hf; char fname[80]; PARA para; sprintf(fname,"%s\\sysset.dat",szDataPath); if((hf =OpenFile(fname,&os,OF_WRITE|OF_CREATE))==HFILE_ERROR) return -1; memset(¶,0,sizeof(PARA)); strcpy(para.name ,"K线"); para.pnum =3; para.dnum =7; //ks,ss,zg,zd,pma1,pma2,pma3 strcpy(para.pname[4],"PMA"); strcpy(para.pname[5],"PMA"); strcpy(para.pname[6],"PMA"); para.color[0] =RGB(255,0,255); para.color[10+0] =RGB(0,255,255); //K diagram down color para.color[4] =RGB(255,100,255); //K 5 minute average color para.color[5] =RGB(255,255,100); //K 10 minute avrage color para.color[6] =RGB(100,100,255); //K 20 ... para.periods[4]=5; //K 5 minute avrage period para.periods[5]=10; //K 10... para.periods[6]=20; //k 20... _lwrite(hf,¶,sizeof(PARA)); memset(¶,0,sizeof(PARA)); strcpy(para.name ,"成交量"); para.pnum =2; para.dnum =4; //cj,ks-ss,pma1,pma2 strcpy(para.pname[2],"PMA"); strcpy(para.pname[3],"PMA"); para.color[0] =RGB(255,0,255); para.color[10+0] =RGB(0,255,255); para.color[2] =RGB(255,0,255); //Volumn average diagram color para.color[3] =RGB(255,255,0); para.periods[2]=5; para.periods[3]=10; _lwrite(hf,¶,sizeof(PARA)); memset(¶,0,sizeof(PARA)); strcpy(para.name ,"MACD"); para.pnum =3; para.dnum =3; //macd,dif,cha strcpy(para.pname[0],"Macd"); strcpy(para.pname[1],"Dif"); strcpy(para.pname[2],"Dea"); para.color[0] =RGB(255,255,100); para.color[1] =RGB(255,255,255); para.color[2] =RGB(255,0,255); para.color[10+2] =RGB(0,255,255); para.periods[0]=12; para.periods[1]=26; para.periods[2]=9; _lwrite(hf,¶,sizeof(PARA)); memset(¶,0,sizeof(PARA)); strcpy(para.name,"RSI"); para.pnum =2; para.dnum =2; //1Rsi,2Rsi strcpy(para.pname[0],"Rsi"); strcpy(para.pname[1],"Rsi"); para.color[0] =RGB(255,255,255); para.color[1] =RGB(255,255,100); para.periods[0]=6; para.periods[1]=12; _lwrite(hf,¶,sizeof(PARA)); memset(¶,0,sizeof(PARA)); strcpy(para.name,"DMI"); para.pnum =1; para.dnum =3; strcpy(para.pname[0],"+Di"); strcpy(para.pname[1],"-Di"); strcpy(para.pname[2],"+Adx"); para.color[0]=RGB(255,255,255); //up di color para.color[1]=RGB(255,255,100); //down di... para.color[2]=RGB(100,255,255); //adx... //para.color[3]=RGB(100,100,255); para.periods[0]=14; _lwrite(hf,¶,sizeof(PARA)); memset(¶,0,sizeof(PARA)); strcpy(para.name,"PSY"); para.pnum =1; para.dnum =1; strcpy(para.pname[0],"Psy"); para.color[0]=RGB(255,255,100); // para.periods[0]=12; _lwrite(hf,¶,sizeof(PARA));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -