设为首页收藏本站

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

发个自用的系统框架,请版主和大家看看,挑挑问题。 [复制链接]

Rank: 4

精华
0
UID
15012
积分
328
帖子
50
主题
16
阅读权限
50
注册时间
2010-8-1
最后登录
2012-3-2
跳转到指定楼层
1#
发表于 2010-10-1 16:51:14 |只看该作者 |倒序浏览
交易次数控制的全局变量运用是否妥当?
其他方面有bug吗?
       
Begin

  CCb=A_BuyPosition;  
  CCs=A_SellPosition;
  if( date!=date[1] )
  {
   SetGlobalVar(0,0);
   SetGlobalVar(1,0);
  }

  if(riskpd==-1)    //风险判定函数
   {
    if(A_BuyPosition>0)
     {
      A_SendOrder(Enum_Sell,Enum_ExitToday,CCb,Q_BidPrice-2*MinMove);
     }     //如果持有多单,平多
    if(A_SellPosition>0)
     {
      A_SendOrder(Enum_Buy,Enum_ExitToday,CCs,Q_AskPrice+2*MinMove);
     }     //如果持有空单,平空
    Return;    //返回,终止后续操作
   }

  if
   (
    ((Hour==14)&&(Minute>=54))
    ||(CurrentTime()>0.1455)   //图表时间、本地时间共同约束
   )
   {
    if(A_BuyPosition>0)
     {
      A_SendOrder(Enum_Sell,Enum_ExitToday,CCb,Q_BidPrice);
     }     //如果持有多单,平多
    if(A_SellPosition>0)
     {
      A_SendOrder(Enum_Buy,Enum_ExitToday,CCs,Q_AskPrice);
     }     //如果持有空单,平空
         Return;
   }



  If
   (
    ((Hour==9)&&(Minute<=05))
    ||(CurrentTime()<0.0906)   
   )
   {
    Return;
   }


    If(A_TotalPosition != 0)   
     {
          if(CCb>0)
           {
                if
                 (
                  (con1)  
                  ||(con2)
                  ||(con3)  
                 )
                 {
                  A_SendOrder(Enum_Sell,Enum_ExitToday,CCb,Q_BidPrice);
                 }
           }
          if(CCs>0)
           {
                if
                 (
                  (con1)   
                  ||(con2)
                  ||(con3)
                 )
                 {
                  A_SendOrder(Enum_Buy,Enum_ExitToday,CCs,Q_AskPrice);
                 }
           }
          return;  
         }

  If
   (
    ((Hour==14)&&(Minute>=30))
    ||(CurrentTime()>0.1430)
   )
   {
    Return;
   }

    If(GetGlobalVar(1)>=3) {Return;}     //日交易次数限制 <=3
    If(CurrentBar!=GetGlobalVar(0))  {Return;}     //当前Bar只限交易1次

    If(A_TotalPosition == 0)  
         if
          (
           con1
           &&(con2)
           &&(ccb==0)
          )
          {
           A_SendOrder(Enum_Buy,Enum_Entry,tradelots,Q_AskPrice);
           SetGlobalVar(0,CurrentBar);
           SetGlobalVar(1,GetGlobalVar(1)+1);
          }
         if
          (
           con1
           &&(con2)
           &&(ccb==0)  
          )
          {
           A_SendOrder(Enum_Sell,Enum_Entry,tradelots,Q_BidPrice);
           SetGlobalVar(0,CurrentBar);
           SetGlobalVar(1,GetGlobalVar(1)+1);
          }
        Return;
End

Rank: 4

精华
0
UID
15288
积分
382
帖子
86
主题
18
阅读权限
50
注册时间
2010-8-20
最后登录
2010-10-14
2#
发表于 2010-10-1 20:47:58 |只看该作者
先赞一声你开放的分享精神!
然后谢一声你为解决a函数的重复发单问题提供了一种方式。
你的框架看得出还是很花心思的啊。呵呵。好用否还是要盘中测试才能下结论。
就我的初步思考提点小问题:
1、如果你的开仓恰好发生在某个bar的最后一个tick时,那么你的开仓指令将会重复发单一次。
2、所有的发单价格都不能保证你一定及时成交。当未成交时间超过3个bar,那你将重发单两次。当天的开仓动作结束。
TB程序化交易研讨群121136207
纯拉皮条者谢绝。哈哈

