Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 246

 
Valeriy Yastremskiy:

Gracias. Lo intentaré. No sé si funcionará).

 
Tengo órdenes abiertas y cerradas.
1. Al abrir una orden, necesito escribir su Ticket en un array, si el array está desocupado (probablemente =0), para poder informar desde él más tarde en la sobrecarga.
2. Después de cerrar la orden (puede que no esté cerrada), debe iniciarse el informe sobre el beneficio de las órdenes cerradas. Cuando se alcanza un determinado beneficio, es decir: beneficio + Take Profit >= beneficio de una orden abierta (llamémosla Orden 123), abierta antes que todas las demás, o con una pérdida máxima (aún no lo he decidido).
3. Si se cumplen las condiciones: "suma de beneficio + taka beneficio >= beneficio de la orden abierta(llamémosla orden 123)", la orden 123 se cierra y la matriz se pone a cero (probablemente se convierte en = 0 ).

1. Cuando colocas un EA, ¿ya tienes órdenes abiertas y cerradas que quieres tener en cuenta o no y el EA siempre empieza sin órdenes abiertas y no tiene en cuenta las órdenes abiertas ya cerradas?

2. No está nada claro. Usted tiene varias órdenes. Cuando se cierra una orden, se calcula el beneficio total y aparecen los datos del beneficio de la orden cerrada. Y ahí están los datos sobre los beneficios de las órdenes que no están cerradas; puedes calcularlos. Qué se compara con qué. Por ejemplo, tenemos 3 pedidos. 1 está cerrado, 2 se está cerrando, 3 está abierto. Tenemos los perfiles Pr1, Pr2 y el estimado Pr3. Comparamos qué con qué. Entendemos que no se tienen en cuenta las comisiones y los canjes cuando la orden no está cerrada.

3. En realidad, si se pone a cero la matriz con las entradas, ¿qué pasará después? Las órdenes de mercado permanecerán en el mercado. ¿Cómo los cerraría?

 
Oksana_Timakova:
Pregunta: ¿Cómo puedo mantener el valor de la barra alta ay de la barra baja b paraconectarlos con una línea indicadora?
¿Debo crear dos matrices adicionales para ello?
Sí. Matrices de búfer.
 
Valeriy Yastremskiy:
Sí. Matrices de búfer.
Así que es lo mismo que en ZigZag. ¿Y tienes que aplicar alguna función especial para no dibujar dos de ellos?
 
Oksana_Timakova:
Entonces, resulta como en ZigZag. ¿Y hay que aplicar alguna función especial para no dibujar dos de ellos?
El tipo de línea es el mismo. No entiendo qué es lo que no se dibuja. Se declaran 2 matrices de búferes. Tú estableces las propiedades. Es el tipo de línea, el color del grosor. Y se asigna el primer precio máximo y el segundo mínimo por barra de la serie temporal.
 
Valeriy Yastremskiy:

1. Cuando colocas un EA, ¿ya tienes órdenes abiertas y cerradas que quieres tener en cuenta o no, y cada vez el EA arranca sin órdenes abiertas y no tiene en cuenta las órdenes cerradas anteriormente?

2. No está nada claro. Usted tiene varias órdenes. Cuando se cierra una orden, se calcula el beneficio total y aparecen los datos del beneficio de la orden cerrada. Y ahí están los datos sobre los beneficios de las órdenes que no están cerradas; puedes calcularlos. Qué se compara con qué. Por ejemplo, tenemos 3 pedidos. 1 está cerrado, 2 se está cerrando, 3 está abierto. Tenemos los perfiles Pr1, Pr2 y el estimado Pr3. Comparamos qué con qué. Entendemos que no se tienen en cuenta las comisiones y los canjes cuando la orden no está cerrada.

3. En realidad, si se pone a cero la matriz con las entradas, ¿qué pasará después? Las órdenes de mercado permanecerán en el mercado. ¿Cómo se cierran?

Una vez más ))))

Tenemos órdenes abiertas, supongamos 5 órdenes que son todas negativas. El primero (123) con 0,5 lotes ha caído en menos. Abrimos una nueva orden (456) con 0.1 lote, el ticket de esta orden se escribe en el array cuando se abre. Luego procedemos con otra serie de órdenes con el mismo lote; ganamos algunas ganancias y perdemos otras. Pero la orden 123 sigue siendo negativa y abierta. Una vez que el beneficio de todas las órdenes cerradas después de la orden 456 (también está cerrada) es mayor que el beneficio de la orden 123, encontramos la orden 123 ya que es la primera orden que sigue abierta, la cerramos y ponemos a cero el array.

Si tenemos varias órdenes abiertas, abrimos una más bajo ciertas condiciones. Supongamos que si el total del pedido>=5

fin de pedido (billete 456)

si la orden se abre con éxito

si la matriz no está ocupada

El ticket 456 se escribe en la matriz

La orden 456 se cerró en beneficio (sin importar la ganancia o la pérdida), después se abrieron y cerraron otras órdenes, pero el array almacena la entrada 456.


CalCloseProfi () - esta función comprueba el beneficio de las órdenes cerradas

recorre las órdenes cerradas por magia, compra, venta, empezando por la orden con ticket 456 (tomada del array) y hacia arriba, y cuenta su beneficio


FirstOrder() - esta función busca la primera orden abierta (debería encontrar la 123)

