就是指跨周期调用的那个公式 ,大致意思就是进行的跨周期调用的次数太多了。
你这里是个特殊情况。系统序列变量如 O H L C 不能这样作为参数传递进去,否则K线数多了就会出现这个报错。序列变量是特殊的变量,差不多相当于一个数组,一组数据,这就会导致在每个K上都会被视作参数不一样的跨周期调用了。从而导致上面的报错。
谢谢超级版主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);
第一个公式有问题。holding是虚拟持仓,在图表策略里面如果没有开仓语句,这个holding初始是0. 你公式1只有平仓语句,holding只会是0
此外还需要注意的就是 一般被引用的变量 最好用 “:” 定义 而不是用“:=”定义。
然后就是第二个公式里面:
T1:=TIME>=140000 and TIME<141000;//开多时间
T2:=TIME>=142000; //平多时间
T3:=TIME>=143000 and TIME<144000;//开空时间
T4:=TIME>=145000; //平多时间
time返回的一般默认是金字塔时间:

此主题相关图片如下:temp.png

你上面代码里面 如果你想表达北京时间的这个区间,你可能要改成金字塔时间的表达方式,也就是加上四个小时。
用lk:time;
显示时间,返回结果与金字塔时间是一致的。
我的电脑上没有你图片上括号显示部分,仅显示北京时间。
我作了修改,不用时间函数,如下:
//------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); //跨周期引用没有反应
不知哪里出错,请版主指教,谢谢。
能引用过来,但是值应该恒为0。

此主题相关图片如下:temp.png

这句代码 你直接加载看下就知道了。恒为0的。
aa:sell(1,0,marketr); //平多
就光裸一个平仓语句 aa只会是0.
[此贴子已经被作者于2019/10/9 13:12:16编辑过]
aa我是作为一个引用标号,没有指定意义。
问题主要是sell(1,0,marketr); 没有平多操作,实盘和回测都没有动作。
图表策略 上没有开仓语句,这个平多是无论如何都不会触发的。图表策略加载在图表上,有开才能有平。图表策略在K线图上的信号是基于K线数据 和策略代码逻辑 进行的模拟下单 所产生的。你如果只写一个平仓语句是不行的。