Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 100

 
alexey1979621:
Hola a todos. Esta es la pregunta. Cómo medir la distancia entre el Alto y el Bajo de la primera, segunda y tercera vela y prescribir la condición de que esta distancia de cada vela no sea inferior, por ejemplo, a 10 puntos. Gracias de antemano.

Estas son las variables del entorno del mercado que le ayudarán a https://docs.mql4.com/ru/predefined/variables
 
artmedia70:
Levantamiento de robots... :)


Aha ha ha. yosuf, Cyborg te envió... )))))))
 
artmedia70:

Aquí hay un EA para probar la función. Contiene la propia función y su llamada. Antes de llamarlo, hay que preparar un mensaje, que puede tener hasta cuatro líneas. La longitud de cada línea, si no recuerdo mal, no debe superar los 64 caracteres. Por eso he dividido un mensaje en varias líneas. Cada línea de un mensaje puede salir en un color diferente. Está bastante claro en el código: primero preparamos las líneas de mensajes y luego llamamos a la función. No he comentado mucho allí - lo escribí de un tirón hace tiempo. Ahora ya he olvidado para qué sirve. Si tengo alguna duda, lo recordaré, pero ahora sólo recuerdo las cosas necesarias.

Y un pavo:

Así es... Espero que le cojas el tranquillo.

Por supuesto, puedo hacer un underlay en lugar de emitirlo al gráfico principal en la ventana del indicador, pero soy demasiado perezoso ... :)



Artem, he mirado tu código, el pavo es la bomba: )))). En esencia, todo está claro con más, aunque he visto un par de puntos en la aplicación, un poco diferente de lo que yo hubiera hecho, pero eso es sólo una pequeña cosa.

Esto es lo interesante. Sólo se imprime en el pavo lo que está en el experto. Pero, ¿cómo utilizarlo en beneficio propio?

 
hoz:


Artem, he mirado tu código, el pavo es la bomba: )))). En esencia, todo está claro con más, aunque he visto un par de puntos en la aplicación, un poco diferente de lo que yo habría hecho, pero eso es sólo nimiedades.

Esto es lo interesante. Sólo lo que está en el Asesor Experto se imprime en el tablero. Pero, ¿cómo puedo utilizarlo en mi beneficio?

No entiendo la pregunta. Sustituye a la función Print(). Envía todos los mensajes a la ventana del indicador. Puede establecer el color para cada línea de un mensaje (como la prioridad del mensaje). Más cómodo que la impresión. Eso es todo el uso.
 

Es una función. Ese experto es sólo para mostrar lo que hace la función. Por lo tanto, utilice esa función para mostrar los mensajes de su EA.

Ese experto sólo muestra cómo utilizarlo.

 
artmedia70:

Es una función. Ese experto es sólo para mostrar lo que hace la función. Por lo tanto, utilice esa función para mostrar los mensajes de su EA.

Ese experto sólo muestra cómo utilizarlo.


Aunque sí... Es una función... Me perdí lo más importante mientras lo averiguaba :(
 

Hay un nuevo dolor de cabeza. Esto es lo que hay que hacer para conseguirlo:

1. Hay un número de órdenes en el mercado, es decir, hay órdenes de mercado y pendientes en el mercado todo el tiempo.

2. En un momento determinado, cuando la última orden abierta hasta el momento es cerrada por un TP, necesitamos cerrar todas las órdenes que se abrieron y eliminar también todas las pendientes.

Yo lo hice así (lo puse en la función start() ):

for (int ord=OrdersTotal()-1; ord>=0; ord--)
   {
      if (!OrderSelect(ord,SELECT_BY_POS)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
        
      g_ticket = OrderTicket();
      g_type = OrderType();
              
      // Блок модификации ордеров       
      if (i_sl != 0 || i_tp != 0)
      {
         if (OrderStopLoss() == 0 && OrderTakeProfit() == 0)
         {
            OrdersModifyer(g_ticket);
         }
      }
      // Закрытие всех ордеров, если последний ордер закрыт
      if (GetLastOrderState() != 0)              
      {
          if (g_type > 1)
          {
              DeletePendingOrders(g_ticket);
          }
          else
          {
              CloseMarketOrders(g_ticket);
          }
      }
   }

La función GetLastOrderState() comprueba si el último pedido está cerrado:

//+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
datetime GetLastOrderState()
{
   datetime lastOrderCloseTime = -1,                   // Время закрытия последнего ордера
            lastOrderOpenTime = -1;                    // Время открытия последнего ордера
   
   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
  
      if (lastOrderOpenTime < OrderOpenTime())
          lastOrderOpenTime = OrderOpenTime();
   }
   Comment("Время открытия последнего открытого ордера = ", lastOrderOpenTime);
   for (int h=OrdersHistoryTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(h, SELECT_BY_POS, MODE_HISTORY)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      
      if (OrderOpenPrice() == lastOrderOpenTime)
          lastOrderCloseTime = OrderCloseTime();
   }
  // Comment("Время закрытия последнего открытого ордера = ", lastOrderCloseTime);
   return (lastOrderCloseTime);
}

Y luego las funciones de eliminación de órdenes de mercado pendientes y de cierre. Veo que no está funcionando correctamente de alguna manera. ¿Está bien mi función?

Entiendo que la función está en orden por idea. Pero la lógica no está bien aquí. ¿Tiene alguna idea sobre este tema? Resulta que, en cualquier caso, incluso cuando ninguna de las órdenes del EA se ha cerrado por TP, todo se cierra en un instante después de haber sido abierto por la señal...

 
hoz:

Aha ha ha. yosuf, Cyborg te envió... )))))))
Aun así, es un buen proger que responde. Como si todos los problemas fueran suyos, para que el destino pague, incuestionablemente, o, se encuentre con el grial.
 
yosuf:
Aun así, un proger bueno y simpático. Como si todos los problemas fueran suyos, para que el destino premie, sin duda, o, se encuentre con el grial.


Pero no había nada concreto y, por tanto, ninguna pregunta. No sé qué responder.... Debes tratar de explicar la situación lo más claramente posible para obtener una respuesta.
 
hoz:

Hay un nuevo dolor de cabeza. Esto es lo que hay que hacer para conseguirlo:

1. Hay un número de órdenes en el mercado, es decir, hay órdenes de mercado y pendientes en el mercado todo el tiempo.

2. En un momento determinado, cuando la última orden abierta hasta el momento es cerrada por un TP, necesitamos cerrar todas las órdenes que se abrieron y eliminar también todas las pendientes.

Yo lo hice así (lo puse en la función start() ):

La función GetLastOrderState() comprueba si el último pedido está cerrado:

Y luego las funciones de eliminación de órdenes de mercado pendientes y de cierre. Veo que no está funcionando correctamente de alguna manera. ¿Está bien mi función?

Entiendo que la función está en orden por idea. Pero la lógica no es buena aquí. ¿Tiene alguna idea sobre este tema? Resulta que, en cualquier caso, aunque ninguna de las órdenes del EA se haya cerrado en TP, todo se cierra en un instante después de haber sido abierto por la señal...

Victor, toma la función probada de Kim que comprueba si una posición está cerrada por TP:

isCloseLastPosByTake - Devuelve una bandera para cerrar la última posición en la toma. Encontrar en Sólo funciones útiles
Y luego cerrar todo.