Errores, fallos, preguntas - página 1550

 

Hay lógicas complejas que funcionan durante veinticuatro horas, pero en un momento dado se congelan. Esto ocurre a veces en EX5, cuyo código fuente no se puede editar. ¿Es posible determinar desde el exterior que un indicador o un Asesor Experto se cuelga? ¿Recoger estadísticas sobre la parte calculada de un determinado indicador?

Con los indicadores, parece posible, porque están en un estado colgado matan la actualización de los gráficos en su símbolo. El Asesor Experto puede rastrearlo, aunque sin especificar qué indicador causó el rastro.

 
Estableciendo récords de prohibiciones. Durante las prohibiciones recibo respuestas en el foro, pero sólo puedo leerlas. Y después de que se levante otra prohibición es muy difícil recordar a quién y dónde contestó para continuar. ¿Es posible resolver este asunto (sin el consejo de no ser baneado más)? Y, en general, a veces uno lee, pero no tiene tiempo de responder de inmediato. ¿Es posible establecer una bandera de recordatorio para "responder más tarde"?
 
comp:
Estableciendo récords de prohibiciones. Durante las prohibiciones recibo respuestas en el foro, pero sólo puedo leerlas. Y después de que se levante otra prohibición es muy difícil recordar a quién y dónde contestó para continuar. ¿Es posible resolver este asunto (sin el consejo de no ser baneado más)? Y, en general, a veces uno lee, pero no tiene tiempo de responder de inmediato. ¿Es posible establecer un indicador de recordatorio para "responder más tarde"?
Primero hay que pensar, y luego hacer. No al revés. Entonces no habrá problemas de memoria.
 
Karputov Vladimir:
Primero hay que pensar y luego hacer. No al revés. Entonces no habrá problemas de memoria.
¡¡¡Palabras de oro !!!
 
Vladimir Pastushak:
¡¡¡Palabras de oro !!!
¡¡¡Totalmente apoyado!!! ¿Es posible responder a una pregunta-sugerencia
comp:
A veces lo lees y no tienes tiempo de responder de inmediato. ¿Es posible poner algún tipo de indicador de recordatorio para "responder más tarde"?
 
comp:
¿Es posible poner una bandera de recordatorio a ti mismo para "responder más tarde"?
Te entiendo en parte. Todo el mundo quiere una solución a sus problemas inmediatos. En tu caso, es demasiado. Tú, incluso sentado en una casa de baños, estás tratando de construir desarrolladores.
 

Pregunta sobre MathRound() en MQL4, que "devuelve un valor redondeado al entero más cercano de un valor numérico especificado".

Código:

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

Resultado:


¿Pueden ustedes explicar por qué es así? Si debe ser así, por favor, añade en la documentación que sólo se tiene en cuenta el primer dígito después del punto.

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

Colegas, por favor, ayuda. No tengo suficiente cerebro propio.

El robot, que ha colocado órdenes de Límite, necesita eliminar la orden restante al cerrar una posición abierta (no importa si está en stop o en beneficio), pero no todas las órdenes, sino aquella cuyo número mágico es igual al ticket de la posición cerrada. Por lo tanto, el desencadenante del borrado debe ser el evento de cierre de la posición. Para mí no importa en este caso, cómo esta posición ha cerrado (sólo por la condición resultará que si el cierre por SL, entonces no hay límites, que debe ser eliminado). Pero si detallamos y lo hacemos bien, el gatillo es un TP.

Por lo tanto, el robot borra la orden, pero no después de que la posición se haya cerrado, sino tan pronto como se haya abierto. Y empieza a luchar contra sí mismo colocando yborrando constantementelas órdenes pendientes. Por favor, vea lo que está mal.

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
И начинает бороться сам с собой, постоянно выставляя и удаляя отложенные ордера. - - Категория: общее обсуждение
 
Me pueden decir si hay un mecanismo incorporado para determinar en qué mercado está funcionando el robot de trading, es necesario identificar los mercados FOREX y FORTS.
 

Ayuda, chicos, no puede poner el idioma ruso en MT4 en Macbook, parece estar presente, pero se muestra en jeroglíficos, pero en el editor de meta está bien. Lo construí todo a través de Play on mac,

Se agradecería mucho el uso de Wine 1.9.4.