设为首页收藏本站

 找回密码
 注册
查看: 16955|回复: 30
打印 上一主题 下一主题

请问版主关于buy的问题 [复制链接]

Rank: 5Rank: 5

精华
0
UID
17663
积分
1365
帖子
285
主题
142
阅读权限
60
注册时间
2010-10-15
最后登录
2017-11-14
跳转到指定楼层
1#
发表于 2011-11-21 10:39:08 |只看该作者 |倒序浏览
请问版主:

说明文档中关于buy函数是的解释是“先平掉所有空头仓位,然后再开规定的多头手数”



我的语句为:如果满足条件(条件用close[1]来写),则执行buy(1,close[1],false),假设在某一个bar上,满足条件,并且此时我持有一手空头仓位,我想问的是:

执行过程是以下中的哪一个:(1)先平掉一手空头仓位,然后马上开一手多头?(平空仓和开多仓中间有时间延迟)(2)还是在平掉一手空头的瞬时就开了一手多仓?

Rank: 10Rank: 10Rank: 10

精华
2
UID
4130
积分
20901
帖子
6519
主题
17
阅读权限
200
注册时间
2009-4-15
最后登录
2019-4-12
2#
发表于 2011-11-21 11:12:07 |只看该作者
回复 1# mars622160


其实开仓和平仓他是同时发出委托单的。是你所指的(2)的情况,反手要准备两手的资金。

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
17663
积分
1365
帖子
285
主题
142
阅读权限
60
注册时间
2010-10-15
最后登录
2017-11-14
3#
发表于 2011-11-21 12:16:02 |只看该作者
回复 2# lh948

非常感谢您的指教,但是如果用反手开仓函数buy总是要准备两手资金的话,这样会造成资金的浪费,我想达到差不多开仓效果,然后又只有一手资金,请问有没有办法解决呢?(或者说有没有办法让平仓和开仓有时间延迟,或者还有什么其他的好办法)非常感谢!

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
2
UID
4130
积分
20901
帖子
6519
主题
17
阅读权限
200
注册时间
2009-4-15
最后登录
2019-4-12
4#
发表于 2011-11-21 16:30:07 |只看该作者
回复 3# mars622160
延迟发单请参考以下代码。
  1. Params
  2.         Numeric FastLength(5);
  3.         Numeric SlowLength(20);
  4.         Numeric DelayTicks(5);
  5. Vars
  6.         NumericSeries AvgValue1;
  7.         NumericSeries AvgValue2;
  8.         Numeric LastBarTime;
  9.         Numeric TickCounter;
  10. Begin
  11.         AvgValue1 = AverageFC(Close,FastLength);
  12.         AvgValue2 = AverageFC(Close,SlowLength);
  13.        
  14.         LastBarTime = GetGlobalVar(0);
  15.         TickCounter = GetGlobalVar(1);
  16.         If(BarStatus==2 && LastBarTime != Time)
  17.         {
  18.                 LastBarTime = Time;
  19.                 TickCounter = 0;
  20.         }
  21.        
  22.         If(MarketPosition <>1 && AvgValue1[1] > AvgValue2[1])
  23.         {
  24.                 If(MarketPosition==0 || BarStatus!=2)
  25.                 {
  26.                         Buy(1,Open);
  27.                 }Else
  28.                 {
  29.                         BuyToCover(1,Open);
  30.                         If(TickCounter==0)
  31.                         {
  32.                                 TickCounter = 1;
  33.                         }else If(TickCounter < DelayTicks)
  34.                         {
  35.                                 TickCounter = TickCounter + 1;                       
  36.                         }else
  37.                         {
  38.                                 Buy(1,Open);
  39.                         }
  40.                 }
  41.         }
  42.        
  43.         If(MarketPosition <>-1 && AvgValue1[1] < AvgValue2[1])
  44.         {
  45.                 If(MarketPosition==0 || BarStatus!=2)
  46.                 {
  47.                         SellShort(1,Open);
  48.                 }Else
  49.                 {
  50.                         Sell(1,Open);
  51.                         If(TickCounter==0)
  52.                         {
  53.                                 TickCounter = 1;
  54.                         }else If(TickCounter < DelayTicks)
  55.                         {
  56.                                 TickCounter = TickCounter + 1;                       
  57.                         }else
  58.                         {
  59.                                 SellShort(1,Open);
  60.                         }
  61.                 }
  62.         }
  63.        
  64.         SetGlobalVar(0,LastBarTime);       
  65.         SetGlobalVar(1,TickCounter);
  66. End
