[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 4

 
splxgf:

你如何确定这两者中的哪一个?

https://book.mql4.com/ru/trading/orderclose

并在必要时按符号过滤,完全工作的例子

https://book.mql4.com/ru/trading/ordermodify


我在用下面的例子来确定,但它只关闭了最后一个挂单,而不是第一个,尽管第一个挂单的所有条件都满足。帮助我找到一个错误!!!!!!!!!!!!!

 if (Bid>=Openup-0.0005)
 {
 for(int count = OrdersTotal()-1; count >= 0; count--)
  {  
     OrderSelect(count, SELECT_BY_POS, MODE_TRADES);
     if (OrderType() == OP_BUYLIMIT)
       {  
        OrderDelete(ticket,CLR_NONE);
       }
  }
 }
 
Andreev:


我在用下面的例子来确定,但它只关闭了最后一个挂单,而不是第一个,尽管第一个挂单的所有条件都满足。帮助我找到一个错误!!!!!!!!!!!!!


最简单的方法是通过神奇的数字来确定两者中哪个顺序关闭。当你设置它们时,给它们分配不同的号码。你上面展示的例子缺少这种检查。也要写OrderTicket() 而不是ticket
 
tol64:

最简单的方法是通过神奇的数字来确定两者中哪个顺序关闭。当你设置它们时,给它们分配不同的号码。你上面展示的例子缺少这种检查。也要写OrderTicket() 而不是ticket

谢谢你的答复我已经被告知了一个神奇的数字,但在定义一个待定订单 时该把它放在哪里,以及如何把它与票据联系起来 - 我不明白。
 
Andreev:

谢谢你的答复有人建议我使用神奇数字,但我不明白在定义挂单时应将其放在哪里,以及如何将其与票据联系起来。


魔术应该在开单时设置,但我们必须确保不同订单的数量是不同的,否则就没有意义,下面是一个链接,可以看到OrderSend函数 的完整描述,其中所有变量都可以在开单时设置,是你应该对魔术变量感兴趣,但为了正确工作,它之前的所有变量都必须填写,之后的所有变量--按你的想法填写。

https://docs.mql4.com/ru/trading/OrderSend

 
LazarevDenis:


魔术应该在开单时设置,但要确保不同订单的数量是不同的,否则就没有意义了,下面是一个链接,可以看到OrderSend函数的完整描述,其中所有的变量都可以在开单时设置,你应该对魔术变量感兴趣,但为了正确工作,它之前的所有变量都应该填写,之后的所有变量--你认为合适。

https://docs.mql4.com/ru/trading/OrderSend


为什么不同的订单需要不同的魔法?
 

请给我正确的代码。我写了一个EA,它在编译过程中只产生了两个错误--我不知道如何去掉它们。

这些错误 1) 'SL' - 变量已经定义 C:\Program Files\MetaTrader Finam\experts\$.mq4 (43, 11)

和2)'TP' - 变量已经定义 C:³ Files\MetaTrader Finam\experts\$.mq4(45, 11)。

下面是专家顾问的代码。

 
extern int  

            Diapazon=1200,
            Slipege=500,
            TP=1500,
            SL=15000;   
            
double pa, pb, pt;
int    ls, dg;                  

  int start()                                // Спец. функция start()
  {  
   
   pa=MarketInfo(Symbol(),MODE_ASK);
   pb=MarketInfo(Symbol(),MODE_BID);
   pt=MarketInfo(Symbol(),MODE_POINT);
   dg=MarketInfo(Symbol(),MODE_DIGITS);
   ls=MarketInfo(Symbol(),MODE_STOPLEVEL);
   
   //---------------------------------------+
    
   if
   
   {
   
   double variable1 = NormalizeDouble(pa+ls*pt,dg); 
  
   double variable2 = NormalizeDouble(pb-ls*pt,dg);
   
   //---------------------------------------------+ 
  
   double pa = NormalizeDouble(Ask+Diapazon*Point,Digits);
   
   double SL = NormalizeDouble(Bid+(Diapazon-SL)*Point,Digits);
  
   double TP = NormalizeDouble(Ask+(Diapazon+TP)*Point,Digits);

 
  
   double pb = NormalizeDouble((Bid+Diapazon*Point,Digits);
  
   double SL = NormalizeDouble(Bid+(Diapazon+SL)*Point,Digits);
  
   double TP = NormalizeDouble(Bid+(Diapazon-TP)*Point,Digits);
   
   }
  
                                       // Открытие BUY
                                         
   OrderSend(Symbol(),OP_BUYSTOP, 0.05,Ask+Diapazon*Point,3,Bid+(Diapazon-SL)*Point,Ask+(Diapazon+TP)*Point);
   
                                     // Открытие SELL
   
   OrderSend(Symbol(),OP_SELLSTOP,0.05,Bid+Diapazon*Point,3,Bid+(Diapazon+SL)*Point,Bid+(Diapazon-TP)*Point);  

   return;                                   // Выход из start()
  }
  
 
Vinin:

以及为什么不同的授权书需要不同的魔法?

显然是为了这个--上面的几个帖子:-)))- "确定两者中哪个顺序关闭的最简单方法是通过神奇的数字。当你设置它们时,给它们分配不同的号码。你上面展示的例子缺少这种检查。也要写OrderTicket()而不是ticket"。
 
tol64:

最简单的方法是通过神奇的数字来确定两者中哪个顺序关闭。当你设置它们时,给它们分配不同的号码。你上面展示的例子缺少这种检查。另外,用OrderTicket() 来代替ticket

记住设置订单的时间,然后在循环中比较时间,删除最旧的那个。
 
Andreev:


我在用下面的例子来确定,但它只关闭了最后一个挂单,而不是第一个,尽管第一个挂单的所有条件都满足。帮助我找到一个错误!!!!!!!!!!!!!


不排除第一笔订单转化为市场订单的变体,以及因此不可能通过这个循环去除限价订单的情况?