错误、漏洞、问题 - 页 1550

 

有一些复杂的逻辑可以工作二十四小时,但在某一点上它们会冻结。这种情况有时会发生在EX5中,它的源代码不能被编辑。是否有可能从外部确定一个指标或一个专家顾问挂起?收集特定指标的计算部分的统计数据?

对于指标,似乎是有可能的,因为它们处于挂起的状态,它们会杀死其符号上的图表的更新。专家顾问可以追踪它,尽管没有指定是哪个指标造成的悬停。

 
创下禁令的记录。在禁言期间,我在论坛上得到了回复,但我只能阅读它们。而在另一个禁令被解除后,很难记住谁和谁的回答,以便继续。有没有可能解决这个问题(没有建议不要再被禁止)?而在一般情况下,有时你读了,但没有时间立即回应。是否可以将提醒标志设置为 "稍后回复"?
 
comp:
创下禁令的记录。在禁言期间,我在论坛上得到了回复,但我只能阅读它们。而在另一个禁令被解除后,很难记住谁和谁的回答,以便继续。有没有可能解决这个问题(没有建议不要再被禁止)?而在一般情况下,有时你读了,但没有时间立即回应。是否可以将提醒标志设置为 "稍后回复"?
首先你需要思考,然后做。而不是相反的方式。那么就不会有内存的问题了。
 
Karputov Vladimir:
你应该先思考,然后再做。而不是相反的方式。那么就不会有内存的问题了。
金玉良言!!!"。
 
Vladimir Pastushak:
金句!!!"。
完全支持!!!。是否有可能回复一个问题-建议
汇编
有时你读了它,却没有时间马上回复。有没有可能给自己设置某种提醒标志,让自己 "稍后回复"?
 
comp:
有没有可能给自己加一个 "稍后回复 "的提醒标志?
我部分地理解你。每个人都希望能解决他们眼前的问题。在你的情况下,它是太多了。你,即使是坐在澡堂里,也在试图把开发商建立起来。
 

关于MQL4中MathRound() 的问题,它 "返回一个四舍五入到指定数值的最接近的整数的值"。

代码。

#property strict
void OnStart()
  {
   Print("1) MathRound(10.50001) = ",MathRound(10.50001));  // 11.0
   Print("2) MathRound(10.49999) = ",MathRound(10.49999));  // 10.0
  }

结果。


你们这些好心人能否解释一下为什么会出现这种情况?如果应该是这样,请在文件中加上只考虑句号后的第一个数字。

MathRound - Математические функции - Справочник MQL4
MathRound - Математические функции - Справочник MQL4
  • docs.mql4.com
MathRound - Математические функции - Справочник MQL4
 

同事们,请帮忙。我自己的脑子不够用。

下了限价单的机器人,在关闭未平仓头寸(不管是止损还是盈利)时,需要删除剩余的订单,但不是每一个订单,而是魔法数字等于平仓票的那个订单。所以,删除的触发器必须是平仓事件。对我来说,在这种情况下,这个位置是如何关闭的并不重要(只是根据条件,如果通过SL关闭,那么就没有限制,必须删除)。但是,如果我们详细说明并做对了,触发器就是一个TP。

因此,机器人删除了订单,但不是在平仓后,而是在开仓后立即删除。而且它开始通过不断下达和删除待定订单 来与自己作斗争。请看看有什么问题。

input double   lot                  = 0.2;
input double   TakeProfitPips       = 50;
input double   StopLossPips         = 200;

int               bar=0;
int               shift=1;
int               tiket;
int               otkt;
double            price;
int               cnt;
double            TPp,SLp;
int               tkt;
int               n;
int               type;

    int _OrdersTotal = 0;
    // кол-во позиций, соответствующих критериям (текущий инструмент и заданный MagicNumber),
    // состоянием на текущий тик
    int now_OrdersTotal = 0;
    // кол-во позиций, соответствующих критериям (текущий инструмент и заданный MagicNumber),
    // состоянием на предыдущий тик
    static int pre_OrdersTotal = 0;
    // массив открытых позиций состоянием на текущий тик
    int now_OrdersArray[][2]; // [№ в списке][№ тикета, тип позиции]
    // текущий номер позиции в массиве now_OrdersArray (для перебора)
    int now_CurOrder = 0;
    // текущий номер позиции в массиве pre_OrdersArray (для перебора)
    int pre_CurOrder = 0;
    // массив для хранения количества закрытых позиций каждого типа
    int now_ClosedOrdersArray[6][3]; // [тип ордера][тип закрытия] 
 
    // временные флаги
    bool OrderClosed = true, PendingOrderOpened = false;
    // временные переменные
   

    int pre_OrdersArray[][2]; // [количество позиций][№ тикета, тип позиции]
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }


