设为首页收藏本站

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

跨期策略,急需高手帮忙! [复制链接]

Rank: 3Rank: 3

精华
0
UID
40630
积分
129
帖子
88
主题
15
阅读权限
40
注册时间
2011-5-18
最后登录
2014-12-2
跳转到指定楼层
1#
发表于 2012-5-11 10:41:40 |只看该作者 |倒序浏览
做股指跨期,允许连续建仓,最大仓位为5.每次同时买卖两个品种,当出现单腿的时候,让另一个品种追单。我没想到什么好办法,只能让其二次发单,但这样结果依然不定。之前还有交易,现在都没交易了,不知道为啥?!呜呜呜。。。。。。
恳求管理员和高手们,帮忙解答下!不胜感激!非常感谢!附代码:
Params
            Numeric   Bpionts(7.8);//大基差值
            Numeric   Spionts(7.0);//小基差值
        Numeric   lots(1);//交易数量
        Numeric   maxposition(5);
Vars
        Bool Entercon;//入场条件
        bool Exitcon;//出场条件
        Numeric MyFlag(0);//全局变量标识,用来限制每次平仓后开新仓。               
Begin
                if(BarStatus == 0) //在开始时定义全局变量
          {
         SetGlobalVar(0,0);
               
          }
          //初始化全局变量
                 MyFlag=GetGlobalVar(0);
         //入场和出场条件
         Entercon=(Data1.Q_BidPrice-Data0.Q_AskPrice)>=Bpionts;//基差变大时,买近卖远
                 Exitcon=(Data1.Q_AskPrice-Data0.Q_BidPrice)<=Spionts;//基差变小时,卖近买远
      
   //入场
           if (( Entercon&& MyFlag==0))

        {

                if(Data0.A_BuyPosition>=0 &&Data1.A_SellPosition>=0&&Data0.A_BuyPosition<=maxposition&&Data1.A_SellPosition<=maxposition)
                                {
                                   Data0.A_SendOrder(Enum_Buy ,Enum_Entry,lots,Q_AskPrice+MinMove*PriceScale);//买近月,以盘口卖一价减一跳
                                   Data1.A_SendOrder(Enum_Sell,Enum_Entry,lots,Q_BidPrice-MinMove*PriceScale);// 卖远月,以盘口买一价加一跳            
                  
                                  if(Data0.A_BuyPosition!=0&&Data1.A_SellPosition!=0&&Data0.A_BuyPosition==Data1.A_SellPosition)    SetGlobalVar(0,1);
                                  
                                  if(Data0.A_BuyPosition-Data1.A_SellPosition==1)
                                        {
                                          Data1.A_SendOrder(Enum_Sell,Enum_Entry,lots,Q_BidPrice-MinMove*PriceScale);
                                                                            SetGlobalVar(0,1);
                     }       

                                 if(Data0.A_BuyPosition-Data1.A_SellPosition==-1)
                                        {
                                           Data0.A_SendOrder(Enum_Buy ,Enum_Entry,lots,Q_AskPrice+MinMove*PriceScale);
                                                        SetGlobalVar(0,1);
                                                                       
                     }       
                                  
                                }
               
                }
               
  //出场       
                if (Exitcon&& MyFlag==1)

        {

                if(Data0.A_BuyPosition!=0&&Data1.A_SellPosition!=0&&Data0.A_BuyPosition==Data1.A_SellPosition)
                                {
                                Data0.A_SendOrder(Enum_Sell,Enum_Exit,A_BuyPosition(),Q_BidPrice-MinMove*PriceScale);//卖近月,以盘口买一价加一跳
                                    Data1.A_SendOrder(Enum_Buy ,Enum_Exit,A_SellPosition(),Q_AskPrice+MinMove*PriceScale); //买远月,以盘口卖一价减跳              

                                  if(Data0.A_BuyPosition==0 &&Data1.A_SellPosition==0)
                                                                                  { SetGlobalVar(0,0);                       
                                                                                    MyFlag=GetGlobalVar(0);
                                        }
                                       
                               if(Data0.A_BuyPosition==0 &&Data1.A_SellPosition!=0)
                                        {
                                       Data1.A_SendOrder(Enum_Buy ,Enum_Exit,A_SellPosition(),Q_AskPrice+MinMove*PriceScale);  
                                                      SetGlobalVar(0,0);                       
                                                                                    MyFlag=GetGlobalVar(0);
                                    }
                                    if(Data0.A_BuyPosition!=0 &&Data1.A_SellPosition==0)
                                        {
                                  Data0.A_SendOrder(Enum_Sell,Enum_Exit,A_BuyPosition(),Q_BidPrice-MinMove*PriceScale);
                                                     SetGlobalVar(0,0);                       
                                                                                         MyFlag=GetGlobalVar(0);
                                    }
                                }

         


           }

