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

 
Falx:

¡Buenos días a todos!

Por favor, dame una orden para que el robot no abra más de 1 orden por 1 vela.

Incluso si tomó su toma en esta vela - no para abrir la siguiente orden en la misma vela.

Ahora resulta que si se cumplen las condiciones de los indicadores - abrir una operación.

Cuando se cierra una operación en la toma, inmediatamente se abre una nueva operación en la misma vela, y aquí ya me resulta innecesario y crea problemas.

Creo que es importante dar algunos comentarios.

Necesita un trato estrictamente de 1 vela - 1 trato.

Muchas gracias de antemano.

La horade abrir una posición, la hora de cerrar la posición - la vela en la que esta hora y la hora de apertura de esta vela.
 
Falx:

¡Buenos días a todos!

Por favor, dame una orden para que el robot no abra más de 1 orden por 1 vela.

Incluso si tomó su toma en esta vela - no para abrir la siguiente orden en la misma vela.

Ahora resulta que si se cumplen las condiciones de los indicadores - abrir una operación.

Cuando se cierra una operación en la toma, inmediatamente se abre una nueva operación en la misma vela, y aquí ya me resulta innecesario y crea problemas.

Creo que es importante dar algunos comentarios.

Necesita un trato estrictamente de 1 vela - 1 trato.

Gracias de antemano.

También puedes utilizar la bandera.

Declarar una variable estática bool o una variable global, que sea flag. Orden abierta - flag = true, una nueva vela abierta - flag = false y añadir este flag a la condición de apertura de la orden.

 
Alexey Viktorov:

También puedes utilizar una bandera.

Declarar variable estática bool o variable de nivel global, que sea flag. Orden abierta - flag = true, una nueva vela abierta - flag = false y añadir este flag a la condición de apertura de la orden.

La bandera debe ser guardada en el terminal global y restaurada en su reinicio.
 
Artyom Trishkin:
La bandera debe ser guardada en el terminal global y restaurada en su reinicio.

Depende del periodo en el que se encuentre la operación y de la posibilidad de reiniciar el terminal en una barra para abrir una orden y reiniciar el terminal.

No me gusta la GV y trato de prescindir de ella. Cuando se inicia un EA, debe recoger toda la información sobre las órdenes abiertas de todos modos, así que ¿por qué no restablecer el valor de la bandera en el inicio? Esta es una opción. La segunda variante es que el valor inicial de la bandera prohíbe la apertura de órdenes y sólo la siguiente barra dará permiso. Así, aunque hayamos abierto y reiniciado el EA en la barra actual, la bandera nos prohibirá de todas formas abrir órdenes hasta la siguiente barra.

Si da esos consejos con tanta sutileza, no tendrá que pensar en nada. Así que el número de preguntas aumentará en consecuencia... ¿Por qué decidir algo tú mismo... Pregunta en el foro y obtendrás una versión que funcione. Y lo único que queda es poner el producto en el mercado...

 
Alexey Viktorov:

Depende del periodo en el que se encuentre la operación y de la posibilidad de reiniciar el terminal en una barra para abrir una orden y reiniciar el terminal.

No me gusta la GV y trato de prescindir de ella. Cuando se inicia un EA, debe recoger toda la información sobre las órdenes abiertas de todos modos, así que ¿por qué no restablecer el valor de la bandera en el inicio? Esta es una opción. La segunda variante es que el valor inicial de la bandera prohíbe la apertura de órdenes y sólo la siguiente barra dará permiso. Así, aunque tengamos una nueva orden de apertura en la barra actual y reiniciemos el EA, la bandera prohibirá de todas formas la apertura de órdenes hasta la siguiente barra.

Sólo por dar consejos con tanta sutileza, no tendremos que pensar en nada. En consecuencia, el número de preguntas puede aumentar. ¿Por qué decidir algo tú mismo... Pregunta en el foro y obtendrás una versión que funcione. Y lo único que queda es poner el producto en el mercado...

:)
Tengo la costumbre de mirar al frente.
Para mí, precisamente porque las banderas todavía tienen que ser restauradas, es mejor mirar la barra de apertura de la posición, y bailar alrededor de ella, y no molestarse con las banderas y su almacenamiento.
 
Artyom Trishkin:
:)
Tengo la costumbre de mirar al frente.
Creo que es mejor mirar la barra de apertura de una posición, y luego empezar a bailar alrededor de ella, sin tener que preocuparse por las banderas y almacenarlas.

Es la misma razón por la que nos gustan mujeres diferentes.

¿Qué diferencia hay, la bandera o el momento de abrir una posición? No importa cómo lo hagas, todavía tienes que comprobar algo...
 

Hola, ¿pueden decirme cómo devolver el número de las últimas órdenes perdedoras, después de las rentables?

Aquí está mi código, ¿qué está mal?

int GetProfitLoss()// Pérdida en las órdenes cerradas (número de las últimas órdenes perdedoras)

