以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://www.weistock.com/bbs/list.asp?boardid=2)
----  代码顺序  (http://www.weistock.com/bbs/dispbbs.asp?boardid=2&id=173659)

--  作者:大豆0911
--  发布时间:2019/12/22 15:20:17
--  代码顺序

今天遇到了难以理解的问题,发现调整代码顺序会影响回测结果。。。。今天新加了一组开仓条件,发现必须放在某组止损条件之前,结果更好。逻辑上说不过去啊!循环读取开平仓和止损条件,按理说,代码的排列顺序不应该影响到结果啊。过去确实没有影响。

版主大神,这是为什么???


--  作者:zm71212302
--  发布时间:2019/12/23 3:12:35
--  
查看下逻辑指针是否存在问题,其次是变量名称是否有重复,还有是某些全局变量与局部变量产生的冲突。
--  作者:wenarm
--  发布时间:2019/12/23 8:21:18
--  

代码整体逻辑虽然是顺序结构,但是在整个循环执行中。你开平仓代码顺序调换,自然可能造成开平语句执行发生变化。

止盈止损一般都是需要在开平语句之后。例如:如果放在前面(并且存在仓位控制时),当第一次发生同一根k线的盈止损条件并且开平条件同时成立时,因为止盈止损在前,没有仓位可平,止盈止损无效,再进行开平,就会造成后面的代码执行结果与止盈止损在后面的结果不同


--  作者:大豆0911
--  发布时间:2019/12/23 11:48:46
--  
以下是引用zm71212302在2019/12/23 3:12:35的发言:
查看下逻辑指针是否存在问题,其次是变量名称是否有重复,还有是某些全局变量与局部变量产生的冲突。

谢谢版主,请问逻辑指针是指什么?能否举例呢?

变量名称没有重复,没有用全局变量,但是用了enterbars,exitbars这些会随信号变化的函数。


--  作者:banzhuan
--  发布时间:2019/12/23 13:23:35
--  
您可以理解为顺序。说个办法,把策略加载到图表上,然后每个开平仓语句包括止损止盈都标记下,看下两种不同的策略对应的结果,看下具体差异出在哪里,标记用如下方法:
开多1: buy(....)
开多2:buy(....)

图片点击可在新窗口打开查看此主题相关图片如下:temp.png
图片点击可在新窗口打开查看

--  作者:大豆0911
--  发布时间:2019/12/23 13:26:44
--  
以下是引用wenarm在2019/12/23 8:21:18的发言:

代码整体逻辑虽然是顺序结构,但是在整个循环执行中。你开平仓代码顺序调换,自然可能造成开平语句执行发生变化。

止盈止损一般都是需要在开平语句之后。例如:如果放在前面(并且存在仓位控制时),当第一次发生同一根k线的盈止损条件并且开平条件同时成立时,因为止盈止损在前,没有仓位可平,止盈止损无效,再进行开平,就会造成后面的代码执行结果与止盈止损在后面的结果不同

谢谢版主,我没太懂您说的意思。。。我的系统是全进全出,平仓都是全平SELLSHORT(HOLDING<0,0,market),开仓都在空仓条件下buy(HOLDING=0,60,market)

所以我理解“止盈止损在前,没有仓位可平”这个情况应该不存在?按照HOLDING<0 或 HOLDING>0条件,没有仓位时,止盈止损平仓条件都不会触发。


--  作者:大豆0911
--  发布时间:2019/12/23 13:30:23
--  
以下是引用banzhuan在2019/12/23 13:23:35的发言:
您可以理解为顺序。说个办法,把策略加载到图表上,然后每个开平仓语句包括止损止盈都标记下,看下两种不同的策略对应的结果,看下具体差异出在哪里,标记用如下方法:
开多1: buy(....)
开多2:buy(....)

图片点击可在新窗口打开查看此主题相关图片如下:temp.png
图片点击可在新窗口打开查看
 
谢谢版主,成交单数太多了,如果在图表上,检查难度有点大,是否有办法在回测报告中,把开多1开多2标识出来呢?


--  作者:banzhuan
--  发布时间:2019/12/23 13:54:03
--  
回测报告里面体现不出来,您加载一段K线图,大致的策略运行逻辑就知道了呀