以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  序列指标在逐K下实现  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=164575)

--  作者:oroute
--  发布时间:2018/7/25 14:27:37
--  序列指标在逐K下实现


图片点击可在新窗口打开查看此主题相关图片如下:mxcp.jpg
图片点击可在新窗口打开查看

 

公式原型如上图,要涉及到引用自身的前值,以及前值的前值,,,在图形上的表现类似于均线,见下面截图,,,

 

下面蓝色字是序列模式下的代码(by风度),,,

===================================

runmode:1;//序列模式
FC:=CLOSE;
LLTv:=CLOSE;
A:=2/(30+1);
for i=3 to datacount  do begin
LLTv[i]:=(a-a^2/4)*FC[I]+(a^2/2)*FC[I-1]-(a-3*a^2/4)*FC[I-2]+2*(1-a)*LLTv[i-1]-(1-a)^2*LLTv[i-2];
end
LLT:LLTV;

===================================


图片点击可在新窗口打开查看此主题相关图片如下:oc45n)c}%2@8c)f1bkir4u.png
图片点击可在新窗口打开查看

 

 

——————————————————————————

序列模式下是可以写得出来的,这个不说了,我的问题是,怎么在逐K线模式下写出表现一样的代码,

我试过全局变量、数组、barpos控制等等,很多时候编译的时候没问题,但是不能正常显示或直接导致金字塔死去,,,

 

所以,到底怎样在逐K线模式下写出这个公式呢?!!!


--  作者:FireScript
--  发布时间:2018/7/25 14:53:01
--  
 逐K模式下用stkind去引用这个序列模式下的指标吧,引用的值是完全对齐的。按照那个原始思路 逐K上是无法实现这个公式的。逐K下循环次数太多,所以导致你说的卡死现象。
[此贴子已经被作者于2018/7/25 14:55:48编辑过]

--  作者:oroute
--  发布时间:2018/7/25 15:08:34
--  
以下是引用FireScript在2018/7/25 14:53:01的发言:
 逐K模式下用stkind去引用这个序列模式下的指标吧,引用的值是完全对齐的。按照那个原始思路 逐K上是无法实现这个公式的。逐K下循环次数太多,所以导致你说的卡死现象。
[此贴子已经被作者于2018/7/25 14:55:48编辑过]

 

 

我之前是有个引用的思路,可是引用的情况下,参数优化也会很慢很慢吧,,,


--  作者:FireScript
--  发布时间:2018/7/25 15:11:25
--  
 没有对参数优化有多大影响的。相比之下,逐K下做那个循环带来的消耗更影响体验的。 我试了,跨周期引用那个指标的输出效果是一模一样的。

--  作者:马良
--  发布时间:2018/7/25 20:42:01
--  
如果你只是引用模型而不涉及任何跨周期,请使用#.#用户函数引用模式,可以更有效率
--  作者:oroute
--  发布时间:2018/7/25 21:37:19
--  
以下是引用马良在2018/7/25 20:42:01的发言:
如果你只是引用模型而不涉及任何跨周期,请使用#.#用户函数引用模式,可以更有效率

 

 

请具体解释一下#.#用户函数,这个在哪里能找到说明

 

我的问题不是挎周期,而是要把代码中的参数“A”纳入优化,,,

[此贴子已经被作者于2018/7/25 21:38:25编辑过]

--  作者:wenarm
--  发布时间:2018/7/26 10:25:18
--  

用户函数调用模式,方便客户进行模块化编程
用法:#用户函数.指标线(参数)#

示例:myllt:#Formula2.LLT#    //Formula2代表你序列下llt的公式名称


--  作者:fly
--  发布时间:2018/7/26 11:03:03
--  
用户函数调用模式,方便客户进行模块化编程
用法:#公式名称.指标线(参数)#

