设为首页收藏本站

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

[复制链接]

Rank: 1

精华
0
UID
233831
积分
10
帖子
5
主题
4
阅读权限
10
注册时间
2016-5-5
最后登录
2016-11-4
跳转到指定楼层
1#
发表于 2016-10-27 21:57:25 |只看该作者 |倒序浏览
本帖最后由 ta69440830 于 2016-10-28 23:11 编辑

我想用全局变量控制开仓间隔,即系统发出新的开仓信号后,往后数十秒,再执行下一个信号,但在实盘中,出现了在第一次开仓条件满足时,每隔十秒都发出开(平)仓信号,系统中的过滤条件完全没有作用了,然后就一直开仓平仓开仓平仓。。。麻烦老师帮忙看一下问题出在哪里,还有我的return用的对不对,谢谢啦~我觉得这套框架如果有效,初学者是可以直接嵌套自己的策略的,那么就麻烦老师啦~~
Params
         Numeric WaitTime(10);      //预设等待时间,单位为秒,可调整
        Numeric ShiftUnit(1);        //下单价格偏移量,可调整
         
         Numeric lots(1);
Vars

         Numeric NewPrice;
         Numeric TimeSeconds;
         
         Bool startCondition1(False);         // 多单启动条件
        Bool EntryCondition1(False);        // 多单开仓条件
        Bool ExitCondition1(False);          // 多单平仓条件
        Bool startCondition2(False);         // 启动条件,空单用
        Bool EntryCondition2(False);        // 开仓条件,空单用
        Bool ExitCondition2(False);          // 平仓条件,空单用
        
         Numeric myEntryPrice1(0);          // 多单开仓价格
        Numeric myExitPrice1(0);            // 多单平仓价格
        Numeric myEntryPrice2(0);          // 开仓价格,空单用
        Numeric myExitPrice2(0);            // 平仓价格,空单用


Begin
         If ( Q_Last == 0 || ( Date != Date[1] && High == Low ) )         Return;        //如果未开盘,则直接返回
        
         If ( GetGlobalVar(10)==InvalidNumeric )        SetGlobalVar(10,0);        //下单时间初始化
        
         TimeSeconds=Value(Left(TimeToString(CurrentTime),2))*3600                //记录系统当前时间,转化为秒数
                                +Value(Mid(TimeToString(CurrentTime),3,2))*60
                                 +Value(Right(TimeToString(CurrentTime),2));
         
         If ( TimeSeconds-GetGlobalVar(10)<WaitTime )        Return;        //如果发单后等待时间小于WaitTime,则返回
        
         If(Q_BidPrice>=Q_UpperLimit Or Q_AskPrice<=Q_LowerLimit) Return;        //停板情况下不允许建仓
            
                        

     If ( A_TotalPosition==0 )
    {
         If(Close[1] > Close[2])
           {
             startCondition1 = True;
   
           }
         
           If(startCondition1)
           {
             EntryCondition1                        
             If( EntryCondition1)
                                   
               {
                         NewPrice=Q_AskPrice+ShiftUnit*MinMove*PriceScale;        //计算开仓价格
                        A_SendOrder(Enum_Buy,Enum_Entry,Lots,NewPrice);
                         SetGlobalVar(10,TimeSeconds);                        //记录下单时间

              }
            Else // 再看其它价格是否满足
                     {
                   EntryCondition1                                    
                   If(EntryCondition1)
                       {
                         NewPrice=Q_AskPrice+ShiftUnit*MinMove*PriceScale;  
                         A_SendOrder(Enum_Buy,Enum_Entry,Lots,NewPrice);
                         SetGlobalVar(10,TimeSeconds);                     //记录下单时间
                      }
                }
                         Return;
           }
      
                  


               
       If (Close[1] < Close[2])
           {
             startCondition2 = True;
   
           }
         
           If(startCondition2)
           {
             EntryCondition2   ;                                             
            
                    If( EntryCondition2)                                 
               {
                         NewPrice=Q_BidPrice-ShiftUnit*MinMove*PriceScale;
                         A_SendOrder(Enum_Sell,Enum_Entry,Lots,NewPrice);
                         SetGlobalVar(10,TimeSeconds);

               }
                         Else // 再看其它价格是否满足
              {
                   EntryCondition2  ;
                                   
                 If(EntryCondition2)                     
                   {   
                                         NewPrice=Q_BidPrice-ShiftUnit*MinMove*PriceScale;
                         A_SendOrder(Enum_Sell,Enum_Entry,Lots,NewPrice);
                         SetGlobalVar(10,TimeSeconds);
                   }
               }
           }
                Return;
      }

                 
         If ( A_BuyPosition>0 )
         {
              ExitCondition1      // 止损条件满足
        
                 If(ExitCondition1)
            {
            
                 NewPrice=Q_BidPrice-ShiftUnit*MinMove*PriceScale;
                 A_SendOrder(Enum_Sell,Enum_Exit,A_BuyPosition,NewPrice);
                 SetGlobalVar(10,TimeSeconds);
                 Return;
                    }

            Else // 获利平仓
           {
             ExitCondition1;// 获利平仓条件满足
            If(ExitCondition1)
             {
                 NewPrice=Q_BidPrice-ShiftUnit*MinMove*PriceScale;
                 A_SendOrder(Enum_Sell,Enum_Exit,A_BuyPosition,NewPrice);
                 SetGlobalVar(10,TimeSeconds);
                                 
              }

         }
                    Return;
   }

                                 
        If ( A_SellPosition>0 )
        {
          ExitCondition2 // 止损条件满足
        If(ExitCondition2)
            {
                 NewPrice=Q_AskPrice+ShiftUnit*MinMove*PriceScale;
                 A_SendOrder(Enum_Buy,Enum_Exit,A_SellPosition,NewPrice);
                 SetGlobalVar(10,TimeSeconds);
                                 Return;
            
            }Else // 获利平仓
                {
                  ExitCondition2 ;// 获利平仓条件满足
                                 
                   If(ExitCondition2)
               
                     {
                                           NewPrice=Q_AskPrice+ShiftUnit*MinMove*PriceScale;
                       A_SendOrder(Enum_Buy,Enum_Exit,A_SellPosition,NewPrice);
                       SetGlobalVar(10,TimeSeconds);
                     }
                  }
                         Return;
        }
        End
您需要登录后才可以回帖 登录 | 注册

bottom

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

GMT+8, 2024-5-22 05:21

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部