|
根据你的兴趣,把它用到你的兴趣中来,既提升你的兴趣,还提升你的Lua的技术。
比如,我用Lua来搞技术分析,性能又好,还避免了C++的诸多缺点。
C++开发通达信的dll指标公式非常麻烦,需要dll编译、dll解绑然后捆绑之类繁琐操作,,有一定点更改就要这么重新来一遍;而且C++的语法一般也比较复杂,内存操作也有一定危险,那么脚本语言就没有这么繁琐了。
在下面这篇文章里,我基于JavaScript和Lua做了基于脚本的通达信dll指标,免去了以上麻烦。
tonyblackwhite:JavaScript和LUA脚本语言通达信DLL公式开发本文基于LUA开发了经典的考夫曼自适应均线通达信Dll指标。
考夫曼自适应移动平均线(KAMA)
考夫曼的适应性移动平均指数(KAMA)是由Perry Kaufman开发的一种智能移动平均指数。强大的趋势跟踪指示器基于指数移动平均线(EMA)计算,对趋势和波动都有反映。当噪音很低时,它会紧跟价格,当价格波动时,它会消除噪音。和所有移动平均线一样,KAMA可以用来观察趋势。价格交叉它表明一个趋势发生变化。价格也可以从KAMA反弹,因此它可以作为动态支撑和阻力。它经常与其他信号和分析技术结合使用。
本文的KAMA均线的算法来自考夫曼本人编写的《交易系统与方法》。
就是这本:
当然,可以提醒大家的是,中文版翻译得有点难懂,考夫曼本人对有些指标的算法也写得比较简单,因此许多指标可能做不出来,推荐看原版。
第5版长这样
第6版长这样
在通达信Lua版dll对应的文件tdxdlllua1.lua中输入如下代码:
function zeros(n)
delt={};
for i=1,n do
delt=0;
end
return delt;
end
function ta.AMA(PRICE,n,Nf,Ns)
local len=#PRICE;
local direction=zeros(len);
for i=n+1 ,len do
direction=PRICE-PRICE[i-n];
end
volatility=zeros(len);
delt={};
delt[1]=0;
for i=2,len do
delt=math.abs(PRICE-PRICE[i-1]);
end
for i=n,len do
local sum=0;
for j=1,n do
sum=sum+delt[i-n+j];
end
volatility=sum;
end
fastest=2./(Nf+1.);
slowest=2./(Ns+1.);
ER=zeros(len);
smooth=zeros(len);
c=zeros(len);
for i=n+1,len do
ER=math.abs(direction)/volatility;
smooth=ER*(fastest-slowest)+slowest;
c=smooth*smooth;
end
ama=zeros(len);
ama[n]=PRICE[n];
for i=n+1,len do
ama=ama[i-1]+c*(PRICE-ama[i-1]);
end
return ama;
end
local n=10;
local Nf=2;
local Ns=30;
out =AMA(A,n,Nf,Ns); 这里我捆绑了通达信的5号dll。效果如图:
应用效果如下,这里我用于上证指数(数据截止2021年8月10日),选择的“主图叠加”,可以看出,KAMA对于趋势跟踪得相当完美:
这里Lua版的计算结果和JS版的效果完全一样。二者语法也相当接近,都能很好的完成计算。当然Lua脚本的计算性能要更好,因为Luajit很强大。
JS版的见这篇:
<a href="http://zhuanlan.zhihu.com/p/398442806" data-draft-node="block" data-draft-type="link-card" data-image="http://pic2.zhimg.com/v2-12cbfbe6d5aaf2f531db317d33ea9d3d_ipico.jpg" data-image-width="800" data-image-height="800" class="internal">tonyblackwhite:通达信dll之JavaScript版考夫曼自适应均线需要进一步指出的是,本文的算法结果与TA-lib的卡夫曼自适应均线的计算结果完全一致。
但是这里为了demo,算法基本是由伪代码直译过来的,没有加入任何优化,因此性能应该是不如TA-lib的,但是在通达信上的测试表明,做分析完全够用了,没有出现性能不够卡顿情况。
当然,不怕麻烦,完全可以直接用C++调用TA-lib,然后制作通达信dll指标。
当然Luajit有ffi,lua有cffi,二者都可以直接调用TA-lib的dll,也很方便。Lua语言本来就是个C语言的调包侠。有兴趣可以私我或者加Q:2795035196。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|