以文本方式查看主题
- 金字塔客服中心 - 专业程序化交易软件提供商 (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)#;
|