比如设置A:=0,如果满足一个条件后,A:=1。 程序运行过程是前一根K线一开始是A:=0,然后这根K线确实满足了条件,这时A:=1。这时问题出现了。我想在下一根k线要A:=1这个状态标记的数值,但是由于程序行是顺序执行的,在一开始还是先执行了A:=0。这个问题怎么解决?论坛里肯定有这个问题,我不知道搜什么关键字。如果简单的话,你给我说下就好了。
变量命名时的等于是没有冒号的。THEN后面是有冒号的。IF条件里面的判断等于不等于的时候有没有冒号啊。比如此例 A:=1还是A=1
[此贴子已经被作者于2014/7/28 16:28:44编辑过]
用固定轮询模式,当想要即时触发下单时候不做修改,想要走完k线下单的时候把原来的条件改成ref(条件,1),比如判断条件是c>o,那么在固定轮询下实现走完k线功能,那么修改成ref(c>o,1)就行
那如果这样的话,buy sell的函数里面都是按照MARKETR来弄?SELL(1,0,MARKETR);比如,每次比如15秒轮询后按照市价触发交易,下一根K线的时候,用REF(C,1),那么就是按照第二根开盘时的,不对,应该是按照下一根K线发生15秒后轮询,这样就是说REF(C,1)的想法是滞后15秒的。
用market,
用这样的办法,没有什么滞后,走完k线就用ref,用固定轮询就不用,
哦,MARKET和MARKETR在实际交易的时候效果是一样的都是按照市价交易,只是在回测的时候效果不同。
关于滞后的问题,是这样的,昨天我问的是我想实现开盘的时候由于价格剧烈执行轮询来触发交易,别的时候就按照K线完成收盘再触发交易就好了,也就是一个策略中用两种触发条件。你给的方法挺好,用轮询模式+REF(C,1)确实可以解决这个问题,比如15秒,15秒是60的整数倍,所以在收盘的时候是不存在漏单的,这样对于开盘的时间由于没有用REF(C,1)是不存在什么问题的。但是在开了盘以后的时间段,由于用了REF(C,1),由于模型一直处于轮询模式下,在一根K线完成收盘的那个时间点,刚好也要轮询。这个时候REF(C,1)不是应该执行的上一根K线的收盘价么?只有过了那个时间点,进入下一秒,在新的K线形成的过程中,REF(C,1)才代表上一根K线,如果是这样的话,就是滞后15秒再轮询的时候才能触发交易。
其实主要就是关于那个时间点的问题,在一根K线收盘结束的那一刻,以及轮询同时执行的时候,REF(C,1)到底代表了上一根K线还是当前收盘K线(对应要新形成的K线来说)