以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://222.73.7.161/bbs/index.asp) -- 公式模型编写问题提交 (http://222.73.7.161/bbs/list.asp?boardid=4) ---- [求助]stkindi的参数传送问题 (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=172272) |
-- 作者:mcza30 -- 发布时间:2019/10/2 23:16:01 -- [求助]stkindi的参数传送问题 我在测试stkindi的参数传送,代码如下 //tp:=12345678;//ok tp:=c; //error m1:=NUMTOSTR(tp,0); y:=stkindi(\'\',\'sub02.aa(\'&m1&\')\',0,1,0); 当tp为常数时传送正常,tp为c时报错“公式过多,超过50个” 请教如何理解“公式过多,超过50个”这个信息? 这里“公式”是指什么? |
-- 作者:FireScript -- 发布时间:2019/10/8 9:01:30 -- 就是指跨周期调用的那个公式 ,大致意思就是进行的跨周期调用的次数太多了。 你这里是个特殊情况。系统序列变量如 O H L C 不能这样作为参数传递进去,否则K线数多了就会出现这个报错。序列变量是特殊的变量,差不多相当于一个数组,一组数据,这就会导致在每个K上都会被视作参数不一样的跨周期调用了。从而导致上面的报错。
|
-- 作者:mcza30 -- 发布时间:2019/10/9 9:41:03 -- 谢谢超级版主FireScript! 我想跨周期引用交易系统函数,公式2引用公式1。 程序如下,但是没有结果。请版主帮我看看有什么问题。谢谢 //------sub1008公式1 input: cmd(0,0,10,1); if cmd=1 then sell(1,0,marketr); //平多 if cmd=2 then sellshort(1,0,marketr);//平空 aa:=holding; //------------公式2 T1:=TIME>=140000 and TIME<141000;//开多时间 T2:=TIME>=142000; //平多时间 T3:=TIME>=143000 and TIME<144000;//开空时间 T4:=TIME>=145000; //平多时间 buy(T1 and holding=0,1,MARKETR); if T2 then y1:stkindi(\'\',\'sub1008.aa(1)\',0,0,0); buyshort(T3 and holding=0,1,MARKETR); if T4 then y2:stkindi(\'\',\'sub1008.aa(2)\',0,0,0); |
-- 作者:FireScript -- 发布时间:2019/10/9 9:49:12 -- 第一个公式有问题。holding是虚拟持仓,在图表策略里面如果没有开仓语句,这个holding初始是0. 你公式1只有平仓语句,holding只会是0 此外还需要注意的就是 一般被引用的变量 最好用 “:” 定义 而不是用“:=”定义。 |
-- 作者:FireScript -- 发布时间:2019/10/9 9:56:19 -- 然后就是第二个公式里面: T1:=TIME>=140000 and TIME<141000;//开多时间 T2:=TIME>=142000; //平多时间 T3:=TIME>=143000 and TIME<144000;//开空时间 T4:=TIME>=145000; //平多时间 time返回的一般默认是金字塔时间: 你上面代码里面 如果你想表达北京时间的这个区间,你可能要改成金字塔时间的表达方式,也就是加上四个小时。 |
-- 作者:mcza30 -- 发布时间:2019/10/9 11:28:49 -- 用lk:time; 显示时间,返回结果与金字塔时间是一致的。 我的电脑上没有你图片上括号显示部分,仅显示北京时间。 |
-- 作者:mcza30 -- 发布时间:2019/10/9 13:02:13 -- 我作了修改,不用时间函数,如下: //------sub1008公式1 aa:sell(1,0,marketr); //平多 //------------公式2 T1:=count(c>o,2)=2; buy(T1 and holding=0,1,MARKETR); //开多 T2:=count(c<o,2)=2; //sell(T2 and holding>0,0,marketr); //ok if T2 then y1:stkindi(\'\',\'sub1008.aa\',0,0,0); //跨周期引用没有反应 不知哪里出错,请版主指教,谢谢。 |
-- 作者:FireScript -- 发布时间:2019/10/9 13:10:44 -- 能引用过来,但是值应该恒为0。 这句代码 你直接加载看下就知道了。恒为0的。 aa:sell(1,0,marketr); //平多 就光裸一个平仓语句 aa只会是0.
[此贴子已经被作者于2019/10/9 13:12:16编辑过]
|
-- 作者:mcza30 -- 发布时间:2019/10/9 13:45:50 -- aa我是作为一个引用标号,没有指定意义。 问题主要是sell(1,0,marketr); 没有平多操作,实盘和回测都没有动作。 |
-- 作者:FireScript -- 发布时间:2019/10/9 14:00:51 -- 图表策略 上没有开仓语句,这个平多是无论如何都不会触发的。图表策略加载在图表上,有开才能有平。图表策略在K线图上的信号是基于K线数据 和策略代码逻辑 进行的模拟下单 所产生的。你如果只写一个平仓语句是不行的。 |