以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  关于将ENTERBARS作为参数引用公式多时候出现错误  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=86638)

--  作者:KintRC2080
--  发布时间:2015/10/26 21:18:47
--  关于将ENTERBARS作为参数引用公式多时候出现错误
公式A:

input:length(1,1,1000,1);
RangeHigh:=HHV(High,length);

公式B:

……

RangeH:=stkindi(\'\',\'公式A.RangeHigh(\' & NUMTOSTR(ENTERBARS(),0) & \')\',0,6);

……

提示错误如下:
你当前引用公式过多,超过了50个限制,过多的数量多引用会导致内存占用增大……

其中错误提示中第三点的可能是引用公式的过程使用了序列变量参数,此时请使用常数变量参数。

请问ENTERBARS是序列变量? 那么怎么将ENTERBARS转化为常量参数? 谢谢!

--  作者:KintRC2080
--  发布时间:2015/10/26 21:23:03
--  
图片点击可在新窗口打开查看

不知道为什么无法对主题进行编辑,只能回帖补充一张错误截图,请帮忙解答,谢谢!

--  作者:KintRC2080
--  发布时间:2015/10/26 21:28:04
--  
另外再补充一下,我尝试过不传递ENTERBARS()这个变量,而是写了一个常数进去,就一切正常,那证明问题是出在ENTERBARS()上了。

公式A:

input:length(1,1,1000,1);
RangeHigh:=HHV(High,length);

公式B:

……

RangeH:=stkindi(\'\',\'公式A.RangeHigh(10)\',0,6);

……

--  作者:KintRC2080
--  发布时间:2015/10/26 23:17:01
--  
简单的说,我的想法是将交易系统分模块开发,公式A就是动态止盈模块,一个很简单的动态止盈策略:开仓后最高价回撤3*ATR离场。 

现在的问题是我要将开仓后的周期数传递到动态止盈模块,否者无法得到开仓后的最高价。

这个策略只是其中一个,我有几个动态止损策略,有部分会用到开仓后的周期数,如果不解决,那么就无法模块化开发,无法传递重要参数。

请大神帮忙解答。谢谢!


--  作者:jinzhe
--  发布时间:2015/10/27 9:04:46
--  

1const(enterbars)

 

将enterbars转化成常数

 

2直接用enterbars系统会在引用时重复计算enterbars的值,而你赋值成其他变量之后就不会


--  作者:KintRC2080
--  发布时间:2015/10/27 10:30:12
--  
首先感谢jinzhe大神的答复。


我按照你说的进行修改,出现了问题。

公式的当前运行模式是:逐K线计算

编译时候出错,提示:“未定义的函数:CONST该函数在当前模式中不被支持,请选择序列计算模式”



我尝试将运行模式修改为:序列计算

编译时也不通过,错误提示为:“你当前使用了图标交易系统函数,交易系统函数只有在逐K线模式才能正常工作,系统将自动切换到逐周期模式”


由于运行模式的问题,还是无法编译成功,请大神帮忙解答,谢谢!

--  作者:jinzhe
--  发布时间:2015/10/27 10:45:17
--  
所以这个就限定了enterbars不能转化成常数,而需要先赋值给变量才行
--  作者:KintRC2080
--  发布时间:2015/10/27 13:12:31
--  
以下是引用jinzhe在2015/10/27 10:45:17的发言:
所以这个就限定了enterbars不能转化成常数,而需要先赋值给变量才行
赋值给变量也不行啊,譬如:
a:=enterbars;
b:=const(a);
编译时候一样出错,提示:“未定义的函数:CONST该函数在当前模式中不被支持,请选择序列计算模式”。现在的问题是const不能用在逐周期的模式下面呀。 而问题不是在于是否可以直接使用 const(enterbars)这样的语句。 现在根本在于如果按照你的方式,加上const的语句取常数,那么只能用于序列模式,逐周期模式无效。

[此贴子已经被作者于2015/10/27 13:13:38编辑过]

--  作者:KintRC2080
--  发布时间:2015/10/27 13:18:13
--  
另外,我也尝试了一下其他的思路。

1、譬如先定义一个常数变量。 

a:=1;
a:=enterbars;

按照道理来说,a本身就是一个常数变量,但是传递a到引用的函数,一样会出现:
提示错误如下:
你当前引用公式过多,超过了50个限制,过多的数量多引用会导致内存占用增大……

2、再换一个思路,取序列变量的一个值。
a:=1;
a:=ref(enterbars,1);
这样传递也同样会出现上面的错误,无法编译完成。

现在我需要的是 : 将开仓以后的周期数传递给引用的公式,请问是否有其他的思路可以解决? 不一定非要用序列参数 enterbars,我现在只是希望能够传递开仓周期数。请大神帮忙解答。

--  作者:jinzhe
--  发布时间:2015/10/27 13:23:29
--  

我本地测试的结果并没有错误,

你是不是把引用放在循环里面了,还是引用套引用了


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