//14时59分撤掉所有未成交单
    if(time>0.1458)  
   {
       Data0.A_DeleteOrder;
       Data1.A_DeleteOrder;
   }

End
流水高山心自知

Rank: 1

精华
0
UID
110152
积分
42
帖子
14
主题
8
阅读权限
10
注册时间
2012-4-23
最后登录
2017-4-14
2#
发表于 2012-5-11 10:45:56 |只看该作者
我看到了一大堆的嵌套if语句,呵呵。。。
我也是菜鸟。。

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
40630
积分
129
帖子
88
主题
15
阅读权限
40
注册时间
2011-5-18
最后登录
2014-12-2
3#
发表于 2012-5-11 12:13:41 |只看该作者
wilsonkor 发表于 2012-5-11 10:45
我看到了一大堆的嵌套if语句,呵呵。。。
我也是菜鸟。。

呜呜,不要嘲笑,心里明白就行,哈哈!

使用道具 举报

Rank: 1

精华
0
UID
110152
积分
42
帖子
14
主题
8
阅读权限
10
注册时间
2012-4-23
最后登录
2017-4-14
4#
发表于 2012-5-11 12:27:40 |只看该作者


基于基差的跨期套利模型啊。。。

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
40630
积分
129
帖子
88
主题
15
阅读权限
40
注册时间
2011-5-18
最后登录
2014-12-2
5#
发表于 2012-5-11 12:36:50 |只看该作者
wilsonkor 发表于 2012-5-11 12:27
基于基差的跨期套利模型啊。。。

您能帮我解决下单腿问题么?我都弄晕了,

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
40630
积分
129
帖子
88
主题
15
阅读权限
40
注册时间
2011-5-18
最后登录
2014-12-2
6#
发表于 2012-5-14 10:04:36 |只看该作者
为什么平仓的时候,只有一个品种平仓,而另一个不平仓?谁能帮我解答下?呜呜,没人理啊。。。。。

使用道具 举报

Rank: 4

精华
0
UID
5975
积分
277
帖子
47
主题
10
阅读权限
50
注册时间
2009-11-24
最后登录
2019-1-18
7#
发表于 2012-5-29 22:28:42 |只看该作者
那倒不如直接用套利宝进行交易,何必这么复杂

使用道具 举报

Rank: 1

精华
0
UID
111143
积分
32
帖子
5
主题
1
阅读权限
10
注册时间
2012-6-23
最后登录
2013-5-15
8#
发表于 2012-7-15 13:30:37 |只看该作者
不要作了,做出来也不赚钱了

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
40630
积分
129
帖子
88
主题
15
阅读权限
40
注册时间
2011-5-18
最后登录
2014-12-2
9#
发表于 2012-7-15 15:26:04 |只看该作者
myimage 发表于 2012-7-15 13:30
不要作了,做出来也不赚钱了

请问,您实盘试过?为啥不赚钱

使用道具 举报

Rank: 5Rank: 5

精华
1
UID
42516
积分
1239
帖子
264
主题
31
阅读权限
60
注册时间
2011-5-25
最后登录
2014-9-23
10#
发表于 2012-7-15 19:22:18 |只看该作者
本帖最后由 rookies 于 2012-7-15 19:26 编辑

论坛最近新人多学习气氛不太好,不做实验不拿数据的否定或肯定和信口雌黄有什么区别?也是对自己和别人的不负责任!

TB程序化现在的主要功能对于跨期套利还是缺少足够的支持,套利的话用的比较多的还是大摩的那套程序

很新的交易想法,很遗憾对A函数没有太多研究,只能提供有限帮助
一、你的TB程序从代码上看没有什么问题,在开仓上可以加一个时间限制避免0.1458后发单 不然和撤单冲突

二、单腿情况有可能是TB机制和价格变动原因,请足一排查
a、不知到发单时是没发单还是不成交?如果后者,股指主力合约价格变动大,当服务器返回价格满足下单条件后不满足开仓价格,而如果这时运行到下一Tick则不满足开仓条件Entercon不再满足二次补仓条件,形成单腿。
解决方案:


a、将Bool Entercon Bool Exitcon 用全局变量来代替,因为TB运行机制Bool变量是不进行传递的,改成全局变量之后,只要满足开平仓条件之后的任何Tice都自动比较Data0和1的仓位情况,如果发现异常立即处理

b、因为A函数是服务器端函数,所以查询与回报之间有一定延迟,所以必须建立一个查询机制避免发单时因为从服务器返回的A_BuyPosition类函数还没有返回值而造成重复发单,这个可以从论坛上找找答案

使用道具 举报

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

bottom

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

GMT+8, 2024-5-4 20:45

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部