用户函数调用模式,方便客户进行模块化编程
用法:#用户函数.指标线(参数)#
例如:#test01.B1(20,45)#,表示调用test01指标的B1输出线,参数为20和45
使用用户函数模式与跨周期调用模式方法方式类似,但是比扩周期引用更加节省内存,提高运行效率
所属函数组:控制语句

假设一楼公式名称为myllt
runmode:1;//序列模式
FC:=CLOSE;
LLTv:=CLOSE;
A:=2/(30+1);
for i=3 to datacount  do begin
LLTv[i]:=(a-a^2/4)*FC[I]+(a^2/2)*FC[I-1]-(a-3*a^2/4)*FC[I-2]+2*(1-a)*LLTv[i-1]-(1-a)^2*LLTv[i-2];
end
LLT:LLTV;   //被引用的一定要是“:”形式的指标线

在另一个公式里,如何调用并像指标线一样显示到图上呢?
LLT1:#myllt.LLT#    //myllt标线LLT所在公式名称
[此贴子已经被作者于2018/7/26 11:13:50编辑过]

--  作者:oroute
--  发布时间:2018/7/28 1:41:12
--  
以下是引用fly在2018/7/26 11:03:03的发言:
用户函数调用模式,方便客户进行模块化编程
用法:#公式名称.指标线(参数)#

用户函数调用模式,方便客户进行模块化编程
用法:#用户函数.指标线(参数)#
例如:#test01.B1(20,45)#,表示调用test01指标的B1输出线,参数为20和45
使用用户函数模式与跨周期调用模式方法方式类似,但是比扩周期引用更加节省内存,提高运行效率
所属函数组:控制语句

假设一楼公式名称为myllt
runmode:1;//序列模式
FC:=CLOSE;
LLTv:=CLOSE;
A:=2/(30+1);
for i=3 to datacount  do begin
LLTv[i]:=(a-a^2/4)*FC[I]+(a^2/2)*FC[I-1]-(a-3*a^2/4)*FC[I-2]+2*(1-a)*LLTv[i-1]-(1-a)^2*LLTv[i-2];
end
LLT:LLTV;   //被引用的一定要是“:”形式的指标线

在另一个公式里,如何调用并像指标线一样显示到图上呢?
LLT1:#myllt.LLT#    //myllt标线LLT所在公式名称
[此贴子已经被作者于2018/7/26 11:13:50编辑过]

 

 

问题有两个,

1、这种#x.y#的写法比stkind要好是吗?我之前没试过这种,是的,不用跨周期

 

2、我在公式一“o-lltfd”里用序列模式输出了llt,但是代码行里的那个A不是定值30,想变成一个参数,然后在公式二里用stkind调用,类似

STKINDI(\'\',\'o-lltfd.llt(30)\',0,DATAPERIOD)

如果在公式二里再设定一个参数,比如TT,来用做参数优化,就会发现,当tt=30的时候,

STKINDI(\'\',\'o-lltfd.llt(tt)\',0,DATAPERIOD)和上面的输出是不一致的,图形区别很大。

以至于目前这个参数我没法优化,,,我不知道用#x.y#会不会有类似的问题

 

 


--  作者:FireScript
--  发布时间:2018/7/30 9:19:27
--  
 1.不跨周期的话,效率更高。

 2.你提到的stkind传参数的问题,是因为你传参数的方式不对。

参考:
若参数为数字变量,那么需要有个字符串转换的过程
s:=5;
m:=NUMTOSTR(s,0);//NUMTOSTR函数将数字转换到字符串,再带入变量中
vola:stkindi(\'if10\',\'ATR.ATR(\'&m&\')\',0,6,-1);//计算IF10合约的日线周期指标ATR的ATR指标线,传递参数m值为5。
//第2个参数\'\'里的是文本,由三部分组成:\'ATR.ATR(\'和m还有\')\',这三部分由两个连接符号&连接起来,实现对数值参数的文本传输。

3.#x.y#  这种方式可以直接传数值参数不需要按照2方式进行字符串转换 如下:
INPUT:N(5,1,100,1);
RESULT:#x.y(N)#;