Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1914

 
Anatoliy Markov #:

Gracias por su participación. La declaración de intenciones es clara para mí. Estoy atascado con la implementación...

Lo intenté con los comentarios. Hasta el segundo grupo numera correctamente. En el tercero devuelve uno por el comentario, aunque el primer grupo sigue en el mercado. No se trata de multiplicar los números, sino de tomar los vacíos. Espero haberlo explicado claramente).

No está del todo claro, pero sigue utilizando el botón para insertar el código


o ALT+s

 
void OnTick()
{
  //---
    
    for(int a=1; a<10; a++)
     {
       comment="";
       for(int i=0; i<OrdersTotal(); i++)
         {
          if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            {
             if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
               {    
                  if (OrderComment()==IntegerToString(a)) continue; 
                  else
                  {
                   comment=IntegerToString(a);
                   break;                  
                  } 
               }
            } 
         } 
        if(comment!="") break; 
     }
    if (CountOfBuy(magic)<1 && CountOfSell(magic)<1) comment="1";
  //---
}
Да, так более информативно. Т.е. этот незамысловатый модуль должен давать коммент для 
последующего присвоения ордеру. Когда открыта группа с комментом 1, он дает коммент 2 (это правильно). 
Когда открыта 2-я группа, опять дает 1. Не могу понять.
 

Buenas noches a todos.

Escribí una función que determina si una orden pendiente ya está establecida, pero la función no funciona por alguna razón. ¿Puede decirnos dónde está el error? Sinceramente, Vladimir.

//+------------------------------------------------------------------+
//| Функция IsMainPendingOrder (установлен отложенный ордер):        |
//| возвращает истину, если в советнике уже установлен отложенный    |
//| ордер, в противном случае возвращает ложь.                       |
//| Применим для функции с типом данных bool, чтобы хранить          |
//| логические значения true (истина) или false (ложь).              |
//+------------------------------------------------------------------+
bool IsMainPendingOrder()
  {
   int orders_total=OrdersTotal(); // количество установленных отложенных ордеров
//--- перебираем все установленные отложенные ордера
   for(int i=orders_total-1; i>=0; i--)
     {
      ulong  order_ticket=OrderGetTicket(i); // тикет ордера
      /* если отложенного ордера нет, значит и у нашего советника отложенного ордера нет */
      if(OrderSelect(i)==false)
         return false; // поэтому возвращаем ложь
     }
   /* если отложенный ордер уже есть и его мэджик совпадает с мэджиком нашего советника */
   if(OrderGetInteger(ORDER_MAGIC)==Magic_Number)
      return true;  // то возвращаем истину
   /* в противном случае, если отложенный ордер уже есть, но его мэджик не совпадает с мэджиком нашего советника */
   else
      return false; // значит это чья-то чужая позиция, поэтому возвращаем ложь
  }
 
MrBrooklin una orden pendiente ya está establecida, pero la función no funciona por alguna razón. ¿Puede decirnos dónde está el error? Sinceramente, Vladimir.

¡¡¡HE ENCONTRADO EL ERROR YO MISMO!!!

Aquí hay un código que funciona normalmente. Puede ser útil para alguien. Saludos, Vladimir.

