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

标题: 请教版主关于自动交易的问题 [打印本页]

作者: hugingco    时间: 2007-10-15 12:21:05     标题: 请教版主关于自动交易的问题

1自动交易是否需要开盘前登陆,打开所有工作区,如网络出现问题交易指令会如何,断线期间的交易指令如何处理?
2交易系统如果是以日线为单位的,是否在工作区内打开日k线图,然后插入交易代码即可?如果系统是按5分钟线为单位的,是否新开工作区,然后打开5分钟线?如果同一交易系统应用于所有交易品种,是否要打开所有品种的k线图?
3如果系统是日k线系统,收盘平仓的话,想在14.50分平仓可以吗?,如何操作?
作者: yu47    时间: 2007-10-15 12:31:12

我也有想请教此类问题.等回复.
作者: nopain    时间: 2007-10-15 14:14:26

原帖由 hugingco 于 2007-10-15 12:21 发表
1自动交易是否需要开盘前登陆,打开所有工作区,如网络出现问题交易指令会如何,断线期间的交易指令如何处理?
2交易系统如果是以日线为单位的,是否在工作区内打开日k线图,然后插入交易代码即可?如果系统是按5分钟线为单位的,是 ...


回复1:
并不需要开盘之前做好准备,您随时登陆都可操作,只需要打开工作区,设置交易指令,选择帐号,启动自动交易。
需要注意的问题就是,您真实帐户的持仓状态和资金状态和交易指令刚插入图中计算出的最新状态要一致。否则就会出现持仓不足,不能平仓或者资金不足,不能开仓等提示。只要您协调好真实账户和测试帐户的对应关系,随时都可以启动自动交易。
至于断线的问题,如果网络断了,等网络恢复之后,系统会自动重连,然后最新的行情会推送过来,将中间的数据补上。可能的问题就是延误了期间的交易时机。

回复2:
您的理解完全正确,TB的自动交易以图表为驱动的,所以每个自动交易的指令都必须附加在图表上。

回复3:
这个问题分为两种情况,您希望在14:50或之后平仓的话,如果您的数据周期为5分钟,1分钟或更小的周期,直接通过以下代码就可以实现
  1. If(Time>0.1450)
  2. {
  3.     // 我的交易代码...
  4. }
复制代码

如果您的周期为15分钟,或者更大的周期,就需要另行处理,因为最后一个15分钟的K线时间是14:45,通过Time取到的值是0.1445。所以不能按上面的方式进行处理。
此时,您可以选择一种处理方式,把时间提前到14:45来平仓,或者用当前系统时间来代替K线时间判断。但用系统时间判断之后第二天这个信号就会消失,您就不能顺利的接着做后续的操作了。对于日内系统倒没什么影响,但是较长周期的系统会存在问题。
  1. If(CurrentTime>0.1450)
  2. {
  3.     // 我的交易代码...
  4. }
复制代码

作者: hugingco    时间: 2007-10-15 15:17:14

谢谢你的回复,如果我是日线指标,想收盘平仓,能否实现?
另外,如果由于某种原因导致开仓指令未发出,那么重联后该指令实效还是会重新执行,开仓指令实效,相应的平仓指令、止损指令是否仍会执行;如果延误的是止损指令,重联后是否会根据条件执行?
序列型变量与一般变量有何区别?如果想将当前bar前10个bar的最高值进行处理(如(high1/1+high2/2+high3/3+...+high10/10)/sum(1,10))),代码如何,请教?
作者: nopain    时间: 2007-10-15 17:43:59

原帖由 hugingco 于 2007-10-15 15:17 发表
谢谢你的回复,如果我是日线指标,想收盘平仓,能否实现?
另外,如果由于某种原因导致开仓指令未发出,那么重联后该指令实效还是会重新执行,开仓指令实效,相应的平仓指令、止损指令是否仍会执行;如果延误的是止损指令,重联后是否会 ...


1、日线指标上用收盘平仓,是可以的。
第一步您先插入一个ExitOnClose交易指令到现有的图中。
第二步在您的代码中加入以下脚本:
  1. If(CurrentTime > 0.145500)
  2. {
  3.     If(MarketPosition==1)
  4.         sell;
  5.     else if(MarketPosition==-1)
  6.         buytoCover;
  7. }
复制代码


2、重连之后会根据新收到数据重新计算。如果有止损单,也会继续发送!

3、序列变量类似于数组,和图上的K线一一对应。一般变量只在当前执行的Bar有效。
您的这个算法有点类似于加权平均。您看看WAverage函数,应该可以明白其中的算法。

