以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  总是不平空就开多,图表上都正常,另外不能在信号消失后恢复持仓,怎么回事?  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=10503)

--  作者:MMM
--  发布时间:2012/3/10 22:32:25
--  总是不平空就开多,图表上都正常,另外不能在信号消失后恢复持仓,怎么回事?

标准版,新图表交易系统信号,图表上的交易信号正常,在盘后采用K线逐笔回放进行测试,图表程式化交易采用了1秒固定时间间隔,并勾选了信号消失后自动回复持仓。

 

现在发现两个问题不知是什么原因?

 

1.在回放的交易记录中,平多开空没有问题,但平空开多在下单记录中却只有开多而没有平空指令,参见下图(图表交易信号完全正常):

图片点击可在新窗口打开查看

 

2.在盘中出现了开多后K线结束时信号消失,可并没有出现回复持仓的交易指令记录。


--  作者:阿火
--  发布时间:2012/3/11 9:36:06
--  
以前的帖子不是给你实例了
--  作者:Leon
--  发布时间:2012/3/11 13:29:56
--  
楼主,你的图片无法显示,截图来看看
--  作者:MMM
--  发布时间:2012/3/11 20:18:06
--  
谢谢火哥的实例!我是希望在新图表交易指令上实现,这样资金线比较真实。现在在图表上也实现了,逐笔回放模拟交易时在该有信号的地方也都有了,问题是交易记录中出现不匹配的情况,我想知道是程序的问题还是软件的限制等等。
--  作者:MMM
--  发布时间:2012/3/11 20:45:50
--  
以下是引用Leon在2012-3-11 13:29:56的发言:
楼主,你的图片无法显示,截图来看看

我能看到啊?我就是插入的图。


--  作者:MMM
--  发布时间:2012/3/11 21:27:38
--  
以下是引用阿火在2012-3-11 9:36:06的发言:
以前的帖子不是给你实例了

我用火哥的例子(enterlong系列指令及tbuyholding系列仓位管理)试了,在逐笔回放的程序化交易测试时,也是在做空时先平多再开空,但做多时是没有平空就只有一个开多。我用的是buy系列指令及holding虚拟仓位管理,两个都有相同的问题。我的软件是2.75版本。


--  作者:MMM
--  发布时间:2012/3/12 11:45:49
--  
今天上午模拟帐号跑实盘测试,开平仓都是正常的,信号正常,指令的记录也正常,都是先平后开的。(那么盘后逐笔回放测试是否有bug?)信号消失后的持仓恢复还没有测到。
--  作者:阿火
--  发布时间:2012/3/12 11:59:26
--  
以下是引用MMM在2012-3-11 20:18:06的发言:
谢谢火哥的实例!我是希望在新图表交易指令上实现,这样资金线比较真实。现在在图表上也实现了,逐笔回放模拟交易时在该有信号的地方也都有了,问题是交易记录中出现不匹配的情况,我想知道是程序的问题还是软件的限制等等。

 

新交易系统。你能写得出来?

肯定是你模型问题

软件本身没问题,没有任何限制。

 

把你写出来的发来看看再说吧

[此贴子已经被作者于2012-3-12 11:59:49编辑过]

--  作者:MMM
--  发布时间:2012/3/12 12:44:07
--  

刚才在午盘收盘后有做了逐笔回放模拟交易测试,这次的交易记录中平空开多是正常的,就是开空之前没有平多了。 可能和测试时的模拟帐户的持仓状态关联起来了,昨天测试的时候考虑到逐笔回放必须断开连接,也就估计与持仓状态无关。

无平空就开多的时候模拟帐户是持有多仓,无平多就开空的时候模拟帐户是持有空仓。

 

我的代码如下,请火哥指教:

 

variable:kpos=0;(或用globalvariable声明)//不再使用islastbar

.

.

.

bars:=kpos;
if barpos>kpos then begin

 sellshort(lastlong and holding<0, 1, limitr, o);
 sell(lastshort and holding>0, 1, limitr, o);
 buyshort(lastshort and holding=0, 1, limitr, o);  
 buy(lastlong and holding=0, 1, limitr, o);
 

 kpos:=barpos;
 inkbuy:=0;
end

if InTermBuy then begin //K线中满足条件即交易,之后至新K线产生之前的最后1秒扫描可能有两种情况,1是InTermBuy继续成立(信号保持),但收盘价决定需要主动恢复仓位,这时会改变lastlong和lastshort的状态并通过在新K线产生的第一秒实现主动恢复仓位的操作;2是InTermBuy不成立了(信号消失),这时K线的虚拟仓位状态和实际相反,这时通过勾选的自动回复持仓功能进行恢复。(这个还没有测到,也不知是否会出现问题?)
 sellshort(holding<0, 1, limitr, PriceInK);
 buy(holding=0, 1, limitr, PriceInK);
 inkbuy:=1;
end

[此贴子已经被作者于2012-3-12 12:48:27编辑过]

--  作者:阿火
--  发布时间:2012/3/12 13:11:11
--  

汗!~~~

你不会贴个完整版的啊。

InTermBuy是什么?inkbuy是什么

 

kpos没有任何意义

 

不过,咋一看问题很多