//+------------------------------------------------------------------+
//| Функция IsMainPendingOrder (установлен отложенный ордер):        |
//| возвращает истину, если в советнике не установлен отложенный     |
//| ордер, в противном случае возвращает ложь.                       |
//| Применим для функции тип данных bool, чтобы хранить              |
//| логические значения true (истина) или false (ложь).              |
//+------------------------------------------------------------------+
bool IsMainPendingOrder()
  {
   int orders_total=OrdersTotal(); // количество установленных отложенных ордеров
//--- перебираем все установленные отложенные ордера
   for(int i=orders_total-1; i>=0; i--)
     {
      ulong  order_ticket=OrderGetTicket(i); // тикет ордера
      /* если отложенного ордера нет, значит и у нашего советника отложенного ордера нет */
      if(OrderSelect(i)==false)
         return true; // поэтому возвращаем значение истина
      else // в противном случае
         return false; // возвращаем значение ложь
     }
   /* если отложенный ордер уже есть и его мэджик совпадает с мэджиком нашего советника */
   if(OrderGetInteger(ORDER_MAGIC)==Magic_Number)
      return true;  // то возвращаем истину
   /* в противном случае, если отложенный ордер уже есть, но его мэджик не совпадает с мэджиком нашего советника */
   else
      return false; // значит это чужой ордер, поэтому возвращаем значение ложь
 

Por favor, aconsejen cómo organizarse o qué camino seguir:

Aquí, para no realizar el cálculo de barras, se inventaron los topes. Con cada nuevo tick sólo se comprueba la última barra (según tengo entendido). Cuando aparezca una nueva barra, el cálculo se iniciará sólo con esta barra.

Gracias al búfer, las líneas no se vuelven a dibujar en todo el historial, sino que se añade un segmento adicional al último borde. Hay 8 topes en total.

¿Qué pasa si tengo que hacer un cálculo cien veces (digamos 100 veces para dibujar una línea, cambiando sólo una variable), y luego dibujar el mejor resultado. Y en un nuevo tick o temporizador hacer lo mismo, pero con el "historial" de resultados existente (dibujos). ¿Dónde y cómo puedo almacenar esta información para no tener que recalcular todo el historial?

O, más sencillamente, ¿cómo aumentar el número de topes en el indicador? ¿Quizás escribirlos por separado en un archivo? ¿Qué es mejor?
 
Ivan Butko #:

Por favor, aconsejen cómo organizarse o qué camino seguir:

Aquí, para no realizar el cálculo de barras, se inventaron los topes. Con cada nuevo tick sólo se comprueba la última barra (según tengo entendido). Cuando aparezca una nueva barra, el cálculo se iniciará sólo con esta barra.

Gracias al búfer, las líneas no se vuelven a dibujar en todo el historial, sino que se añade un segmento adicional al último borde. Hay 8 topes en total.

¿Qué pasa si tengo que hacer un cálculo cien veces (digamos 100 veces para dibujar una línea, cambiando sólo una variable), y luego dibujar el mejor resultado. Y en un nuevo tick o temporizador hacer lo mismo, pero con el "historial" de resultados existente (dibujos). ¿Dónde y cómo puedo almacenar esta información para no tener que realizar estos cálculos en todo el historial?

O, para decirlo de forma más sencilla, ¿cómo puedo aumentar el número de topes de un indicador? ¿Tal vez escribir por separado en un archivo? ¿Cuál es la mejor manera de

En los indicadores hay 512 buffers.

 
Artyom Trishkin #:

En los indicadores hay 512 buffers.

Oh, vaya. Gracias. Debo haber estado buscando en el lugar equivocado. Seguiré intentándolo.

 
MrBrooklin #:

¡¡¡ERROR ENCONTRADO POR MI MISMO!!!

Aquí hay un código que funciona normalmente. Puede ser útil para alguien. Saludos, Vladimir.

No será útil para nadie. Hay errores graves en su código. Y no tiene sentido corregirlos.

Ni siquiera te molestas en aprender lo básico del idioma e intentas escribir algo.

O te lo tomas en serio o lo dejas.

 
Koldun Zloy #:

Nadie puede usarlo. Hay errores graves en su código. Y no tiene sentido corregirlos.

Ni siquiera te molestas en aprender lo básico del idioma, y tratas de escribir algo.

O te pones serio o lo dejas.

¡Buenos días! Sí, tienes toda la razón. Tenemos que dejar este asunto inútil de ir a la

Cualquier pregunta de los novatos sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos

y esperar la ayuda aquí.

Saludos, Vladimir.

 
MrBrooklin #:
¡Buenos días! Sí, tienes toda la razón. Tienes que dejar este asunto sin sentido, que es aplicar a la

Cualquier pregunta de los novatos en MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos

y esperar aquí la ayuda.

Sinceramente, Vladimir.

Tienes razón, déjalo.

Ni siquiera has entendido lo que he escrito en ruso.

¿Por qué quiere dedicarse a la programación?