我想得到在某个条件触发后一直到目前为止的时间,类似BARSLAST、SUMBARS这两个函数的功能,但是这两个函数还是有些不太好用。
我想这样:某个条件达成后就开始打开计时开关,这期间即使再有同样的条件达成则忽略不计,一直到我某个条件终止后就完成此波计时。
请各位版主大人帮个忙儿。

[此贴子已经被作者于2018/5/17 10:38:52编辑过]
试了下效果还行。条件a,b 你重新定义下。为了方便肉眼观察,我把a,b全输出在K上了。

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

variable:markA:=0,markB:=0;
condA:c>o+10;
condB:c<o-10;
if CONDA then DRAWTEXT(1,c,'A');
if CONDB then DRAWTEXT(1,c,'B');
len:0;//记录a b 条件跨度的值,b触发前为0
if condA and markA=0 and not(condB) then markA:=1;
x:=BARSLAST(markA=0)-1;//这里需要减1,并且barslast不能在if下因此放在外面
if condB and markA=1 then
begin
markA:=0;//触发条件后重置markA值。
len:=x;
end
if condA and condB and markA=0 then len=0;//这是一种特殊情况,a b 同时触发在一个K上。
感谢。
不过,似乎不对哦。我需要得到的是在A和B之间的某点(设为C点吧)即A到C的时间。当B发生后,就全部恢复平常态。可您的这一程序,只有B发生了才计算这个时间吧?
variable:markA:=0,markB:=0;
condA:c>o+10;
condB:c<o-10;
if CONDA then DRAWTEXT(1,c,'A');
if CONDB then DRAWTEXT(1,c,'B');
len:0;//记录a b 条件跨度的值,b触发前为0
if condA and markA=0 and not(condB) then markA:=1;
x:=BARSLAST(markA=0)-1;//这里需要减1,并且barslast不能在if下因此放在外面
if markA=1 then len:=x;
if condB and markA=1 then
begin
markA:=0;//触发条件后重置markA值。
//len:=x;
end
if condA and condB and markA=0 then len=0;//这是一种特殊情况,a b 同时触发在一个K上。
略做修改即可。主要是掌握这种处理方式。