以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  金字塔软件问题提交  (http://222.73.7.161/bbs/list.asp?boardid=2)
----  后台交易问题  (http://222.73.7.161/bbs/dispbbs.asp?boardid=2&id=11102)

--  作者:smarter
--  发布时间:2012/4/16 17:00:35
--  后台交易问题

请问:下列模型, 在后台交易时, TB为什么总是1  ? 如何才能累加? 谢谢!

 

VARIABLE:tb=0;
input:KCS(1,1,100,1),KN(3,1,15,1),M(1,0,30,1);

资产:ASSET,NOAXIS,LINETHICK0;
持仓:HOLDING,LINETHICK0;
DP:=MINDIFF;

NN:BARSLAST(DATE>REF(DATE,1));
tt0:=IF(10000*INTPART(CLOSETIME(0)/10000)=CLOSETIME(0),CLOSETIME(0)-5500,CLOSETIME(0)-1500);
tt2:=(time>tt0+1500-500);

tb:=VALUEWHEN(tb=Kn,0);
BK:=ref(cross(ma(c,5),ma(c,10)),1);
SK:=ref(cross(ma(c,10),ma(c,5)),1);
BK1:=ref(cross(ma(c,3),ma(c,8)),1);
SK1:=ref(cross(ma(c,8),ma(c,3)),1);

tSELLSHORT(BK1 and tholding<0,KCS,lmt,DYNAINFO(21)+M*DP),ALLOWREPEAT;
SELLSHORT(BK1 and holding<0,holding,limitr,O+M*DP);

tSELL(SK1 and tholding>0,KCS,lmt,DYNAINFO(20)-M*DP),ALLOWREPEAT;
SELL( SK1 and holding>0,holding,limitr,O-M*DP);
tb:=VALUEWHEN(tb=Kn,0);

if time>92500 and time<145000 and bk and holding>=0 and not(date>ref(date,1)) and tholding<Kn*KCS then begin
tBUY(1,KCS,lmt,DYNAINFO(21)+M*DP),ALLOWREPEAT;
tb:=tb+1;
SLEEP(250);
end
BUY(time>92500 and time<145000 and BK and holding>=0 and not(date>ref(date,1)),KN*KCS,limitr,O+M*DP);

if time>92500 and time<145000 and SK and tholding<=0 and not(date>ref(date,1)) and tb<Kn then begin
tBUYSHORT(1,KCS,lmt,DYNAINFO(20)-M*DP),ALLOWREPEAT;
tb:=tb+1;
SLEEP(250);
end
BUYSHORT(time>92500 and time<145000 and SK and holding<=0 and not(date>ref(date,1)),KN*KCS,limitr,O-M*DP);

if tb=Kn-1 then SLEEP(300);

if tb>0 then begin
DEBUGFILE(\'D:\\file001.TXT\',\'TB:\'+NUMTOSTR(tb,1)+\'   虚盈:\'+NUMTOSTR(OPENPROFIT,1)+\'  今持:\'+NUMTOSTR(TODAYHOLDING,0)+\',持仓:\'+NUMTOSTR(THOLDING,0)+\'  定价:\'+NUMTOSTR(C,0)+\'/ \'+NUMTOSTR(C,0)+\'  虚持:\'+NUMTOSTR(HOLDING,0)+\',虚type:\'+NUMTOSTR(TYPE(1),0)+\' type: %.0f\',tTYPE(1));
end
tb0:tb;
IF tt2  THEN BEGIN
tSELL(HOLDING>0,holding,lmt,DYNAINFO(20)-M*DP);
tSELLSHORT(HOLDING<0,holding,lmt,DYNAINFO(21)+M*DP);
收多:SELL(HOLDING>0,holding,limitr,C-M*DP);
收空:SELLSHORT(HOLDING<0,holding,limitr,C+M*DP);
END

总数: TOTALTRADE,LINETHICK0;
盈利:NUMWINTRADE,LINETHICK0;
胜率:ROUNDS(100*PERCENTWIN,1),LINETHICK0;
连亏:MAXSEQLOSS,LINETHICK0;
连盈:MAXSEQWIN,LINETHICK0;

 


--  作者:jinzhe
--  发布时间:2012/4/16 17:13:19
--  
后台和图表写一起了?
--  作者:admin
--  发布时间:2012/4/16 17:25:49
--  

使用金字塔的一个新超全局变量

 

GOLBALVARIABLE:tb=0;


--  作者:smarter
--  发布时间:2012/4/16 17:44:04
--  呼叫阿火版主

改成:

GLOBALVARIABLE:tb=0;

 

在后台交易时, TB为还是1 , 请模拟交易, 看一下文件输出就知, 谢谢!

 

是不是BUG ?


--  作者:admin
--  发布时间:2012/4/16 18:39:29
--  

首先确认是否升级到2.86,

此外,初步看了你的代码

tb:=VALUEWHEN(tb=Kn,0);

这类语句,你在后台不断工作时会有不断被重新赋值的嫌疑


--  作者:金字塔
--  发布时间:2012/4/16 19:22:01
--  
以下是引用admin在2012-4-16 18:39:29的发言:

首先确认是否升级到2.86,

此外,初步看了你的代码

tb:=VALUEWHEN(tb=Kn,0);

这类语句,你在后台不断工作时会有不断被重新赋值的嫌疑

 

确认已经升级到2.86

 

Kn值为3

TB初始值为0,开仓一次,累计加1,实为开仓次数,最大为3

当TB等于3,重新赋值0

 

请教admin, 有什么办法达到这个目的


--  作者:admin
--  发布时间:2012/4/16 19:26:37
--  

别人很难在短期理解你的代码的,可否自己先用DEBUGFILE函数,盘中自行调试一下,看看关键点在哪个位置?

这样再提出问题,我们也有针对性进行处理回复


--  作者:admin
--  发布时间:2012/4/16 19:50:56
--  

提供一个简单的思路,再所有多TB变量赋值的地方,都加上DEBUGFILE记录标志,然后看运行的TB变量变化,发现问题的地方,之前的变量再依次进行记录跟踪,很容易就能最后找到问题


--  作者:smarter
--  发布时间:2012/4/17 18:45:04
--  
以下是引用admin在2012-4-16 19:50:56的发言:

提供一个简单的思路,再所有多TB变量赋值的地方,都加上DEBUGFILE记录标志,然后看运行的TB变量变化,发现问题的地方,之前的变量再依次进行记录跟踪,很容易就能最后找到问题

GLOBALVARIABLE:tb1=0,tb=0,ts=0;
input:KCS(1,1,100,1),KN(3,1,15,1),M(1,0,30,1);
资产:ASSET,NOAXIS,LINETHICK0;
持仓:HOLDING,LINETHICK0;
DP:=MINDIFF;
tt0:=IF(10000*INTPART(CLOSETIME(0)/10000)=CLOSETIME(0),CLOSETIME(0)-5500,CLOSETIME(0)-1500);
tt2:=(time>tt0+1500-500);
BK:=ref(cross(ma(c,5),ma(c,10)),1);
SK:=ref(cross(ma(c,10),ma(c,5)),1);
BK1:=ref(cross(ma(c,3),ma(c,8)),1);
SK1:=ref(cross(ma(c,8),ma(c,3)),1);

tSELLSHORT(BK1 and tholding<0,KCS,lmt,DYNAINFO(21)+M*DP),ALLOWREPEAT;
SELLSHORT(BK1 and holding<0,holding,limitr,O+M*DP);

tSELL(SK1 and tholding>0,KCS,lmt,DYNAINFO(20)-M*DP),ALLOWREPEAT;
SELL(SK1 and holding>0,holding,limitr,O-M*DP);

if time>91500 and bk and holding>=0 and not(date>ref(date,1)) and tb<Kn then begin
tBUY(1,KCS,lmt,DYNAINFO(21)+M*DP),ALLOWREPEAT;
tb:=tb+1;
ts:=ts+1;
DEBUGFILE(\'D:\\file005.TXT\',\'多TB:\'+NUMTOSTR(tb,0)+\',持仓:\'+NUMTOSTR(THOLDING,0)+\'  定价:\'+NUMTOSTR(C,2)+\'/   虚持:\'+NUMTOSTR(HOLDING,0)+\',ts:\'+NUMTOSTR(ts,0)+\' Kn: %.0f\',Kn);
SLEEP(250);
end
if NOT(BK) then begin
//DEBUGFILE(\'D:\\file005.TXT\',\'     TB=0  :\'+NUMTOSTR(tb,0)+\',持仓:\'+NUMTOSTR(THOLDING,0)+\'  定价:\'+NUMTOSTR(C,2)+\'/   虚持:\'+NUMTOSTR(HOLDING,0)+\',虚type:\'+NUMTOSTR(TYPE(1),0)+\' Kn: %.0f\',Kn);
tb:=0;
end
BUY(time>91500 and BK and holding>=0 and not(date>ref(date,1)),KN*KCS,limitr,O+M*DP);

if time>91500 and SK and tholding<=0 and not(date>ref(date,1)) and tb1<Kn then begin
tBUYSHORT(1,KCS,lmt,DYNAINFO(20)-M*DP),ALLOWREPEAT;
tb1:=tb1+1;
ts:=ts+1;
DEBUGFILE(\'D:\\file005.TXT\',\'空TB1:\'+NUMTOSTR(tb1,0)+\',持仓:\'+NUMTOSTR(THOLDING,0)+\'  定价:\'+NUMTOSTR(C,2)+\'/   虚持:\'+NUMTOSTR(HOLDING,0)+\',ts:\'+NUMTOSTR(ts,0)+\' Kn: %.0f\',Kn);
SLEEP(250);
end
if NOT(SK) then begin
//DEBUGFILE(\'D:\\file005.TXT\',\'     TB1=0  :\'+NUMTOSTR(tb,0)+\',持仓:\'+NUMTOSTR(THOLDING,0)+\'  定价:\'+NUMTOSTR(C,2)+\'/   虚持:\'+NUMTOSTR(HOLDING,0)+\',虚type:\'+NUMTOSTR(TYPE(1),0)+\' Kn: %.0f\',Kn);
tb1:=0;
end
BUYSHORT(time>91500 and SK and holding<=0 and not(date>ref(date,1)),KN*KCS,limitr,O-M*DP);
按您的意思,  file005的结果为:

 

2012-04-17 18:31:05.546    多TB:1,持仓:0  定价:1370.75/   虚持:0,ts:4753 Kn: 3
2012-04-17 18:31:05.671    多TB:1,持仓:0  定价:1370.75/   虚持:0,ts:5698 Kn: 3
2012-04-17 18:31:06.234    多TB:1,持仓:0  定价:1370.75/   虚持:0,ts:5726 Kn: 3
2012-04-17 18:31:06.250    多TB:1,持仓:0  定价:1370.75/   虚持:0,ts:4781 Kn: 3
2012-04-17 18:31:06.718    多TB:1,持仓:1  定价:1370.75/   虚持:0,ts:4809 Kn: 3
2012-04-17 18:31:06.937    多TB:1,持仓:1  定价:1370.75/   虚持:0,ts:5754 Kn: 3
2012-04-17 18:31:07.359    多TB:1,持仓:2  定价:1370.75/   虚持:0,ts:4837 Kn: 3
2012-04-17 18:31:07.609    多TB:1,持仓:2  定价:1370.75/   虚持:0,ts:5782 Kn: 3
2012-04-17 18:31:07.921    多TB:1,持仓:3  定价:1370.75/   虚持:0,ts:4865 Kn: 3
2012-04-17 18:31:08.171    多TB:1,持仓:3  定价:1370.75/   虚持:0,ts:5810 Kn: 3
2012-04-17 18:31:08.484    多TB:1,持仓:4  定价:1370.75/   虚持:0,ts:4893 Kn: 3
2012-04-17 18:31:09.234    多TB:1,持仓:4  定价:1370.75/   虚持:0,ts:4921 Kn: 3
2012-04-17 18:31:09.437    多TB:1,持仓:4  定价:1370.75/   虚持:0,ts:5838 Kn: 3
2012-04-17 18:31:09.828    多TB:1,持仓:4  定价:1370.75/   虚持:0,ts:4949 Kn: 3
2012-04-17 18:31:10.437    多TB:1,持仓:6  定价:1370.75/   虚持:0,ts:4977 Kn: 3
2012-04-17 18:31:10.671    多TB:1,持仓:6  定价:1370.75/   虚持:0,ts:5866 Kn: 3
2012-04-17 18:31:11.015    多TB:1,持仓:6  定价:1370.75/   虚持:0,ts:5005 Kn: 3
2012-04-17 18:31:11.625    多TB:1,持仓:7  定价:1370.75/   虚持:0,ts:5033 Kn: 3
2012-04-17 18:31:11.859    多TB:1,持仓:7  定价:1370.75/   虚持:0,ts:5894 Kn: 3
2012-04-17 18:31:12.140    多TB:1,持仓:7  定价:1371.00/   虚持:0,ts:5061 Kn: 3
2012-04-17 18:31:12.390    多TB:1,持仓:7  定价:1371.00/   虚持:0,ts:5922 Kn: 3
2012-04-17 18:31:12.625    多TB:1,持仓:8  定价:1371.00/   虚持:0,ts:5089 Kn: 3
2012-04-17 18:31:13.375    多TB:1,持仓:9  定价:1371.00/   虚持:0,ts:5117 Kn: 3
2012-04-17 18:31:13.625    多TB:1,持仓:9  定价:1371.00/   虚持:0,ts:5950 Kn: 3
2012-04-17 18:31:14.562    多TB:1,持仓:10  定价:1371.00/   虚持:0,ts:5145 Kn: 3
2012-04-17 18:31:14.812    多TB:1,持仓:10  定价:1371.00/   虚持:0,ts:5978 Kn: 3
2012-04-17 18:31:15.109    多TB:1,持仓:10  定价:1371.00/   虚持:0,ts:5173 Kn: 3
2012-04-17 18:31:15.359    多TB:1,持仓:10  定价:1371.00/   虚持:0,ts:6006 Kn: 3
2012-04-17 18:31:15.593    多TB:1,持仓:11  定价:1371.00/   虚持:0,ts:5201 Kn: 3
2012-04-17 18:31:16.375    多TB:1,持仓:12  定价:1371.00/   虚持:0,ts:5229 Kn: 3
2012-04-17 18:31:16.515    多TB:1,持仓:12  定价:1371.00/   虚持:0,ts:6034 Kn: 3
2012-04-17 18:31:17.156    多TB:1,持仓:13  定价:1370.75/   虚持:0,ts:5257 Kn: 3
2012-04-17 18:31:17.406    多TB:1,持仓:13  定价:1370.75/   虚持:0,ts:6062 Kn: 3
2012-04-17 18:31:17.562    多TB:1,持仓:13  定价:1370.75/   虚持:0,ts:5285 Kn: 3

请指教!  谢谢!

 

 


--  作者:阿火
--  发布时间:2012/4/17 18:57:31
--  

你用的是什么版本呀?

另外,你总是把tb赋值为0,再累加1 ,输出结果自然一直为1了

 

tb:=tb+1;
ts:=ts+1;
DEBUGFILE(\'D:\\file005.TXT\',\'多TB:\'+NUMTOSTR(tb,0)+\',持仓:\'+NUMTOSTR(THOLDING,0)+\'  定价:\'+NUMTOSTR(C,2)+\'/   虚持:\'+NUMTOSTR(HOLDING,0)+\',ts:\'+NUMTOSTR(ts,0)+\' Kn: %.0f\',Kn);
SLEEP(250);
end
if NOT(BK) then begin
//DEBUGFILE(\'D:\\file005.TXT\',\'     TB=0  :\'+NUMTOSTR(tb,0)+\',持仓:\'+NUMTOSTR(THOLDING,0)+\'  定价:\'+NUMTOSTR(C,2)+\'/   虚持:\'+NUMTOSTR(HOLDING,0)+\',虚type:\'+NUMTOSTR(TYPE(1),0)+\' Kn: %.0f\',Kn);
tb:=0;

END

 

NOT(BK)此条件在最后输出前应该成立过。导致TB被赋值为0,然后重新累加1后才记录

[此贴子已经被作者于2012-4-17 19:02:13编辑过]