EA需要的简单代码(修改两个未结订单) - 页 4

 

这是我在几个帖子前的回答......这是最简单的方法......。

"我在一个特定的时间设置两个挂单,具体是23:00 GMT+2我想。其中一个挂单是卖出止损,另一个是买入止损,两个挂单离23:00蜡烛的开盘都有相等的距离,在这种情况下是14点。两者的止盈都是28点(在这种情况下),止损是55点"

你可以参照23:00的蜡烛图计算出原始TP的位置,检查订单,看它是否仍然设置为原始TP,如果是,那么它可以被修改 ...如果不是,那么它已经被修改了,所以不要再修改它。

 

试试这个......它可以编译,但我还没有在策略测试器中 尝试。

附加的文件:
madmax.mq4  10 kb
 
RaptorUK:

试试这个 ......它可以编译,但我还没有在策略测试器中试过 ......

我得到了 "OrderSenderror 130",尽管SL和TP似乎是正确的,而且 "OrderSend "的布局与之前的代码相同,但出于某种原因。为什么会出现这种情况?

我把这部分代码

   int CountOpenOrders = 0;
   double Candle23Open; 
   int Spread = MarketInfo(Symbol(), MODE_SPREAD);
   
   Candle23Open = Open[ iBarShift(NULL, 0, StrToTime("23:00") ) ]; // price value of the Open of the 23:00 hour candle
   
   for(int iPos = OrdersTotal()-1; iPos >= 0 ; iPos--)
      {
      if(OrderSelect(iPos,SELECT_BY_POS) && 
         OrderMagicNumber() == MagicNumber &&
         OrderSymbol() == Symbol() &&
         OrderType() < 2               //  less than 2 is either OP_BUY (0) or OP_SELL (1) 
         )
      CountOpenOrders++;
      } // end of for(int iPos  

   if(CountOpenOrders == 2)  //  we have 2 open orders,  should we modify or have the already been modified ?
      {
      for(iPos = OrdersTotal()-1; iPos >= 0 ; iPos--)
         {
         if(OrderSelect(iPos,SELECT_BY_POS) && 
            OrderMagicNumber() == MagicNumber &&
            OrderSymbol() == Symbol() 
            )
            {
            if(OrderType() == 1)               //  OP_SELL (1)  
               {
               if(OrderTakeProfit() > Candle23Open - ((TakeProfitModified - 1) * Point) + Spread )      //  check if TakeProfit has already been modified
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), Candle23Open - (TakeProfitModified * Point) + Spread, 0, Blue))
                     {
                     Print("Error modifying order : ",GetLastError());
                     return(0);
                     }
               }
            
            if(OrderType() == 0)               //  OP_BUY (0)
               {
               if(OrderTakeProfit() < Candle23Open + ((TakeProfitModified - 1) * Point) )      //  check if TakeProfit has already been modified
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), Candle23Open + (TakeProfitModified * Point), 0, Blue))
                     {
                     Print("Error modifying order : ",GetLastError());
                     return(0);
                     }
                  
               }
                  
            }         
         }
      }
   
        
   } 

并把它放在以前的EA(原来的那个)中,它打开了订单,但没有修改它们。虽然我认为如果在您提供的EA中修复OrderSend错误,它可能会起作用。

哦,在这部分。

if(!OrderModify

是什么!?

非常感谢。

madmax3

 
madmax3:


哦,在这部分。

什么是!?

非常感谢。

madmax3

检查过 OrderModify()的文档吗? 它的返回结果是什么?
 
madmax3:

我得到了 "OrderSend error 130",尽管SL和TP似乎是正确的,而且 "OrderSend "的布局方式与之前的代码有些相同,但出于某种原因。为什么会出现这种情况?

你是否调整了你的止损点和止赢点以考虑到5位数的经纪人?
 

我得到了它的工作,只是漏填了一个变量(与卖价和买价的距离)。OrderModify文档中没有解释这个!我相信。
代码似乎工作得很好,但有一个问题是,它只在两个交易开放时修改买入交易,而不是同时修改买入和卖出交易,我不知道它为什么这样做。有什么想法吗?

谢谢。

madmax3

 
madmax3:

我得到了它的工作,只是漏填了一个变量(与卖价和买价的距离)。OrderModify的文档没有解释这个!我相信。
这段代码似乎运行良好,但有一个问题是,它只在两个交易打开时修改买入交易,而不是同时修改买入和卖出交易,我不知道它为什么这样做。

谢谢。

madmax3

OrderModify返回一个bool ... ...所以 与bool相关的是NOT ...所以!OrderModify()意味着....如果OrderModify返回false,即失败。

我将再看看你的代码 ....或者我对它的修改。

 
madmax3:

我得到了它的工作,只是漏填了一个变量(与卖价和买价的距离)。OrderModify文档中没有解释这个!我相信。
代码似乎工作得很好,但有一个问题是,它只在两个交易开放时修改买入交易,而不是同时修改买入和卖出交易,我不知道它为什么这样做。有什么想法吗?

谢谢。

madmax3


你想让它为相同点数的买入和卖出交易修改止损吗?

再考虑一下,如果这是你想要的,你可以弄清楚为什么它不能这样修改....

另外,不要在每一个新的方向上修改交易,选择一个尾随步骤来允许修改(XX点可以选择10个或更多,以避免很多tradecontext太忙的错误)。

"!"是类似于不在编码中的东西

 
madmax3:

代码似乎运行良好,但有一个问题是,它只在两个交易打开时修改买入交易,而不是同时修改买入和卖出交易,我不知道它为什么这样做。有什么想法吗?

检查日志中的错误 ......如果在策略测试器中 运行,请检查日志选项卡,如果在实盘或模拟中,请检查专家选项卡。 让我知道你发现了什么 ......
 
RaptorUK:
检查日志中的错误 ......如果在策略测试器中运行,请检查日志选项卡,如果在实时或模拟中,请检查专家选项卡。 让我知道你的发现 ......
2012.04.09 21:21:27 2012.01.17 00:59 测试者:订单#1,卖出0.01欧元兑美元在1.26498开仓
2012.04.09 21:21:27 2012.01.17 02:21 测试员:订单#2,买入0.01欧元兑美元在1.26795开盘。

2012.04.09 21:21:27 2012.01.17 02:21 MadMax EURUSD,H1: 修改 #2 在1.26795买入0.01 EURUSD sl: 1.26218 tp: 1.27352 ok
2012.04.09 21:21:27 2012.01.17 03:00 MadMax EURUSD,H1: 修改#2买入0.01 EURUSD at 1.26795 sl: 1.26218 tp: 1.27480 ok

由于某些原因,它对买入交易进行了两次修改(第二次修改到所需的TP,然而在某些交易中,它似乎一直在某些整点上进行修改,如9:00或10:00),但似乎没有任何实际的错误。