www.pudn.com > inet_stock.zip > FX.H


//////////////////////////////////////////////////////////////////////
//This function and macro is to deal with the hirstory data analyser.
//
#define	FRAME_WIDTH		2

#define MAX_GPDM_SIZE 	6
#define MAX_PARA_NAME	6
#define MIN_5   		0
#define MIN_15  		1
#define MIN_30  		2
#define MIN_60  		3
#define DAY     		4
#define WEEK    		5
#define MONTH   		6

#define DEFSHOWDOT      60
#define MAXSHOWDOT      900

#define ABS(x)	((x>=0) ? x:0.00-x)
#define PV(x)   ((x>=0) ? x:0.00)
#define NV(x)   ((x<=0) ? 0-x:0)

#define FX_CLASS	"JXFX"

typedef struct tag_MACD_DATA
{
     double macd;
     double ema1,ema2;
     double dif;
     double cha;
}MACD_DATA, FAR *LPMACD_DATA;

typedef struct tag_RSI_DATA
{
	double un[3],dn[3],rsi[3];
}RSI_DATA,FAR *LPRSI_DATA;

typedef struct tag_DMI_DATA
{
	double tr,pdm,ndm,pdi,ndi;
	double dx,adx;
}DMI_DATA,LPDMI_DATA;

typedef struct tag_PSY_DATA
{
	double psy;
}PSY_DATA,LPPSY_DATA;

typedef struct tag_VR_DATA
{
	double vr;
}VR_DATA,LPVR_DATA;

typedef struct tag_OBV_DATA
{ 
	double obv;
}OBV_DATA,LPOBV_DATA;

typedef struct tag_BIAS_DATA
{
	double bias;
}BIAS_DATA,LPBIAS_DATA;

typedef struct tag_WR_DATA
{
	double wr[4];
}WR_DATA,LPWR_DATA;

typedef struct tag_KDJ_DATA
{
	double k,d,j;
}KDJ_DATA,LPKDJ_DATA;

typedef struct tag_K_DATA
{
	char date[10];               //yymmddhhmi
	float ks;
	float zg;
	float zd;
	float ss;
	long  cj;
}K_DATA,MAIN_DATA,FAR *LPK_DATA;


//This  struct to draw curve para.
//feature:
//       bit1 -bit10 -----draw data object

#define		DW_DATA1	(1L<< 0)
#define		DW_FRAME	(1L<<10)
#define		DW_LEFT		(1L<<11)
#define		DW_X_COOR	(1L<<12)

#define		DW_ALERT	(1L<<13)
#define		DW_TOP		(1L<<14)
#define		DW_NAME		(1L<<15)

#define		DW_MAX		(1L<<16)
#define		DW_MIN		(1L<<17)
#define		DW_SELE		(1L<<18)
#define		DW_NULL		(1L<<19)
#define		DW_DELE		(1L<<20)
//bit 22 -25 is ret no code.value is 0 -16
#define		GetSerial(x)	(x>>21)
#define		SetSerial(x,y)	(x<<21|y)
#define		DW_BASE		0x3ff
#define		DW_OBJECT	0xffff
#define		DW_ATTR		0xffff0000
#define		DW_ALL		0x3fc00

#define		MAX_DATA_ITEM	10
typedef struct tag_PARA
{
	char name[MAX_PARA_NAME+1];     			//参数名称
	char pname[MAX_DATA_ITEM][MAX_PARA_NAME+1];	//参数名称
	int no;                     				//目标标号
	int dnum;                       			//数据项个数
	COLORREF color[MAX_DATA_ITEM*2];  			//色参数,对应于该目标的画图项数
	RECT rc;            						//作图区
	int pnum;             						//参数个数(指可调参数个数,等于Periods个数)	
	int periods[MAX_DATA_ITEM];					//计算周期
	double price[5];     						//价参数   price[0] MAX price[1] MIN price[2]alert1,price[3]alert2
	int htitle;                 				//顶标注区高度
	int xtitle[5];                  			//顶标注区数据项X坐标(数据项名称在xtitle[i]-ltitle处)
	double fwdt,fhdj;               			//宽密度、高密度
	unsigned long feature;          			//32位特性码
	struct tag_PARA *next;          			//下一个参数对象指针
}PARA;