使用道具 举报

Rank: 4

精华
0
UID
15288
积分
382
帖子
86
主题
18
阅读权限
50
注册时间
2010-8-20
最后登录
2010-10-14
3#
发表于 2010-10-1 20:58:53 |只看该作者
If(CurrentBar!=GetGlobalVar(0))  {Return;}     //当前Bar只限交易1次
这行是不是应该改为:
If(CurrentBar==GetGlobalVar(0))  {Return;}
TB程序化交易研讨群121136207
纯拉皮条者谢绝。哈哈

使用道具 举报

Rank: 4

精华
0
UID
15288
积分
382
帖子
86
主题
18
阅读权限
50
注册时间
2010-8-20
最后登录
2010-10-14
4#
发表于 2010-10-1 21:02:10 |只看该作者
全局变量的初始化方式不安全。
TB程序化交易研讨群121136207
纯拉皮条者谢绝。哈哈

使用道具 举报

Rank: 4

精华
0
UID
15012
积分
328
帖子
50
主题
16
阅读权限
50
注册时间
2010-8-1
最后登录
2012-3-2
5#
发表于 2010-10-2 09:44:01 |只看该作者
谢谢顺势顺心的指点!指出的问题都很到位。
经思考后归纳如下:
1.小概率事件。 发生后风险不大。 解决方法还没想好。
2.中概率事件,尤其在高速行情中容易发生。但对于问题发生的原因还盼指点,为何“超过3个bar,那你将重发单两次”?   因不明成因,所以想不到解决办法。
3.确实写错了,应当是==。
4.不安全是否指断网后重练会将变量重新初始化? 那么安全的方法当是什么呢。

以上问题,还请赐教

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
4647
积分
1403
帖子
432
主题
31
阅读权限
60
注册时间
2009-6-16
最后登录
2019-10-27
6#
发表于 2010-10-2 09:53:57 |只看该作者
不知楼主实盘作过测试否?仅看代码似乎会有若干问题。
1.平仓发单无全局变量的控制。这个似乎没有大碍,反正该平的已经平掉,再发单也无严重后果,但却会导致系统阻塞,特殊条件下有可能导致系统崩溃。
2.4楼也说了,全局变量的初始化方式不安全,如遇行情中断,网络中断或当机时TB重启会怎样?需要测试。
3.我的经验,若用A函数发单,尤其是开仓,不要有仓位判断的条件,否则由于信息返回的时间差,很容易产生重复发单的问题。

本人初学tb,意见仅供参考。谢谢楼主的分享精神。

使用道具 举报

Rank: 4

精华
0
UID
15012
积分
328
帖子
50
主题
16
阅读权限
50
注册时间
2010-8-1
最后登录
2012-3-2
7#
发表于 2010-10-2 10:13:49 |只看该作者
谢谢楼上liq77兄点评。
我的理解如下:
1.平仓单发送前有仓位判断。有仓位才发送平仓指令。
2.安全的方式是什么?
3.不判断仓位的话在有仓位的情况下也会发单,会造成多下单吧?

使用道具 举报

Rank: 1

精华
0
UID
16437
积分
40
帖子
13
主题
0
阅读权限
10
注册时间
2010-9-17
最后登录
2010-10-12
8#
发表于 2010-10-5 22:16:12 |只看该作者
看来我用开拓者做交易,看来是不行了,我c语言差的一臂潦倒

使用道具 举报

Rank: 4

精华
0
UID
15012
积分
328
帖子
50
主题
16
阅读权限
50
注册时间
2010-8-1
最后登录
2012-3-2
9#
发表于 2010-10-6 08:50:00 |只看该作者
开拓者算简单的了,但越简单功能越不自由。
MQL4才强大。

使用道具 举报

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

bottom

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

GMT+8, 2024-5-21 20:58

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部