[ 本帖最后由 nopain 于 2007-10-15 17:48 编辑 ]
作者: hugingco    时间: 2007-10-15 21:24:14

//------------------------------------------------------------------------
// 简称: WAverage
// 名称: 求权重平均
// 类别: 用户函数
// 类型: 内建函数
// 输出: 数值型
//------------------------------------------------------------------------
Params
NumericSeries Price(10);
Numeric Length(10);
Vars
Numeric WtdSum(0);
Numeric CumWt;
Numeric i;  
Begin
for i = 0 to Length - 1
{
  WtdSum = WtdSum + ( Length - i ) * Price[i ] ;
}
CumWt = ( Length + 1 ) * Length * 1/2 ;
Return WtdSum / CumWt;
End
//------------------------------------------------------------------------
// 编译版本 GS2004.06.12
// 版权所有 TradeBlazer Software 2003-2008
// 更改声明 TradeBlazer Software保留对TradeBlazer平
//   台每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------

请教公式中Price[i ]是什么含义?在运算中值的变化情况怎样?
如果我要在表达式内使用前10个bar各自的最高价怎样表达,h1,h2。。。?
谢谢

[ 本帖最后由 nopain 于 2007-10-15 21:34 编辑 ]
作者: nopain    时间: 2007-10-15 21:35:46

原帖由 hugingco 于 2007-10-15 21:24 发表
//------------------------------------------------------------------------
// 简称: WAverage
// 名称: 求权重平均
// 类别: 用户函数
// 类型: 内建函数
// 输出: 数值型
//--------------------------------- ...


Price[0]是当前的值,Price[1]是指上一个Bar的值,以此类推!
至于怎么来写这个问题,一下说不清楚的,您需要系统的学习一下公式!
http://www.tradeblazer.net/forum/thread-242-1-1.html

[ 本帖最后由 nopain 于 2007-10-15 21:37 编辑 ]
作者: hugingco    时间: 2007-10-16 08:38:11

如果在5分钟系统内,时间为9:08分,那么当前的bar是9:00的那根bar,还是9:05的不完整的bar?如果是9:00的那根bar,那么9:05分的不完整的bar的开盘、最高最低、最新价格能否引用?谢谢。
作者: nopain    时间: 2007-10-16 09:19:14

原帖由 hugingco 于 2007-10-16 08:38 发表
如果在5分钟系统内,时间为9:08分,那么当前的bar是9:00的那根bar,还是9:05的不完整的bar?如果是9:00的那根bar,那么9:05分的不完整的bar的开盘、最高最低、最新价格能否引用?谢谢。 ...


9:08分的数据被划到9:05的K线上,您在9:05分引用9:00的数据直接用Close[1]就可以取到上一个K线的收盘价,其他数据类似。
9:00不能引用9:05的数据,这样属于引用未来数据!
作者: hugingco    时间: 2007-10-16 09:58:06

9:00-9:05 1000,1050,1000,1030
9:05-9:08 1030,1060,1020,1040
以上为例,第一根bar为完整的,如果现在是9:08分,那当前的bar是第一根bar的数据,还是第二根bar的数据?如close值是1040,还是1030?
作者: nopain    时间: 2007-10-16 12:48:48

第二根
作者: hugingco    时间: 2007-10-16 13:21:12

能否执行以下思路,如当前k线收盘突破前5根k线的最高价,收盘价买入(或下一k线开盘价)?如果当前数据显示close已突破前最高价(数据9:05-9:08),是否马上就执行买入呢,如当前k线(如9:09分数据)又回落至最高价以下,即开仓条件不符合,则系统如何处理?
谢谢版主
作者: nopain    时间: 2007-10-16 14:04:32

原帖由 hugingco 于 2007-10-16 13:21 发表
能否执行以下思路,如当前k线收盘突破前5根k线的最高价,收盘价买入(或下一k线开盘价)?如果当前数据显示close已突破前最高价(数据9:05-9:08),是否马上就执行买入呢,如当前k线(如9:09分数据)又回落至最高价以下,即开仓条件不符合,则系统 ...


您的这个问题缺少一个要素,在什么周期下?1分钟,5分钟?
假定您说的是5分钟情况,当Close>前期高点,会马上执行买入,如果回落,则这个信号会消失掉。
对于这种问题,已经有很多相关的讨论,也有一堆解决方案,下面列几条:
1、延迟到下一Bar发送委托。
2、用High来代替Close进行判断。
3、用Open来代替Close进行判断。
以上各有利弊!
作者: sq1974    时间: 2007-10-28 18:09:07

能详细些吗 是我 我




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