复制代码

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
17663
积分
1365
帖子
285
主题
142
阅读权限
60
注册时间
2010-10-15
最后登录
2017-11-14
5#
发表于 2011-11-21 16:41:47 |只看该作者
本帖最后由 mars622160 于 2011-11-21 16:43 编辑

回复 4# lh948

谢谢楼主,但我还想问用下面的方法写不知道可不可以:

if(con[1]=true)
{
Buytocover(1,close[1],false);
Buy(1,close[1],false);
}

这样不知道会不会“平仓时间和开仓时间有一定的延迟“,然后用1手资金也可以在平空仓的同时反手开多仓?(或者说上面的Buytocover和Buy也基本是同时执行的,平仓时间和开仓时间不会有延迟

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
2
UID
4130
积分
20901
帖子
6519
主题
17
阅读权限
200
注册时间
2009-4-15
最后登录
2019-4-12
6#
发表于 2011-11-22 09:02:11 |只看该作者
回复 5# mars622160


上面的语句也是会同时执行的。

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
17663
积分
1365
帖子
285
主题
142
阅读权限
60
注册时间
2010-10-15
最后登录
2017-11-14
7#
发表于 2011-11-23 09:16:17 |只看该作者
回复 6# lh948

请问楼主,您给我的代码在实盘中可以实现延迟开仓,但是在回测的时候就无法实现了对吧,因为回测时每根bar上只有,open,high,low,close,没有tick数据进来,您上面代码中的tickcounter的值也不会增加,所以回测显示的结果是不会反手开仓(但是实盘中会反手开仓),不知道这样理解是否对,谢谢!

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
2
UID
4130
积分
20901
帖子
6519
主题
17
阅读权限
200
注册时间
2009-4-15
最后登录
2019-4-12
8#
发表于 2011-11-23 09:26:32 |只看该作者
回复 7# mars622160


在历史上会反手的,代码中
  1. If(MarketPosition==0 || BarStatus!=2)
复制代码
将情况分为历史和最后一根bar

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
17663
积分
1365
帖子
285
主题
142
阅读权限
60
注册时间
2010-10-15
最后登录
2017-11-14
9#
发表于 2011-11-24 12:43:22 |只看该作者
本帖最后由 mars622160 于 2011-11-24 12:57 编辑

回复 8# lh948

不好意思,再请问楼主:

(1)以下代码在整段程序中的作用是什么?不是太理解,我的理解就是在每根bar的第一个tick上把LastBarTime赋值为当前bar的时间,而让tick计数器的值变为0,但是条件中有“BarStatus==2“,这就表明是在超级图表中的最后一个bar上才执行,这在实盘中没有问题,但是回测时,中间bar的BarStatus都不为2,这个语句如何能够在回测中正常运行?望楼主解惑,谢谢!


If(BarStatus==2 && LastBarTime != Time)

        {

                LastBarTime = Time;

                TickCounter = 0;

        }



(2)假设在同一根bar上,TB的运行机制是每进入一个tick就把所有代码都运行一遍,运行到代码中的“ TickCounter = TickCounter + 1;”时,等号右边的“TickCounter”是上一个tick计算好的TickCounter值吗?因为TickCounter只是普通变量(非序列型变量),如何能够获得上一个tick计算的TickCounter值?

这样理解是否对:在同一根bar上,要获得上一个tick计算得到的TickCounter值,必须引入全局变量“SetGlobalVar(1,TickCounter);”,这样就把上一个tick计算得到的TickCounter值保留在全局变量中,在当前tick刚开始时,调用“ TickCounter = GetGlobalVar(1);”就把上一个tick计算得到的TickCounter值保留到当前tick中了,不知道这样理解是否对?




(3)顺便问下:全局变量的作用是否就是让变量的值在不同tick和不同bar中都可以保留,从而让变量的值不会被重新赋予初值它与序列变量的最大区别是:序列变量只能保留前一根bar的最后一个tick计算得到的变量值,而全局变量可以保留每个tick计算得到变量值。


(4)以上代码在V3中运行应该也没有逻辑问题对吧?谢谢!


非常感谢您的回答!

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
2
UID
4130
积分
20901
帖子
6519
主题
17
阅读权限
200
注册时间
2009-4-15
最后登录
2019-4-12
10#
发表于 2011-11-25 15:00:16 |只看该作者
回复 9# mars622160


1.回测是不会走到这个分支里的,回测历史的时候,是走到
  1. If(MarketPosition==0 || BarStatus!=2)
  2.                 {
  3.                         Buy(1,Open);
  4.                 }
复制代码

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-7 21:13

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部