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

📄 fxjfunc.cpp

📁 大智慧提供的公式计算能力有限
💻 CPP
字号:
// FxjFunc.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include "FxjFunc.h"
#include <stdio.h>

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
    switch (ul_reason_for_call)
	{
		case DLL_PROCESS_ATTACH:
		case DLL_THREAD_ATTACH:
		case DLL_THREAD_DETACH:
		case DLL_PROCESS_DETACH:
			break;
    }
    return TRUE;
}

//导出自定义格式数据
//调用方法:
//	"ETXT@MYMACLOSE"(999999)


//comba 编写于杭州 元宵节 20040205  "套牢大户"
//编写的原因:一直想要导出分笔数据,可是一直找不到自己需要的格式,
//恰好昨天看到一个工具可以导出自定义格式数据,见鬼,可惜只有dll,而且连公式都是加密的,
//于是赶紧找了一下分析家公式的c语言接口规范,一看还是非常简单的,于是就写了这个东西,
//现在终于能有自定义格式的分笔数据了,还有日线,周线等等数据,
//希望这个工具对你也有用,反正代码也实在是非常简单,也就一起放上来,一起看吧

__declspec(dllexport) int WINAPI MYMACLOSE(CALCINFO* pData)
{
	
	int i;
	char psTemp[255];
	char psTime[128];
	struct tm *today;

	FILE * fp;

	strcpy(psTemp,"d:\\dzh2\\text\\");//数据保存的路径
	strcpy(psTemp,strcat(psTemp,pData->m_strStkLabel));
	strcpy(psTemp,strcat(psTemp,".txt"));
	
	if((fp=fopen( psTemp,"a+"))!=NULL)
	{
		

		if(pData)
		{
			fprintf(fp,"\'%s\'\n",pData->m_strStkLabel);
			fprintf(fp,"日期 时间\t开盘价\t最高价\t最低价\t收盘价\t成交量\t成交额\n");

			for(i=0;i<pData->m_nNumData;i++)	
			{
				today = gmtime( &pData->m_pData[i].m_time );
				strftime( psTime, 128,"%y/%m/%d %H:%M:%S", today );

				
				
				fprintf(fp,"%s\t%.3f\t%.3f\t%.3f\t%.3f\t%f\t%f\n",
					
					psTime,
					pData->m_pData[i].m_fOpen,
					pData->m_pData[i].m_fHigh,
					pData->m_pData[i].m_fLow,
					pData->m_pData[i].m_fClose,
					
					pData->m_pData[i].m_fAmount,
					pData->m_pData[i].m_fVolume
					
					);

			}
			
		}
	}
	fclose(fp);
	
	return 1;
}

//下面都是范例代码,不是我写的
__declspec(dllexport) int WINAPI MYMACLOSE_CALC_PREV(CALCINFO* pData)
{
	if(pData->m_pfParam1 && pData->m_nParam1Start<0)
	{
		float f = *pData->m_pfParam1;
		return ((int)f) - 1;
	}
	return 0;
}

//计算均价,2个参数,参数1为待求均线的数据,参数2表示计算周期
//调用方法:
//	MYMAVAR(CLOSE-OPEN,5)

__declspec(dllexport) int WINAPI MYMAVAR(CALCINFO* pData)
{
	float f,fTotal;
	const float* pValue;
	int nPeriod,nFirst,i,j;
	if(pData->m_pfParam1 && pData->m_pfParam2 && 	//参数1,2有效
		pData->m_nParam1Start>=0 &&					//参数1为序列数
		pData->m_pfParam3==NULL)					//有2个参数
	{
		pValue = pData->m_pfParam1;					//参数1
		nFirst = pData->m_nParam1Start;				//有效值
		f = *pData->m_pfParam2;
		nPeriod = (int)f;							//参数2
		if(nFirst>=0 && nPeriod>0)
		{
			for(i=nFirst+nPeriod-1;i<pData->m_nNumData;i++)
			{
				fTotal = 0.0f;
				for(j=0;j<nPeriod;j++)					//累加
					fTotal += pData->m_pData[i-j].m_fClose;
				pData->m_pResultBuf[i] = fTotal/nPeriod;						//平均
			}
			return nFirst+nPeriod-1;
		}
	}
	return -1;
}

__declspec(dllexport) int WINAPI MYMAVAR_CALC_PREV(CALCINFO* pData)
{
	if(pData->m_pfParam2)
	{
		float f = *pData->m_pfParam2;
		return ((int)f) - 1;
	}
	return 0;
}

⌨️ 快捷键说明

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