通过DLL实现了通达信公式系统无法完成的功能,示例代码通过2个接口函数实现了真实波幅变化趋势角度的计算,通过通达信副图调用DLL,绘制真实波幅(ATR)变化趋势角度曲线。
第1部分 DLL 编写
该示例代码编译环境为Visual Studio 2017,win10X64。代码供想学dll的老师参考,高手请忽略(其实初学最好的范例是通达信官方提供的模版及配套的指南文件,简洁明了,这2个文件包官方可以下载,论坛也很多)。
2个接口函数为1号和2号:
PluginTCalcFuncInfo g_CalcFuncSets[] =
PluginTCalcFuncInfo g_CalcFuncSets[] =
{
{ 2,(pPluginFUNC)&AtrAngle2 },//计算趋势角度 核后
{ 1,(pPluginFUNC)&AtrAngle1 },//计算趋势角度
{ 0,NULL },
};
附件压缩包里,也提供了编译后的文件分别为32位TrendAngle.dll 和64位TrendAngleX64.dll,在Release目录找32位,X64目录找64位,根据通达信版本绑定。
在通达信公式里 调用为(假设dll绑定9号,通达信公式不区分32位和64位)
TEMP1:=TDXDLL9(1,LENGTH*1000+SCALE,SMOOTH,FACTOR);
趋势角度MA:TDXDLL9(2,ATR,C,C),LINETHICK1,COLORMAGENTA;
该示例代码演示了2种传递多个参数给DLL的方法,就不说破了,自己看代码。
这部分说的比较罗嗦,供跟楼主一样非专业码农又想玩的同学参考。
第2部分 真实波幅变化趋势角度
真实波幅ATR是通达信系统公式,比涨幅和振幅范围还要大,定义见系统公式代码及说明。ATR大概反应了多头或空头的活跃程度。
真实波幅变化趋势角度,是把真实波幅的变化趋势转换为(-90°至90°),负值空头占优,正值多头占优, -45°以下空头强悍,45°以上多头强悍,从负值变正值说明多头开始活跃。
按理这个dll也可以算其它量变化的趋势,没仔细考究。
真实波幅变化趋势角度的原代码是pine脚本(pine可能是tradeview的公式语言,脚本在附件压缩包里找,名为 指标.txt),pine源代码是很早前网上得到的,一直放着没看,最近通过AI大概弄懂了算法,转为通达信dll来实现。计算过程大概是先计算变化斜率,从弧度转角度,然后用1个核函数滤波平滑(核滤波),核滤波需要几个参数,通达信公式里的几个参数就是这几个参数。包括:
{滤波因子
LENGTH =INPUT.INT(8, "LENGTH", 1)
SCALE = INPUT.INT(2, "SCALE", 1)
SMOOTH =INPUT.FLOAT(2, "SMOOTING", 1)
FACTOR =INPUT.FLOAT(1, "SMOOTHING FACTOR", 0.125, 100, 0.125)
}
C++算法是否复原pine脚本的算法,不确定。
真实波幅变化趋势角度见下图:
32位:
64位:
3、其它
压缩包里有解决方案C++源码包,编译的dll(32位,64位),原pine脚本及通达信用的副图公式(dll绑9号)。
代码没有清理,编辑修改的痕迹都在,可能比较乱。
菜鸟玩热闹,非专业码农,大部分情况只会问AI,照葫芦画瓢。专业问题就不要问了,直接问AI.
指标怎么用自己摸索,咱也不懂。
码一堆文字,太浪费时间了。有用的话下载点赞好评。