开拓者期货期权程序化系统交易论坛

标题: 好恐怖,实盘帐户TB非交易时间乱发委托单 [打印本页]

作者: hyjok    时间: 2009-9-12 16:54:05     标题: 好恐怖,实盘帐户TB非交易时间乱发委托单

好恐怖,我的实盘帐户TB非交易时间乱发委托单,见消息中心截图
[attach]2293[/attach]

2009-09-11 13:10的时候,行情服务器断开重新连接之后出现发送委托单的情况,我的交易系统中是用A_SendOrder发送委托单的,但是上午的行情数据并不满足触发发送委托单的条件,怎么可能在非交易时间发单?
以前一直没出现这种情况
(由于我的系统中运用了全局变量来控制防止重复发委托的,每次A_SendOrder发送委托单后会改变全局变量值,这一次TB非交易时间发委托单改变了全局变量值,造成当天由按正常信号的盈利五百多块变成亏损109块)
这种情况,不知大家有没有遇到,TB管理员如何解决?
作者: nopain    时间: 2009-9-12 17:04:22

请注意全局变量的初始化问题:
断线重连之后会重头计算,可能导致全局变量被重新初始化。

解决方法:只有全局变量是无效值的时候才对其赋初值。
  1. MyGlobalVar1 = GetGlobalVar(0);
  2. If(BarStatus==0)
  3. {
  4.     If(MyGlobalVar1 == InvalidNumeric)
  5.     {
  6.          MyGlobalVar1  = 0;
  7.          SetGlobalVar(0,MyGlobalVar1  );
  8.     }
  9. }
  10. .....
复制代码

作者: hyjok    时间: 2009-9-12 17:16:53

原帖由 nopain 于 2009-9-12 17:04 发表
请注意全局变量的初始化问题:
断线重连之后会重头计算,可能导致全局变量被重新初始化。

