检查开放交易的问题 - 页 6

 

我从来没有试过这个,但我认为它是无效的......。

OrderType()==(OP_BUYSTOP||OP_SELLSTOP) &&     // The order selected is either a pending buy on stop order or a buy on sell order
OrderMagicNumber()==(Mnumber1||Mnumber1))    // The orders magic number is the same as the magic number used in this ea

我认为你需要这样做......。

((OrderType()==OP_BUYSTOP)|| (OrderType()== OP_SELLSTOP)) &&     // The order selected is either a pending buy on stop order or a buy on sell order
((OrderMagicNumber()== Mnumber1) || (OrderMagicNumber()==Mnumber2))    // The orders magic number is the same as the magic number used in this ea

我认为这样做的原因是 ...... 这相当于什么?(OP_BUYSTOP||OP_SELLSTOP)如果变量是bool 的话,可能会起作用 ... ...但我不认为它可以用int 来工作。

有一件小事,你不需要在OrderDelete之前进行OderSelect。一般来说,你只有在使用不使用int 票的Order函数 时才需要OrderSelect。例如OrderComment( ), OrderCommission( )等。

 
好的,谢谢你,Raptor,我刚刚更新了我帖子上的代码。我记得你们说过,用条形 计数不好,所以我把它改成用条形时间。我修改了一下逻辑,看看是否可行。
 

好吧,我修复了这个逻辑。但它仍然没有删除订单。


正如我之前提到的,我把计数器从酒吧换到了其他地方......


extern string  sComment4                = "Max Hours allowed before pending orders are deleted";
extern int     pendinglimit        = 4;

// * EVERYTIME A TRADE GETS TRIGGERED 

bartraded = TimeHour(TimeCurrent());


   if(TimeHour(TimeCurrent()) > (bartraded + pendinglimit) && Tradeopen()==true)      // Check to see if pending orders have expired
     {
        for(int tnumber = OrdersTotal()-1; tnumber >= 0 ; tnumber--)                  //scan through open orders
        {
          if (OrderSelect(tnumber, SELECT_BY_POS) &&   
             ((OrderType()==OP_BUYSTOP)|| (OrderType()== OP_SELLSTOP)) &&               // The order selected is either a pending buy on stop order or a buy on sell order
             ((OrderMagicNumber()== Mnumber1) || (OrderMagicNumber()==Mnumber3)))       // The orders magic number is the same as the magic number used in this ea
          
               {
                OrderDelete(tnumber);                                                 // Delete it
               }
        }
     }
 

dazamate:
好的,谢谢你Raptor,我刚刚更新了我帖子上的代码。我记得你们说过,用条形来计算是不好的,所以我把它改为用条形时间。我修改了一下逻辑,看看是否可行。
"条数 是不可靠的(一旦你达到图表上的最大条数,它就不会改变,代码就会中断。 Volume[0]==1是不可靠的,如果你错过了一个刻度,代码就会中断。总是使用时间。"

是真的,但你需要看看这个评论是在什么情况下做出的。 酒吧 是不可靠的 ....

int Bars 

Number of bars in the current chart

但这并不意味着你不能用条数来代替小时数。 例如,你的代码将如何应对周五 晚上和周日的情况?

另外,如果交易是在22:00进行的,会发生什么情况?

if(TimeHour(TimeCurrent()) > (bartraded + pendinglimit) && Tradeopen()==true)      // Check to see if pending orders have expired
 

好吧,我看到了时间策略的问题。但如果我们用条形图作为计数器,一旦图表达到最大条形图,它也会失败,对吗?

我将回去看看我能想出什么办法......

 

好吧,这个方法如何?


extern string  sComment4                = "Max Hours allowed before pending orders are deleted";
extern int     pendinglimit        = 4;
 
// * EVERYTIME A TRADE GETS TRIGGERED* 

bartraded = 0;


  if (Time0 == Time[0]) return; Time0 = Time[0];          // make sure each bar is only scanned once
       {   
//-----------------------------------------------------------------------------------------------------------------------------------------------
//TRADE COUNTER
   

   bartraded++;  // Each time a new bar opens add 1 to the counter

//------------------------------------------------------------------------------------------------------------------------------------------------
// DELETE PENDING ORDERS THAT HAVE NOT BEEN TRIGGERED WITHIN 'pendinglimit'

   if(bartraded > pendinglimit && Tradeopen()==true)      // Check to see if pending orders have expired
     {
        for(int tnumber = OrdersTotal()-1; tnumber >= 0 ; tnumber--)                  //scan through open orders
        {
          if (OrderSelect(tnumber, SELECT_BY_POS) &&   
             ((OrderType()==OP_BUYSTOP)|| (OrderType()== OP_SELLSTOP)) &&               // The order selected is either a pending buy on stop order or a buy on sell order
             ((OrderMagicNumber()== Mnumber1) || (OrderMagicNumber()==Mnumber3)))       // The orders magic number is the same as the magic number used in this ea
          
               {
                OrderDelete(tnumber);                                                 // Delete it
               }
        }
     }
 
dazamate:

好吧,我看到了时间策略的问题。但如果我们用条形图作为计数器,一旦图表达到最大条形图,它也会失败,对吗?


不是的,当前的H1条总是0条 ......在60分钟内,当前的H1条将是0条 ......条数问题 是如果你使用Bars, 意思是你图表上的条数 总数,或者你看的是你图表最左边的条数。

TimeHour(TimeCurrent())的条数是0,你可以使用iBarShift 获得你交易时的条数(你需要计算而不是存储它!!),然后做这样的事情

if (iBarShift(symbol, TF, Time_order_Placed)+1 >  pendinglimit) && Tradeopen()==true)  
 

好吧,第三次幸运了,我花了点时间才明白你想说什么。所以这是我所做的。但是订单仍然没有被删除 >:(


static datetime tradeopened;


//Everytime a trade is opened I run
 tradeopened = TimeCurrent();


 if((iBarShift(hothand(),60 ,tradeopened)>pendinglimit) && Tradeopen()==true)          // Check to see if pending orders have expired
     {
        for(int tnumber = OrdersTotal()-1; tnumber >= 0 ; tnumber--)                  //scan through open orders
        {
          if (OrderSelect(tnumber, SELECT_BY_POS) &&   
             ((OrderType()==OP_BUYSTOP)|| (OrderType()== OP_SELLSTOP)) &&     // The order selected is either a pending buy on stop order or a buy on sell order
             ((OrderMagicNumber()== Mnumber1) || (OrderMagicNumber()==Mnumber3)))     // The orders magic number is the same as the magic number used in this ea
          
               {
                OrderDelete(tnumber);                                                 // Delete it
               }
        }
     }
 
是的,只是再次阅读了你的评论,我所做的是错误的。
tradeopened = TimeCurrent()
不会给我条形图的开放时间,我必须使用Time[0]吗?
 

试试这个;-)

OrderDelete(OrderTicket( ) );                    // Delete it