www.pudn.com > inet_stock.zip > FXSS.CPP


#include 
#include 
#include "fx.h"

FX_DATAS FxDatas;

extern HINSTANCE ghInstance;

int DrawFx(HWND hWnd, HDC hDC, LPFX lpFx)
{
	FARPROC lpFxDraw;
	
	switch(lpFx->type)
	{
		case FX_TYPE_MACD:
			lpFxDraw =MakeProcInstance(DrawMacd, ghInstance);
		break;
		case FX_TYPE_RSI:
			//lpFxDraw =&DrawRsi;
		break;
		case FX_TYPE_DMI:
			//lpFxDraw =&DrawDmi;
		break;
		case FX_TYPE_PSY:
			//lpFxDraw =&DrawPsy;
		break;
		case FX_TYPE_VR:
			//lpFxDraw =&DrawVr;
		break;
		case FX_TYPE_JLT:
		break;
		case FX_TYPE_K:
		break;
		case FX_TYPE_KD:
		break;
	}
	if(lpFxDraw ==NULL)
		return -1;
	
	(*lpFxDraw)(hWnd, hDC, lpFx);
	
	FreeProcInstance(lpFxDraw);
	
	return 0;
}

FAR PASCAL DrawMacd(HWND hWnd, HDC hDC, LPFX lpFx)
{
	int i,k,nrec;
	float maxdif,mindif;
	int ma1, ma2;
	float fce, xs[2];
	HLOCAL hfp1,hfp2,hema1,hema2,hdif,hmacd;
	float *fp1,*fp2,*ema1,*ema2,*dif,*macd;
	float fplus1,fplus2;
	int j,np1,np2;
	char cb[20];
	RECT rc;
	int et;
	HPEN hPen[2];

	GetClientRect(hWnd, &rc);
	
	nrec =FxDatas.recCount;
	if(nrec <2*(lpFx->sets.ma[0]+1)+lpFx->sets.ma[1])
		return 0;
	ma1 =lpFx->sets.ma[0];
	ma2 =lpFx->sets.ma[1];
	xs[0]=2/(ma1+1);
	xs[1]=2/(ma2+1);

	hema1=LocalAlloc(LHND,(nrec-ma2+1)*sizeof(float));
	hema2=LocalAlloc(LHND,(nrec-ma2+1)*sizeof(float));
	hfp1=LocalAlloc(LHND,ma1*sizeof(float));
	hfp2=LocalAlloc(LHND,ma2*sizeof(float));
	ema1=(float*)LocalLock(hema1);
	ema2=(float*)LocalLock(hema2);
	fp1=(float*)LocalLock(hfp1);
	fp2=(float*)LocalLock(hfp2);
	for(i=0;i=ma2-ma1)
			fp1[i-(ma2-ma1)]=FxDatas.lpData[i].spjg;
		fp2[i]=FxDatas.lpData[i].spjg;
	}
	fplus1=fplus2=0;
	for(i=0;isets.ma[1]+1)*sizeof(float));
	dif=(float*)LocalLock(hdif);
	macd=(float*)LocalLock(hmacd);
	for(i=0;isets.ma[1];i++)
		fplus1+=dif[i];
	macd[0]=fplus1/lpFx->sets.ma[1];
	k=1;
	for(;isets.ma[1]];
		fplus1+=dif[i];
		macd[k++]=fplus1/lpFx->sets.ma[1];
	}

	maxdif =mindif =dif[0];
	for(i=1;imaxdif)?dif[i]:maxdif;
		mindif =(dif[i]sets.ma[1]);
	TextOut(hDC,et,32767,cb,strlen(cb));
	SetTextColor(hDC,RGB(255, 255, 0));
	TextOut(hDC,et,32767,cb,4);
	SetTextColor(hDC,RGB(0, 255, 255));
	TextOut(hDC,et,32767,cb,2);

	SetWindowOrg(hDC,-4,0);
	hPen[0]=CreatePen(PS_SOLID,1,RGB(0, 255, 255));
	hPen[1]=CreatePen(PS_DOT,1,RGB(255, 255, 0));
	SelectObject(hDC,hPen[0]);
	MoveTo(hDC,ma2,(int)((dif[0]-mindif)*fce));
	for(i=1;isets.ma[1];i++)
		LineTo(hDC,i+ma2,(int)((dif[i]-mindif)*fce));
	for(;isets.ma[1]-1,
				(int)((macd[i-lpFx->sets.ma[1]-1]-mindif)*fce));
		LineTo(hDC,i+ma2+lpFx->sets.ma[1],
				(int)((macd[i-lpFx->sets.ma[1]]-mindif)*fce));
	}

	SelectObject(hDC,GetStockObject(WHITE_PEN));
	for(i=0;isets.ma[1];i++)
	{
		MoveTo(hDC,i+ma2+lpFx->sets.ma[1],-(int)(mindif*fce));
		LineTo(hDC,i+ma2+lpFx->sets.ma[1],
				(int)((dif[i+lpFx->sets.ma[1]]-mindif)*fce));
	}
	SetBkMode(hDC,TRANSPARENT);
	SetTextAlign(hDC,TA_RIGHT|TA_TOP);
	SetTextColor(hDC,RGB(255, 255, 255));
	SetWindowOrg(hDC,0,0);
	MoveTo(hDC,0,-(int)(mindif*fce));
	LineTo(hDC,et,-(int)(mindif*fce));
	TextOut(hDC,0,-(int)(mindif*fce),"0",1);
	for(i=0;i<2;i++)
	if(hPen[i]!=NULL)
		DeleteObject(hPen[i]);
	LocalUnlock(hdif);
	LocalFree(hdif);
	LocalUnlock(hmacd);
	LocalFree(hmacd);

	return 1;
}