解决方法:只有全局变量是无效值的时候才对其赋初值。
MyGlobalVar1 = GetGlobalVar(0);
If(BarStatus==0)
{
    If(MyGlobalVar1 ...

我的是这样的
If (GetGlobalVar(0)==InvalidNumeric)//初始化
    {
      FileAppend(filename,"自动交易开始运行,"+"时间:"+DateTimeToString (SystemDateTime()));
   SetGlobalVar(0,0);
    }
系统中有用到这种初始化方式,但我遇到的问题并不是“断线重连之后会重头计算,可能导致全局变量被重新初始化”这个原因,因为我情况是TB处于一直开启状态,断线重连之后并没有导致全局变量被重新初始化,只有在重新启动TB或关闭工作区重起开启工作区是才会被初始化,这从我的FileAppend(filename,"自动交易开始运行,"+"时间:"+DateTimeToString (SystemDateTime()));执行状态中可以看出,因为断线重连之后并没有输出文本“自动交易开始运行.....”
作者: hyjok    时间: 2009-9-12 18:52:03

目前,我只有采取笨笨的办法,交易时间限制,只在交易时间允许执行交易系统代码
If (BarStatus==2 And ((CurrentTime>=0.0900 And CurrentTime<=0.1015) Or (CurrentTime>=0.1030 And CurrentTime<=0.1130) Or (CurrentTime>=0.1330 And CurrentTime<=0.1410) Or (CurrentTime>=0.1420 And CurrentTime<=0.1500)))
{
..............
}
(上面时间限制针对上期所交易时间)
作者: ccms    时间: 2009-9-12 19:10:03

想想当时肯定是手忙脚乱的吧。
当天交易最后结果是否受此事件影响?
作者: hyjok    时间: 2009-9-12 21:33:01

原帖由 ccms 于 2009-9-12 19:10 发表
想想当时肯定是手忙脚乱的吧。
当天交易最后结果是否受此事件影响?


1、由于是全自动交易,盘后才查看交易结果,所以不会有出现手忙脚乱的情况
2、当天交易结果受到影响,正常信号当天盈利479元,实际今天亏109元
还好是日内交易,一天的结果对整体交易不会有多大影响
作者: ccms    时间: 2009-9-12 22:19:44

原帖由 hyjok 于 2009-9-12 09:33 PM 发表


1、由于是全自动交易,盘后才查看交易结果,所以不会有出现手忙脚乱的情况
2、当天交易结果受到影响,正常信号当天盈利479元,实际今天亏109元
还好是日内交易,一天的结果对整体交易不会有多大影响 ...


呵呵。还好,亏得不多。
俺知道了,你就是海洋上的那个裸单的吧


老兄,在这同步贴吧
作者: hyjok    时间: 2009-9-12 22:28:16

原帖由 ccms 于 2009-9-12 22:19 发表


呵呵。还好,亏得不多。
俺知道了,你就是海洋上的那个裸单的吧


老兄,在这同步贴吧


见笑了,俺海洋的ID就是yonkim
作者: ccms    时间: 2009-9-12 22:41:11

  呵呵,老兄做得很不错啊。
作者: 只求薄利    时间: 2009-9-12 22:45:24

还有一种方法是采用“动作触发”,而不是“状态触发”,看你的交易方式是如何实现的了
作者: maodong    时间: 2009-9-13 11:28:42

是否下单,看持仓、资金和信号,根据这些来下单。
根据全局变量,不太可靠。
作者: hyjok    时间: 2009-9-13 13:27:13

原帖由 只求薄利 于 2009-9-12 22:45 发表
还有一种方法是采用“动作触发”,而不是“状态触发”,看你的交易方式是如何实现的了


如果没有理解错,薄利兄所指“动作触发”是指采用Close等实时价做条件判断,“状态触发”是指采用High、Low类做做条件判断,是这样吧?
事实上,系统中是用Close实时最新价格做条件触发的,上午收盘价也没有满足发单条件,按理说是不会出现断线重连发委托单的情况,更何况是非交易时间
作者: hyjok    时间: 2009-9-13 13:32:48

原帖由 maodong 于 2009-9-13 11:28 发表
是否下单,看持仓、资金和信号,根据这些来下单。
根据全局变量,不太可靠。


我的系统主要用全局变量配合A_TodayBuyPosition()、A_TodaySellPosition()持仓查询,根据动态信号下单
作者: nopain    时间: 2009-9-13 20:36:51     标题: 回复 11# maodong 的帖子

恰恰相反,只有用全局变量来控制才是可靠的。
作者: 只求薄利    时间: 2009-9-13 22:14:00     标题: 回复 12# hyjok 的帖子

动作指的是类似于“穿越”,只有一个点,即使断线重连数据刷新,也不会重发了,因为时间点已经过去
作者: 只求薄利    时间: 2009-9-13 22:15:46

线条穿越动作 CrossOver

穿越某个水平(价格)CrossOverHor
作者: maodong    时间: 2009-9-14 08:39:36

原帖由 nopain 于 2009-9-13 20:36 发表
恰恰相反,只有用全局变量来控制才是可靠的。

如果考虑短线重连,TB崩溃重启,用全局变量还可靠吗?
作者: nopain    时间: 2009-9-14 08:58:08     标题: 回复 17# maodong 的帖子

断线重启之后可以通过参数将值输入。
作者: hyjok    时间: 2009-9-14 09:17:04

原帖由 nopain 于 2009-9-14 08:58 发表
断线重启之后可以通过参数将值输入。


我的系统(日内系统)中用全局变量配合A_TodayBuyPosition()、A_TodaySellPosition()持仓查询已经做到TB重起后不需要通过参数将值输入
作者: maodong    时间: 2009-9-14 09:20:52

那不是还要人工算原来全局变量的值是多少?还真不很方便。
作者: h882010790    时间: 2010-3-17 19:16:12     标题: 用读写函数保存读写全局变量的值

用读写函数保存读写全局变量的值




欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2