// FxjFunc.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include "FxjFunc.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;
}
//计算收盘价的均价,一个常数参数,表示计算周期
//调用方法:
// MYMACLOSE(5)
__declspec(dllexport) int WINAPI MYMACLOSE(CALCINFO* pData)
{
float f,fTotal;
int nPeriod,i,j;
if(pData->m_pfParam1 && //参数1有效
pData->m_nParam1Start<0 && //参数1为常数
pData->m_pfParam2==NULL) //仅有一个参数
{
f = *pData->m_pfParam1;
nPeriod = (int)f; //参数1
if(nPeriod>0)
{
for(i=nPeriod-1;i<pData->m_nNumData;i++) //计算nPeriod周期的均线,数据从nPeriod-1开始有效
{
fTotal = 0.0f;
for(j=0;j<nPeriod;j++) //累加
fTotal += pData->m_pData[i-j].m_fClose;
pData->m_pResultBuf[i] = fTotal/nPeriod; //平均
}
return nPeriod-1;
}
}
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;
}