以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  策略写好,但是无法回测,请教解决方案  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=48899)

--  作者:mikebike
--  发布时间:2013/2/25 23:28:49
--  策略写好,但是无法回测,请教解决方案
我的策略是这样的。

〔逐K线模式〕下
一开始有部分代码,变量、序列变量赋值等等。
然后进入后面的运算时候,因为运算过度复杂,所以设定成如下:

IF NOT(ISLASTBAR) THEN EXIT;
……后面接余下的代码。
包含这段,买卖模版
if holding=0 then begin 
6     //多头开仓 
7     if tradingtime and enlongcond then begin 
8         buy(1,1,limitr,close); 
9         maxprofit:=0; 
10     end 
11      
12     //空头开仓 
13     if tradingtime and enshortcond then begin 
14         buyshort(1,1,limitr,close); 
15         maxprofit:=0; 
16     end 
17 end 
18 
19 if holding>0 then begin 
20     //多头平仓 
21     if exlongcond then 
22         sell(1,holding,limitr,close); 
23 
24     //多头收盘平仓 
25     if not(tradingtime) then 
26         sell(1,holding,limitr,close); 
27 
28     //盈亏计算 
29     if enterbars>0 then begin 
30         win:=(c-enterprice)/enterprice*100; 
31         if win>maxprofit then 
32             maxprofit:=win; 
33         win2:=(maxproift-win)/maxprofit*100; 
34     end 
35 
36     //多头初始止损 
37     if win<-2 then 
38         sell(1,holding,limitr,close); 
39 
40     //多头利润止盈 
41     if win>4 then 
42         sell(1,holding,limitr,close); 
43      
44     //多头回撤止盈 
45     if win2>60 and openprofit>0 then 
46         sell(1,holding,limitr,close); 
47 end 
48 
49 if holding<0 then begin 
50     //空头平仓 
51     if exshortcond then 
52         sellshort(1,holding,limitr,close); 
53 
54     //空头收盘平仓 
55     if not(tradingtime) then 
56         sellshort(1,holding,limitr,close); 
57      
58     //盈亏计算 
59     if enterbars>0 then begin 
60         win:=(enterprice-c)/enterprice*100; 
61         if win>maxprofit then 
62             maxprofit:=win; 
63         win2:=(maxprofit-win)/maxprofit*100; 
64     end 
65 
66     //空头初始止盈 
67     if win<-2 then 
68         sellshort(1,holding,limitr,close); 
69 
70     //空头利润止盈 
71     if win>4 then 
72         sellshort(1,holding,limitr,close); 
73      
74     //空头回撤止盈 
75     if win2>60 and openprofit>0 then 
76         sellshort(1,holding,limitr,close); 
77 end 
78 


现在用〔训练模式〕回溯到过去的历史里看,满足条件的情况下,买卖信号确实发出了。
但是遇到如下问题:
1、当某时刻,第一次满足我的买入条件,于是策略确实提示买入了,但是到了下一根K棒,因为仍然满足我的买入条件,策略继续在提示买入。似乎完全不记得我已经在前一根K棒已经买入了?
    这是不是和我使用了IF NOT(ISLASTBAR) THEN EXIT;有关系呢?
    为什么前面的已经持仓未被记住呢?
2、可能因为1的缘故,在历史数据回测时候,报告中没有任何一笔交易……因此无法回测了……

请高手稍微指导一下这个菜鸟级的问题。
[此贴子已经被作者于2013-2-25 23:29:43编辑过]

--  作者:admin
--  发布时间:2013/2/25 23:37:29
--  

图表的程序化交易的运行逻辑是会不断刷新K线信号的,当然不会记住你之前的状态。

因此你是不能用IF NOT(ISLASTBAR) THEN EXIT;这样的语法在图表程序化中使用的


--  作者:mikebike
--  发布时间:2013/2/25 23:43:46
--  
谢谢admin。

(如果不用IF NOT(ISLASTBAR) THEN EXIT,该策略的运算量太大了)
那么这种策略要在历史K线数据中回测,有啥其他办法吗?

--  作者:admin
--  发布时间:2013/2/25 23:47:38
--  
没有办法的,只能是慢慢等他测试了
--  作者:mikebike
--  发布时间:2013/2/27 8:59:46
--  
继续请教admin,
IF NOT(ISLASTBAR) THEN EXIT 这样的语句,即使在实时行情下运行(即白天行情在进行的时候),也是不允许用在程序化交易中的,包括后台程序化执行,是吧?

--  作者:jinzhe
--  发布时间:2013/2/27 9:28:18
--  

由于运行机制的不同,该语句不能用于图表,但是能用在后台上


--  作者:mikebike
--  发布时间:2013/2/27 10:35:46
--  
谢谢您。
继续请教:
后台程序交易,是不是就是相当于挂接着实时进来的数据进行交易?并且用上THOLDING,就可以记录是否开平仓过了,对吗?


--  作者:jinzhe
--  发布时间:2013/2/27 10:39:51
--  
是的。能够检测到实际的真实持仓,而不是图表的虚拟持仓
--  作者:mikebike
--  发布时间:2013/2/27 10:41:41
--  
谢谢,对于现有代码来说,只需把buy改成tbuy,这几个买卖、平仓的命令修改下,就可以直接放在后台模式下运行了,是吧?
--  作者:jinzhe
--  发布时间:2013/2/27 10:56:49
--  
必然不是,后台不是这么简单的