Si el perfilCalCloseProfi> FirstOrder, entonces cierra la orden 123 y pone a cero el array, de manera que pueda volver a escribir allí cuando se cumplan las condiciones.


No sé de qué otra manera explicarlo)

Las condiciones en las que se ejecutará esta función, puedo escribir, pero no me enfrento a las matrices.
Necesito un ejemplo, cómo obtener información en el array, concretamente OrederTicket cuando se abre, y cómo obtenerla después.
Es deseable utilizar una matriz doble y escribir el mago en una parte de ella, de modo que cuando se trabaja en una cuenta en diferentes configuraciones no se mezclan (o tal vez no, no soy bueno en las matrices).

Gracias de antemano

 
makssub:

Una vez más ))))

Hay órdenes abiertas, supongamos 5, todas negativas. La primera (123) con 0,5 lotes fue negativa. Abrimos una nueva orden (456) con 0.1 lote, el ticket de esta orden se escribe en el array cuando se abre. Luego procedemos con otra serie de órdenes con el mismo lote; ganamos algunas ganancias y perdemos otras. Pero la orden 123 sigue siendo negativa y abierta. Una vez que el beneficio de todas las órdenes cerradas después de la orden 456 (también está cerrada) es mayor que el beneficio de la orden 123, encontramos la orden 123 ya que es la primera orden que sigue abierta, la cerramos y ponemos a cero el array.

Si tenemos varias órdenes abiertas, abrimos una más bajo ciertas condiciones. Supongamos que si el total del pedido>=5

fin de pedido (billete 456)

si la orden se abre con éxito

si la matriz no está ocupada

El ticket 456 se escribe en la matriz

La orden 456 se cerró en beneficio (sin importar la ganancia o la pérdida), después se abrieron y cerraron otras órdenes, pero el array almacena la entrada 456.


CalCloseProfi () - esta función comprueba el beneficio de las órdenes cerradas

recorre las órdenes cerradas por magia, compra, venta, empezando por la orden con ticket 456 (tomada del array) y hacia arriba, y cuenta su beneficio


FirstOrder() - esta función busca la primera orden abierta (debería encontrar la 123)

Si el perfilCalCloseProfi> FirstOrder, entonces cierra la orden 123 y pone a cero el array, de manera que pueda volver a escribir allí cuando se cumplan las condiciones.


No sé cómo explicarlo de otra manera)

Las condiciones en las que se ejecutará esta función, puedo escribir, pero no me enfrento a las matrices.
Necesito un ejemplo, cómo poner la información en el array, es decir OrederTicket al abrir, y cómo obtenerla después.
Es deseable utilizar una matriz doble y escribir el mago en una parte de ella, de modo que cuando se trabaja en una cuenta en diferentes configuraciones no se mezclan (o tal vez no, no soy bueno en las matrices).

Gracias de antemano

Escribe las condiciones de las funciones.
 

Buenas tardes. ¿Pueden decirme por qué hay un error: array fuera de rango en '.......'? (152,41)


ticket = OrderSend (Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, tpl, Magic, 0, Red);
if (ticket <1)
{
Print("Sell open error");
}
if (ticket >1 && SaveTick [1] <= 0 && SaveTick[0] == Magic)
{
FindTicket();
Print(" Orden de entradas: ", FindTicket(), " Order Array: ", SaveTick[1], " Array Magic: ", SaveTick[0]);
}

int FindTicket()
{
int oldticket;
int tick=0;
ticket=0;
ArrayResize( SaveTick, 2 );
for(int cnt = OrdersTotal ()-1; cnt>=0; cnt--)
{
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
oldticket = OrderTicket();
if (oldticket > ticket)
{
ticket = oldticket;
tick = OrderTicket();
SaveTick[1] = tick;
SaveTick[0] = Magic;
}
}
}
}
return(tick);
}

 
makssub #:

Buenas tardes. ¿Puede decirme por qué hay un error: array fuera de rango en '.......'? (152,41)


ticket = OrderSend (Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, tpl, Magic, 0, Red);
            if (ticket <1)
            {
               Print("Ошибка открытия на продажу");
            }
               if (ticket >1 && SaveTick[1] <= 0 && SaveTick[0] == Magic)
            {
               FindTicket();
               Print(" Тикет ордера: ", FindTicket(), " Массив ордера: ", SaveTick[1], " Магик массива: ", SaveTick[0]);
    }

int FindTicket()
   {
   int oldticket;
   int tick=0;
   ticket=0;
   ArrayResize( SaveTick, 2 );
   for(int cnt = OrdersTotal ()-1; cnt>=0; cnt--)
      {
      if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
         {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
            {
            oldticket = OrderTicket();
            if (oldticket > ticket)
               {
               ticket = oldticket;
               tick = OrderTicket();
               SaveTick[1] = tick;
               SaveTick[0] = Magic;
               }
            }
         }
      }
   return(tick);
  }              

Inserte el código correctamente, alt S o por el icono, código de pista.

¿Por qué se necesita la matrizSaveTick?

Sólo se utilizan 2 elementos del array. Sustitúyelas por variables globales o estáticas si las declaras en una función.

No es sensato utilizar un array para 2 variables.

Y parece que llamas a los arrays antes de llamar a la funciónFindTick(), donde se establece el tamaño del array SaveTick. Y hay un rebasamiento de la matriz.

 
¿Ha dejado de funcionar 🤖?