// O1C , O2C , 均收益源代码
//【第1/3部分】 TDX 指标文件 A.171229 start
// CNT1: TDXDLL1(1,C,O,1), COLOR00FF00, NODRAW;
// O1C: TDXDLL1(2,C,O,2), COLORFF0000;
// CNT2: TDXDLL1(3,C,O,1), COLOR0000FF, NODRAW;
// O2C: TDXDLL1(4,C,O,2), COLORFFCC00;
//【第1/3部分】 TDX 指标文件 A.171229 end
//【第2/3部分】 DLL工程 头文件 A.171229 start
//#ifndef __PUBLICHEAD_H__
//#define __PUBLICHEAD_H__
//#ifndef __TCALC_FUNC_SETS
//#define __TCALC_FUNC_SETS
//// note1: copy from PluginTCalcFunc.h
//#pragma pack(push,1)
//// note2: 函数(数据个数,输出,输入a,输入b,输入c)
//typedef void(*pPluginFUNC)(int,float*,float*,float*,float*);
//typedef struct tagPluginTCalcFuncInfo
//{
// unsigned short nFuncMark;//函数编号
// pPluginFUNC pCallFunc;//函数地址
//}PluginTCalcFuncInfo;
//typedef BOOL(*pRegisterPluginFUNC)(PluginTCalcFuncInfo**);
//#pragma pack(pop)
//// note3: copy from PluginTCalcFunc.h
//#ifdef __cplusplus
//extern "C"
//{
//#endif //__cplusplus
// __declspec(dllexport) BOOL RegisterTdxFunc(PluginTCalcFuncInfo** pFun);
//#ifdef __cplusplus
//}
//#endif //__cplusplus
//#endif //__TCALC_FUNC_SETS
//#endif //__PUBLICHEAD_H__
//【第2/3部分】 DLL工程 头文件 A.171229 end
//【第3/3部分】 DLL工程 C代码 A.171229
// 输出目录设置: F:\new_tdx\T0002\dlls\
// 使用说明
// 1. 生成的dll及相关依赖dll请拷贝到通达信安装目录的T0002/dlls/下面;
// 2. 再在公式管理器进行绑定
#include "StdAfx.h"
#include "PublicHead.h"
// slf add
#include "math.h"
// 动态数组 备份输入数据 slf add
#include<iostream>
using namespace std;
// 开始编辑 函数
// 函数功能:O1C 操作次数
// 调用序号:1
// K 线类型:1 day
// 函数输入:pfINa = C
// pfINb = O
// pfINc = 2
// 函数输出:O1C 操作次数
// 调用函数:
// 被调函数:
// 最先处理;从最久数据开始 [0]
// 编辑日期:171229
// 编译工具:VC6.0
// 实际验证:正确
// C O 2
void O1CCount(int DataLen,float* pfOUT,float* pfINa,float* pfINb,float* pfINc)
{
int i;
int iDays; // 持股天数
float fCntKLine; // 计数器
// 清零输出
for(i = 0; i < DataLen; i++)
{// for 0 start
pfOUT = 0;
}// for 0 end
// 清零计数
fCntKLine = 0;
// 赋值持股天数;
iDays = 1;
// 从最远数据 [0] 开始处理
// 初始值 1
for(i = iDays; i < DataLen; i=i+iDays+1)
{// for 1 start
// 计数器累加
fCntKLine = fCntKLine + 1;
}// for 1 end
pfOUT[DataLen - 1] = fCntKLine;
}
// 函数功能:O1C 均收益
// 调用序号:2
// K 线类型:1 day
// 函数输入:pfINa = C
// pfINb = O
// pfINc = 2
// 函数输出:每次收益 以及 总均收益
// 调用函数:
// 被调函数:
// 最先处理;从最久数据开始 [0]
// 编辑日期:171229
// 编译工具:VC6.0
// 实际验证:正确
// C O 2
void O1CReturn(int DataLen,float* pfOUT,float* pfINa,float* pfINb,float* pfINc)
{
int i;
int iDays; // 持股天数
float fCntKLine; // 计数器
float fC1OReturn; // O1C 收益和
// 清零输出
for(i = 0; i < DataLen; i++)
{// for 0 start
pfOUT = 0;
}// for 0 end
// 清零计数
fCntKLine = 0;
fC1OReturn = 0;
// 赋值持股天数;
iDays = 1;
// 从最远数据 [0] 开始处理
// 初始值 1
for(i = iDays; i < DataLen; i=i+iDays+1)
{// for 1 start
// 计数器累加
fCntKLine = fCntKLine + 1;
// 计算CO1 收益
fC1OReturn = fC1OReturn + (pfINa - pfINb[i-iDays])/pfINb[i-iDays];
//pfOUT = 100*fC1OReturn / fCntKLine;
pfOUT = 100*(pfINa - pfINb[i-iDays])/pfINb[i-iDays];
}// for 1 end
pfOUT[DataLen - 1] = 100*fC1OReturn/fCntKLine;
}
// 函数功能:O2C 操作次数
// 调用序号:3
// K 线类型:1 day
// 函数输入:pfINa = C
// pfINb = O
// pfINc = 2
// 函数输出:O2C 操作次数
// 调用函数:
// 被调函数:
// 最先处理;从最久数据开始 [0]
// 编辑日期:171229
// 编译工具:VC6.0
// 实际验证:正确
// C O 2
void O2CCount(int DataLen,float* pfOUT,float* pfINa,float* pfINb,float* pfINc)
{
int i;
int iDays; // 持股天数
float fCntKLine; // 计数器
// 清零输出
for(i = 0; i < DataLen; i++)
{// for 0 start
pfOUT = 0;
}// for 0 end
// 清零计数
fCntKLine = 0;
// 赋值持股天数;
iDays = 2;
// 从最远数据 [0] 开始处理
// 初始值 2
for(i = iDays; i < DataLen; i=i+iDays+1)
{// for 1 start
// 计数器累加
fCntKLine = fCntKLine + 1;
}// for 1 end
pfOUT[DataLen - 1] = fCntKLine;
}
// 函数功能:O2C 均收益
// 调用序号:4
// K 线类型:1 day
// 函数输入:pfINa = C
// pfINb = O
// pfINc = 2
// 函数输出:每次收益 以及 总均收益
// 调用函数:
// 被调函数:
// 最先处理;从最久数据开始 [0]
// 编辑日期:171229
// 编译工具:VC6.0
// 实际验证:正确
// C O 2
void O2CReturn(int DataLen,float* pfOUT,float* pfINa,float* pfINb,float* pfINc)
{
int i;
int iDays; // 持股天数
float fCntKLine; // 计数器
float fC1OReturn; // O2C 收益和
// 清零输出
for(i = 0; i < DataLen; i++)
{// for 0 start
pfOUT = 0;
}// for 0 end
// 清零计数
fCntKLine = 0;
fC1OReturn = 0;
// 赋值持股天数;
iDays = 2;
// 从最远数据 [0] 开始处理
// 初始值 2
for(i = iDays; i < DataLen; i=i+iDays+1)
{// for 1 start
// 计数器累加
fCntKLine = fCntKLine + 1;
// 计算O2C 收益
fC1OReturn = fC1OReturn + (pfINa - pfINb[i-iDays])/pfINb[i-iDays];
//pfOUT = 100*fC1OReturn / fCntKLine;
pfOUT = 100*(pfINa - pfINb[i-iDays])/pfINb[i-iDays];
}// for 1 end
pfOUT[DataLen - 1] = 100*fC1OReturn/fCntKLine;
}
// ########################
// 注册函数
// ########################
PluginTCalcFuncInfo g_CalcFuncSets[] =
{
{ 1, ( pPluginFUNC ) &O1CCount },
{ 2, ( pPluginFUNC ) &O1CReturn },
{ 3, ( pPluginFUNC ) &O2CCount },
{ 4, ( pPluginFUNC ) &O2CReturn },
{0,NULL},
};
//@@@@@@@@@@@@@@@@@@@@@@@@@
// 导出给TCalc的注册函数
//#########################
BOOL RegisterTdxFunc(PluginTCalcFuncInfo** pFun)
{
if(*pFun==NULL)
{
(*pFun)=g_CalcFuncSets;
return TRUE;
}
return FALSE;
}//end of dll
1. DLL接口软件,深圳市财富趋势科技股份有限公司提供;
2. 编译软件,Microsoft提供;
3. 以上软件版权归上述公司所有;
4. 本人提供源代码属于开源代码,建议非商业使用;
5. 商业应用涉及软件版权问题,请自行联系上述软件提供商授权(请联系供应商确认是否必要)。