以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  如何求得某笔开仓历时  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=6213)

--  作者:董小球
--  发布时间:2011/4/19 15:33:51
--  如何求得某笔开仓历时

请问各位大大,如何求得某一笔开仓的开仓历时?

目的是判断某笔成交后到底是持有了多长时间!

 

我想出来了一个算法,但是在时间这一句有点问题,代码我发醋来看看!

 

//Q用来记录所剩持仓中最老的持仓单在数组中的位置,J记录数组坐标,I记录当时持仓量用于判断;
variable:X[1000]=0,I=0,J=1,Q=1,X2[1000]=0,I2=0,J2=1,Q2=1;


//买持
A1:TBUYHOLDINGEX(\'\' ,\'\' ,0 );
IF A1>I THEN BEGIN
X[J]:=TIME0;
J:=J+1;
I:=A1;
END
FF:TIME0;
HH:X[1];


//如果持仓时间超过3分钟则平仓,这里为防止市价强平不成交,应配合交易设置中的“未成交则撤单报单”来使用
IF (TIME0-X[Q])>=180 THEN BEGIN
 TSELL(1,1,MKT);
 Q:=Q+1;
END

 

//卖持
A2:=TSELLHOLDINGEX(\'\' ,\'\' ,0 );
IF A2>I2 THEN BEGIN
X2[J2]:=TIME0;
J2:=J2+1;
I2:=A2;
END

 

//如果持仓时间超过3分钟则平仓,这里为防止市价强平不成交,应配合交易设置中的“未成交则撤单报单”来使用
IF (TIME0-X2[Q2])>=180 THEN BEGIN
 TSELLSHORT(1,1,MKT);
 Q2:=Q2+1;
END

 

奇怪不知道为何(TIME0-X[Q])>=180 这一句是恒不成立的,因为X[Q]总是实时更新的,并非算法中所预想的那样(判断持仓有变化则记录一个时间到数组中去),谁帮忙看看啊!!

[此贴子已经被作者于2011-4-22 13:55:46编辑过]

--  作者:阿火
--  发布时间:2011/4/19 16:32:46
--  

不是enterbars吗


--  作者:董小球
--  发布时间:2011/4/19 16:42:03
--  

我要求的是某一笔的 不是单单上次的

 

目的是为了计算每笔成交后的持有时间长度


--  作者:阿火
--  发布时间:2011/4/19 17:13:14
--  

哦。那就好的方法是 用全局变量indi记录每笔交易

variable:indi=0;

 

每次平仓后,indi累加一次

 

最后要调用那一笔交易,就再用barslast()

 

比如现在的indi=100,要调用第96次交易的开仓历史就用 aa:ref(enterbars,barslast(indi=96 and ref(indi,1)=95));

aa在程序的不同位置,可能会得到不同的结果,特别是在反手模型的时候

[此贴子已经被作者于2011-4-19 17:20:50编辑过]

--  作者:董小球
--  发布时间:2011/4/20 9:25:26
--  

要是有个这样的函数就好了

返回现有持仓中的每笔开仓距今的秒数
函数名(品种,序列号,多空方向,下单类型比如开仓还是平仓)


--  作者:董小球
--  发布时间:2011/4/21 15:33:19
--  

顶起来,我写了下代码 大家给看看


--  作者:董小球
--  发布时间:2011/4/22 13:55:16
--  

FF:TIME0;
HH:X[1];

FF的值一只增加是对的

但是HH的值,发现并没有把当时的time0赋值给数组中去,一直是最新的TIME0


--  作者:轮回
--  发布时间:2011/4/25 0:41:30
--  

A1:TBUYHOLDINGEX(\'\' ,\'\' ,0 );
IF A1>I THEN BEGIN

兄弟,这里并非(判断持仓有变化则记录一个时间到数组中去),而是只要满足TBUYHOLDINGEX(\'\' ,\'\' ,0 )后每TICK都计算一次.


--  作者:董小球
--  发布时间:2011/4/25 9:12:00
--  

哦 这样啊,我再价格计数器试试,多谢指教~