typedef struct tag_DATA
{
    int no;                         //数据对象编号
    char gpdm[MAX_GPDM_SIZE+1]; 	//数据对象的股票代码
    int type;                   	//数据对象的分析曲线类型
    int range;                  	//分析周期  
    int size;                       //每项数据个数
    int num;                 		//数据项个数
    int method[MAX_DATA_ITEM];      //每个数据项的画法
	double* v[MAX_DATA_ITEM];       //数据值
	struct tag_DATA *next;      	//下一个数据对象地址
}DATA;

#define		PRICE_BAR_METHOD    0   //用价参数画方形图(KS、SS、ZG、ZD)
#define		VOULMN_BAR_METHOD	1   //用量参数画方形图(CJ)
#define		CURVE_METHOD		2   //曲线
#define		VERT_LINE_METHOD    3   //垂直线


typedef struct tag_PAINT_PARA
{
	int num;                        //初始化表项数
	RECT rc;            			//作图区整体大小
	int wleft;          			//左标注区宽度
	int object;                 	//操作目标的编号
	long item;                   	//操作目标的项目编号
	BOOL IsMax;                 	//窗口是否开大
	BOOL IsAvLineShow;          	//是否画平均线
	BOOL IsScroll;              	//窗口是否在左右滚动
	BOOL IsUpDown;              	//窗口是否在上下滚动
	BOOL IsPainting;
	BOOL IsSetPara;             	//是否在设置参数
	HFONT hFont;
}PAINT_PARA;

typedef struct tag_FX
{                 
    char gpdm[MAX_GPDM_SIZE+1];
    char gpmc[20];
    PAINT_PARA PaintPara;
    MAIN_DATA *MainData;
    PARA KxPara,CjlPara;
    DATA KxData,CjlData;
    PARA *Para;
    DATA *Data;
    BOOL IsDataOk;
    int range,type;
    int ShowDot,RecCount,CurRecPrt,TotalCount;
}FX,FAR *LPFX;

HWND ghWndSetup;
FX *Fx;
char *RANGE_NAME[];
unsigned int RANGE_MENU[7];

BOOL RegisterFx();
BOOL CreateWndFx(HWND);
LRESULT CALLBACK FxWndProc(HWND, UINT, WPARAM, LPARAM);

#define 	SCROLL_RIGHT	1
#define		SCROLL_LEFT		-1
#define		SCROLL_CANCEL	0
#define		SCROLL_HOME		'H'
#define		SCROLL_END		'E'

int DrawScroll(FX *fx,int orient);
int UpDown(FX *fx,int orient);

extern int vLineTo(HDC hDC, int x1, int y1);
extern int hLineTo(HDC hDC, int x1, int y1);

typedef struct tag_DAY_DATA
{
	long day;
	float kpjg, spjg, zgjg, zdjg;
	long cjss;
	double cjje;
}DAY_DATA, FAR *LPDAY_DATA;

BOOL AnalyseInit(void);  
int WriteDefaultPara(void);
int WritePara(PARA *para);
int GetAnalysePara (PARA *para);
void SetDiagColor(int x,int y,PARA *Para);
void SetAnalysePara(PAINT_PARA *PaintPara);

typedef int (* CREATEDATA)(K_DATA *MainData,int Num,DATA *Data,PARA *Para);
typedef struct tag_ANALYSER_INIT_ITEM
{
  	int type;
  	char name[MAX_PARA_NAME+1];
  	CREATEDATA CreateData;
}ANALYSER_INIT_TABLE;

extern ANALYSER_INIT_TABLE *INIT_TABLE;

extern HWND ghWndSetup;
extern FX *Fx;
extern BOOL RegisterFx(void);
extern BOOL CreateWndFx(HWND hWnd);
extern int FxExit(LPFX Fx);

int DrawDiagram(HDC hDc,int CurRecPrt,int Show,PARA *Para,DATA *Data,PAINT_PARA *PaintPara,long feature);
long GetObjectItem(int x,int y,int CurRecPrt,int Show,PARA *Para,DATA *Data,PAINT_PARA *PaintPara);