⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fx.c

📁 站长96年写的一个Internet上用的股票行情、分析、交易、资讯程序源码
💻 C
📖 第 1 页 / 共 5 页
字号:
#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(&para->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(&para->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(&para->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(&para->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(&para->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(&para->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(&para,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,&para,sizeof(PARA));	memset(&para,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,&para,sizeof(PARA));    	memset(&para,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,&para,sizeof(PARA));	memset(&para,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,&para,sizeof(PARA));    	memset(&para,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,&para,sizeof(PARA));    	memset(&para,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,&para,sizeof(PARA));            

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -