欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 总是不平空就开多,图表上都正常,另外不能在信号消失后恢复持仓,怎么回事?

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有7276人关注过本帖树形打印复制链接

主题:总是不平空就开多,图表上都正常,另外不能在信号消失后恢复持仓,怎么回事?

帅哥哟,离线,有人找我吗?
MMM
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:71 积分:415 威望:0 精华:0 注册:2011/12/8 20:22:33
总是不平空就开多,图表上都正常,另外不能在信号消失后恢复持仓,怎么回事?  发帖心情 Post By:2012/3/10 22:32:25    Post IP:123.114.99.225[显示全部帖子]

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

 

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

 

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

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

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
MMM
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:71 积分:415 威望:0 精华:0 注册:2011/12/8 20:22:33
  发帖心情 Post By:2012/3/11 20:18:06    Post IP:123.114.99.225[显示全部帖子]

谢谢火哥的实例!我是希望在新图表交易指令上实现,这样资金线比较真实。现在在图表上也实现了,逐笔回放模拟交易时在该有信号的地方也都有了,问题是交易记录中出现不匹配的情况,我想知道是程序的问题还是软件的限制等等。

 回到顶部
帅哥哟,离线,有人找我吗?
MMM
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:71 积分:415 威望:0 精华:0 注册:2011/12/8 20:22:33
  发帖心情 Post By:2012/3/11 20:45:50    Post IP:123.114.99.225[显示全部帖子]

以下是引用Leon在2012-3-11 13:29:56的发言:
楼主,你的图片无法显示,截图来看看

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


 回到顶部
帅哥哟,离线,有人找我吗?
MMM
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:71 积分:415 威望:0 精华:0 注册:2011/12/8 20:22:33
  发帖心情 Post By:2012/3/11 21:27:38    Post IP:123.114.99.225[显示全部帖子]

以下是引用阿火在2012-3-11 9:36:06的发言:
以前的帖子不是给你实例了

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


 回到顶部
帅哥哟,离线,有人找我吗?
MMM
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:71 积分:415 威望:0 精华:0 注册:2011/12/8 20:22:33
  发帖心情 Post By:2012/3/12 11:45:49    Post IP:125.33.95.159[显示全部帖子]

今天上午模拟帐号跑实盘测试,开平仓都是正常的,信号正常,指令的记录也正常,都是先平后开的。(那么盘后逐笔回放测试是否有bug?)信号消失后的持仓恢复还没有测到。

 回到顶部
帅哥哟,离线,有人找我吗?
MMM
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:71 积分:415 威望:0 精华:0 注册:2011/12/8 20:22:33
  发帖心情 Post By:2012/3/12 12:44:07    Post IP:125.33.95.159[显示全部帖子]

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

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

 

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

 

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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
MMM
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:71 积分:415 威望:0 精华:0 注册:2011/12/8 20:22:33
  发帖心情 Post By:2012/3/12 16:04:08    Post IP:125.33.95.159[显示全部帖子]

下午测试中出现一次信号消失后的自动仓位恢复,操作成功,但只出现在委托和成交记录中,不会在图表程式化交易的记录中显示(如果可以显示自动恢复持仓记录和前面的盘中开仓相对应就更好了)。

 

不好意思火哥,我在代码中没有说清楚。这段代码前没有什么特别的了,就是一些交易条件的判断逻辑,我觉得不重要。

至于您说的kpos没有意义,可能是关键。我的逻辑是(基于我对逐K线模式刷新机制的理解,不一定正确):设置一个kpos的全局变量,在每次刷新时都先初始化成0,最新的一次刷新中,逐K线模式会从第一根K线到当前这根K线每一根K线执行一遍程序。这样kpos的值是从1变到最后这根的(最后这根产生的头1秒还没有轮询时,kpos记录的就是上一根K线的位置,一旦第1秒轮询完成,kpos就被置成最新的barpos,也就是刚产生这根K线的位置),因此在遍历过去K线时,比如从第10根遍历到第11根开始执行程序时,kpos是10,而barpos是11,所以会执行barpos>kpos的if结构,从而产生的多空信号是始终存在的,而且和新K线第1秒轮询时要求的信号判断和操作也是一致的。在K线中的操作逻辑是:由于过了新K线的第一个1秒轮询后barpos=kpos,if结构就不再被执行,只有在InTermBuy(盘中交易条件)为真时执行第二段if结构中的操作指令,这段if结构既可以反映过去K线满足InTermBuy条件时的状态也可以满足即时操作。只有一种情况即信号消失的情况在所有K线上是不会被反映的,但这也能够维持虚拟持仓holding的正确状态。

 

再修改以下代码的说明如下:

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

...

long:=K线走完需要开多的条件;

short:=k线走完需要开空的条件;

InTermBuy:=K线中需要开多的条件;//动态变化,可能消失

EndKSell:=InTermBuy and 主动恢复持仓的条件;//在InTermBuy成立并需要主动恢复持仓时有用,在K线中产生操作但InTermBuy不成立而信号消失时没有作用。持仓的恢复只能通过勾选软件的自动恢复功能来实现。

....

lastlong:=ref(long,1);

lastshort:=ref(short,1) or ref(InTermBuy,1) and ref(EndKSell,1);


if barpos>kpos then begin //实现历史K线交易信号并实现新K线刚产生第1秒轮询时的下单操作

 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;    //原打算记录是否产生过K线中的操作,一旦自动恢复仓位的功能不好用时使用,现在可以忽略。
end

if InTermBuy then begin //K线中满足条件即交易,之后至新K线产生之前的最后1秒扫描可能有两种结果,1是InTermBuy继续成立(信号保持),但收盘价决定需要主动恢复仓位,这时会改变lastshort的状态并通过在新K线产生的第一秒实现主动恢复仓位的操作;2是InTermBuy不成立了(信号消失),这时K线的虚拟仓位状态和实际相反,需通过勾选的自动回复持仓功能进行恢复。

 sellshort(holding<0, 1, limitr, PriceInK);
 buy(holding=0, 1, limitr, PriceInK);
 inkbuy:=1;//现在没用了
end

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
MMM
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:71 积分:415 威望:0 精华:0 注册:2011/12/8 20:22:33
  发帖心情 Post By:2012/3/15 22:40:16    Post IP:125.33.78.243[显示全部帖子]

谢谢提醒。只是要假设的几个条件使其逻辑关系与真实对应,我觉得比搞清楚现在编程中出现的问题还困难,因为这些条件并不与C的变化一直成正相关,所以很难估计其逻辑特点,尤其是K线中成交条件,只能假设在K线中的某个位置。

 

刚尝试逐K线模式下采用固定时间轮询的,没有什么经验,用kpos可以让程序操作逻辑清晰先。如果去掉kpos我理解会出现下面情况:在lastshort成立的情况下新K线的第1秒轮询会平多开空,而新K线中平空开多的条件成立后也会交易,但此后K线走完之前的轮询中lastshort还会再次交易,这样随着信号反复可能会出现不期望的频繁交易。


 回到顶部