以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (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 -- 必然不是,后台不是这么简单的 |