void OnTick()

  {

        if(OrdersTotal()== 0 && iTime(Symbol(),PERIOD_M1,1)==D'14.01.16 16:30')

        {
        
         price=Open[shift];

         tiket=OrderSend(Symbol(),OP_SELLLIMIT,lot,price,3,price+StopLossPips*Point,price-TakeProfitPips*Point);
         if(tiket<0)
           {
            Print("Ошибка OrderSend № - ",GetLastError());
           }
        }

     

   if(OrdersTotal()!=0)
     {
      for(cnt=0; cnt<OrdersTotal(); cnt++)

         OrderSelect(cnt,SELECT_BY_POS); // Если есть следующий
        {                                    // Анализ ордеров:
         price=OrderOpenPrice();
         otkt = OrderTicket();
         n=otkt;
         //--------------------------------------------------------------

 
         if(OrderType()==OP_SELL && OrderMagicNumber()==0)

           {
            tiket=OrderSend(Symbol(),OP_SELLLIMIT,lot*3,price+100*Point,1,price+StopLossPips*Point,price-TakeProfitPips*Point,"My order",n);
            tiket=OrderSend(Symbol(),OP_SELLLIMIT,lot*9,price+200*Point,1,price+StopLossPips*Point,price-TakeProfitPips*Point,"My order",n);
           }
        }

     }

  
        _OrdersTotal = OrdersTotal(); // запоминаем общее количество позиций
        ArrayResize( now_OrdersArray, _OrdersTotal ); // изменяем размер массива открытых позиций под текущее кол-во
        ArrayInitialize( now_OrdersArray, 0.0 ); // обнуляем массив
        now_OrdersTotal = 0; // обнуляем количество позиций, соответствующих критериям
        ArrayInitialize( now_ClosedOrdersArray, 0.0 ); // обнуляем массивы закрытых позиций и сработавших ордеров
       
 
        //+------------------------------------------------------------------+
        //| Перебираем все позиции и записываем в массив 
        //+------------------------------------------------------------------+
        for ( int z = _OrdersTotal - 1; z >= 0; z -- )
        {
            if ( OrderSelect( z, SELECT_BY_POS ) )
           
            {
                now_OrdersArray[now_OrdersTotal][0] = OrderTicket();
                now_OrdersArray[now_OrdersTotal][1] = OrderType();
                now_OrdersTotal ++;
            }
        }
        
        ArrayResize( now_OrdersArray, now_OrdersTotal ); // изменяем размер массива открытых позиций под кол-во позиций, соответствующих критериям
 
        //+------------------------------------------------------------------+
        //| Перебираем список позиций предыдущего тика, и считаем сколько закрылось позиций и
        //| сработало отложенных ордеров
        //+------------------------------------------------------------------+
        for ( pre_CurOrder = 0; pre_CurOrder < pre_OrdersTotal; pre_CurOrder ++ )
        {
            tkt = pre_OrdersArray[pre_CurOrder][0]; // запоминаем тикет и тип ордера
            type   = pre_OrdersArray[pre_CurOrder][1];
            
            OrderClosed = true; // предпологаем, что если это позиция, то она закрылась
           
            for ( now_CurOrder = 0; now_CurOrder < now_OrdersTotal; now_CurOrder ++ ) // перебираем все позиции из текущего списка открытых позиций
            {
                if ( tkt == now_OrdersArray[now_CurOrder][0] ) // если позиция с таким тикетом есть в списке,
                {   OrderClosed = false; // значит позиция не была закрыта (ордер не был удалён)
                    break;
                }
            }
           
            if ( OrderClosed )  // если была закрыта позиция (удалён ордер),
            {
                
                if (OrderSelect( tkt, SELECT_BY_TICKET )) // выбиаем ее
               
                    n = tkt; // присваеваем n номер тикета
                
            }   
      }  
     
        //+------------------------------------------------------------------+
        //| Удаляем ордер с магическим номером = тикету закрытой ранее позиции 
        //+------------------------------------------------------------------+
     for ( int z = _OrdersTotal - 1; z >= 0; z -- )
        {
            if ( OrderSelect( z, SELECT_BY_POS ) )
            otkt = OrderTicket();
            if (n == OrderMagicNumber ())
             {OrderDelete( otkt );}
         }
         
         return;
      }
Помогите отредактировать код, пожалуйста
Помогите отредактировать код, пожалуйста
  • www.mql5.com
И начинает бороться сам с собой, постоянно выставляя и удаляя отложенные ордера. - - Категория: общее обсуждение
 
你能告诉我是否有一个内置的机制来确定交易机器人在哪个市场上运行,你需要识别FOREX和FORTS市场。
 

帮助,伙计们,不能把俄语放在Macbook上的MT4上,它似乎是存在的,但它是以象形文字显示的,但在元编辑器中是好的。我都是通过Mac上的Play建立的。

如果能有Wine 1.9.4就更好了。