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

 
dazamate:
是的,刚刚又读了一遍你的评论,我所做的是错误的。
不会给我酒吧开业时间,我必须使用Time[0]吗?


是的,或者......。

tradeopened = TimeHour(TimeCurrent());
 
OrderDelete(OrderTicket( ) );  

这就解决了问题,猛禽。


--------->http://clip2net.com/s/14aYs

 
dazamate:

这就解决了问题,猛禽。


--------->http://clip2net.com/s/14aYs

大笑,很高兴能提供一些帮助。. . :-)
 

伙计,你给了我很多帮助,我现在终于有了EA的状态,可以开始调整策略了。非常感谢你,但我怀疑你已经听到了我的最后一句话,抱歉地说,哈哈。


也非常感谢WHRoeder
 

所以......你认为它已经结束了,lol


我添加了一些代码,可以根据移动平均线 的值来跟踪止损。这段代码在买入交易中运行良好,但在卖出交易中却不起作用。我不能发现什么,也许你们可以。


// Trailing Stop Code 

   if(Tradeopen()==true && emastoptrail==TRUE)                                  // Trades are open and Trailing stop feature is turned on
    {
      for(int tnumber2 = OrdersTotal()-1; tnumber2 >= 0 ; tnumber2--)                   //scan through open orders
       {
        if (OrderSelect(tnumber2, SELECT_BY_POS) && 
            OrderMagicNumber()==Mnumber3)                                                // The orders magic number is the same as the magic number used the profit trade
            {                                          
          
            if(OrderType()==OP_BUY && (iMA(Symbol(), 60, ematrailperiod, 0, 1, 0, 1) > OrderStopLoss() ))       // The stop loss is less than the moving average value
          
               {
                OrderModify(OrderTicket(),OrderOpenPrice(),iMA(Symbol(), 60, ematrailperiod, 0, 1, 0, 1),OrderTakeProfit(),0);  // Modify Stop to MA value
               }
            
            if(OrderType()==OP_SELL && (iMA(Symbol(), 60, ematrailperiod, 0, 1, 0, 1) < OrderStopLoss() ))       // The stop loss is more than the moving average value
          
               {
                OrderModify(OrderTicket(),OrderOpenPrice(),iMA(Symbol(), 60, ematrailperiod, 0, 1, 0, 1),OrderTakeProfit(),0);   // Modify Stop to MA value
               }
            }
       }
     }
 

追踪止损代码可能不是问题所在。在一定时间后删除挂单 的代码有问题...。


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

   if((iBarShift(Symbol(),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(OrderTicket( ) );                                            // Delete it
               }
        }
       
     }

在每笔交易开始后,我也运行这个...

tradeopened = TimeHour(TimeCurrent());

我评论...

(iBarShift(Symbol(),60 ,tradeopened)

它从1000开始,在每个新条形上不断计数,当我运行时不会被重置......

tradeopened = TimeHour(TimeCurrent());


这使得删除挂单的检查永远是真实的,如果交易在下一个条形图中没有被触发,挂单将被直接删除 -__-

Ahhh HELP lol

 

我想我可能已经解决了这个问题....

我把它改了,这样一来,删除交易的另一个检查是把时间向后移,即挂单 的最大允许时间,看看它是否与交易开始的时间相符 :)

  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
              (iTime(   Symbol(), 60, pendinglimit) == tradeopened))
               {
                OrderDelete( OrderTicket() );                                            // Delete it
               }
        }
 
dazamate:

我想我可能已经解决了这个问题....

我改变了它,这样一来,删除交易的另一个检查是将时间向后移,即挂单可以打开的最大允许时间,看看它是否与交易打开的时间相符 :)

你几乎有了我所设想的东西 . . . .

使用你的tradeopened变量有一个问题 ......如果有开放的交易,EA被关闭,你就会失去该变量中的信息 ......为什么不把它替换成OrderOpenTime( ),然后做这样的事情 ......

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

              (iBarShift(OrderSymbol(),PERIOD_H1 ,OrderOpenTime()) - pendinglimit) <= 0));    //  <----------- this . . .

               {
                OrderDelete( OrderTicket() );                                            // Delete it
               }
        }
 
唯一的问题是,我之前一直在使用ibarshift功能,由于某些原因,它的输出量超过了1000。
 

另外,猛禽我需要再次挑选你的大脑.... :)


有什么方法可以把移动平均 数值变成度数吗?我现在只是在谷歌上搜索,看看能不能找到任何数学论坛的资料。这样的话,就可以很容易地检测出市场的横盘和明确的上升和下降趋势。