{

int Pérdida = 0;

datetime lastCloseTime = 0;

int cnt = OrdersHistoryTotal();

for(int i=0; i < cnt; i++)

{

if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && lastCloseTime < OrderCloseTime())

{

lastCloseTime = OrderCloseTime();

}

si (OrderProfit()<0)

{

Pérdida ++;

}

if(OrderProfit()>0)

{

break; // Salir del bucle en la primera rentable encontrada }

}

}

}

}

retorno(Pérdida);

}

 
Falx:

¡Buenos días a todos!

Por favor, dame una orden para que el robot no abra más de 1 orden por 1 vela.

Incluso si tomó su toma en esta vela - no para abrir la siguiente orden en la misma vela.

Ahora resulta que si se cumplen las condiciones de los indicadores - abrir una operación.

Cuando se cierra una operación en la toma, inmediatamente se abre una nueva operación en la misma vela, y aquí ya no es necesario y me crea problemas.

Creo que es importante dar algunos comentarios.

Necesita un trato estrictamente de 1 vela - 1 trato.

Gracias de antemano.

Función NumberOfBarCloseLastPos().

Esta función devuelve el número de barra de la última posición que se ha cerrado, o-1. La selección de las posiciones a considerar se establece mediante parámetros externos:

  • sy- Nombre del instrumento de mercado. Si se establece este parámetro, la función sólo tendrá en cuenta las posiciones de este instrumento. El valor por defecto -NULL denota el instrumento de mercado actual.
  • tf- Marco temporal. El valor por defecto -0 indica el marco temporal actual.
  • op- Operación comercial, tipo de posición. Valores válidos:OP_BUY,OP_SELL o-1. El valor por defecto-1 significa cualquier posición.
  • mn- Identificador de posición, MagicNumber. El valor por defecto de-1 significa cualquier identificador.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара закрытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarCloseLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t=0;
  int      i, k=OrdersHistoryTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) t=OrderCloseTime();
            }
          }
        }
      }
    }
  }
  return(iBarShift(sy, tf, t, True));
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара открытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t=0;
  int      i, k=OrdersTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) t=OrderOpenTime();
            }
          }
        }
      }
    }
  }
  return(iBarShift(sy, tf, t, True));
}

La función NumberOfBarOpenLastPos().

Esta función devuelve el número de barra de la última posición abierta o-1. La selección de las posiciones a considerar está definida por parámetros externos:

  • sy- Nombre del instrumento de mercado. Si se establece este parámetro, la función sólo tendrá en cuenta las posiciones del instrumento especificado. El valor por defecto -NULL denota el instrumento de mercado actual.
  • tf- Marco temporal. El valor por defecto0 significa el marco temporal actual.
  • op- Operación comercial, tipo de posición. Valores válidos:OP_BUY,OP_SELL o-1. El valor por defecto-1 significa cualquier posición.
  • mn- Identificador de posición, MagicNumber. El valor por defecto de-1 significa cualquier identificador.

A continuación, utilizando estas funciones, compruebe la condición que necesita.

 

Por favor, ayuda.

Necesito añadir la siguiente función a mi robot:

Después de abrir una operación, en 40 segundos si el beneficio es superior a 15 pips, la operación se cierra instantáneamente, si es inferior, el takeprofit se mueve al nivel de beneficio de 15 pips.

Gracias de antemano.

 
Vladimir Zubov:

La función NumberOfBarCloseLastPos().

Esta función devuelve el número de cierre de barra de la última posición o-1. La selección de las posiciones a tener en cuenta se define mediante parámetros externos:

  • sy- Nombre del instrumento de mercado. Si se establece este parámetro, la función sólo tendrá en cuenta las posiciones de este instrumento. El valor por defecto -NULL denota el instrumento de mercado actual.
  • tf- Marco temporal. El valor por defecto -0 indica el marco temporal actual.
  • op- Operación comercial, tipo de posición. Valores válidos:OP_BUY,OP_SELL o-1. El valor por defecto-1 significa cualquier posición.
  • mn- Identificador de posición, MagicNumber. El valor por defecto de-1 significa cualquier identificador.

La función NumberOfBarOpenLastPos().

Esta función devuelve el número de barra de la última posición abierta o-1. La selección de las posiciones a considerar está definida por parámetros externos:

  • sy- Nombre del instrumento de mercado. Si se establece este parámetro, la función sólo tendrá en cuenta las posiciones del instrumento especificado. El valor por defecto -NULL denota el instrumento de mercado actual.
  • tf- Marco temporal. El valor por defecto0 significa el marco temporal actual.
  • op- Operación comercial, tipo de posición. Valores válidos:OP_BUY,OP_SELL o-1. El valor por defecto-1 significa cualquier posición.
  • mn- Identificador de posición, MagicNumber. El valor por defecto de-1 significa cualquier identificador.

A continuación, utilice estas funciones para comprobar la condición que necesita.


¡Muchas gracias!

¡¡¡Lo miraré!!!