[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 47

 
Tiken123:

Si conoce la función para calcular el saldo total de pérdidas de posiciones CERRADAS por SL y el saldo total de operaciones rentables ABIERTAS, por favor escriba.

El cálculo del balance de pérdidas debe comenzar con el último valor máximo del depósito

Tu pregunta es algo similar a la anterior, así que he retocado un poco la función de la respuesta anterior. Confieso que no lo he probado, pero debería funcionar. Las variables de ganancias y pérdidas declaradas a nivel global deben mostrar el total de ganancias y pérdidas respectivamente para las posiciones cerradas.

Si necesita hacer esto también para las órdenes abiertas, añada un segundo bucle for para seleccionarlas no en el historial, sino según el criterio OrdersTotal(): for(int n=1; n<=OrdersTotal(); n++)

Y sumar los valores obtenidos a las mismas variables beneficio y pérdida .

//+----------------------------------------------------------------------------+
// Прибыльно или убыточно закрылся последний ордер, и возврат типа такого ордера
int fHistory(){
  profit = 0; loss = 0;
  for(int i=OrdersHistoryTotal(); i >= 0; i--){               // Выборка в истории
     if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true){    // Если есть следующий в истории
        if(OrderMagicNumber()!=magN) continue;                // Ордера не нашего эксперта

        if(OrderProfit() > 0 ) profit = profit+OrderProfit(); // Если прибыль по посл.ордеру - суммируем

        if(OrderProfit() < 0 ) loss = loss + OrderProfit();   // Если убыток по посл.ордеру - суммируем

     }
  }
  return(-1);
}
 
Twilight:

Por ejemplo, necesito saber si se ha activado un límite de compra pendiente y, si lo ha hecho, a qué precio, para luego establecer uno nuevo.

Si hay una orden de tipo OP_BUYLIMIT en cada tick utilizando la función OrderType(), cuando este tipo desaparece, significa que la orden se ha abierto y se ha convertido en OP_BUY.Aquí se enumeran los 6 tipos. Con la función OrderOpenPrice() se puede saber a qué precio se abrió la orden.
 
Twilight:

¿Cómo puedo saber si una orden ha activado un trailing stop y colocar nuevas órdenes cuando se ha activado el trailing stop?

¿Quiere cerrar el pedido o modificarlo?
Si está cerrado, ¿necesita saber si acaba de cerrar? ¿O se cerró con un StopLoss? (Puede cerrar en TakeProfit y OrderClose() o OrderCloseBy())
 

Aquí está mi nueva función de control de barras:

bool IsNewBar()
{
  if(bartime != iTime(Symbol(),i_trading_TF,0))
  {
    bartime = iTime(Symbol(),i_trading_TF,0);
    return(true);
  }
  
  return(false);
}

donde, i_trading_TF es una variable declarada globalmente externa. Así, cuando configuro mi Asesor Experto en un gráfico, puedo establecer el valor de esta variable en la ventana emergente y así establecer el marco temporal de la apertura de la barra a controlar.

He visto una función similar en un Asesor Experto pero con un parámetro formal en la cabecera de la función. Aquí está:

bool IsNewBar(int i_trading_TF)
{
  if(bartime != iTime(Symbol(),i_trading_TF,0))
  {
    bartime = iTime(Symbol(),i_trading_TF,0);
    return(true);
  }
  
  return(false);
}

El marco temporal se pasa a través del parámetro de la función. Sin embargo, si la variablei_trading_TF está declarada a nivel global, no creo que tenga sentido pasarla mediante un parámetro formal ya que su visibilidad no está limitada.

Por favor, comente este punto.

La primera opción también me funciona, pero es curioso que algunos programadores tengan la costumbre de rellenar con parámetros formales incluso aquellas funciones en las que yo no lo haría.

 
pu6ka:
En cada tic, controle la presencia de una orden con tipo OP_BUYLIMIT utilizando la función OrderType(), cuando este tipo desaparece, significa que la orden se ha abierto y se ha convertido en tipo OP_BUY.Aquí se enumeran los 6 tipos. Con la función OrderOpenPrice() se puede saber a qué precio se abrió la orden.
No tiene por qué serlo. Se puede matar manualmente. Más bien, es necesario memorizar el ticket de la orden; en cuanto encontremos la ausencia de la orden con este ticket y la aparición de una posición de mercado con el mismo ticket - entonces sí, se activa...
 
hoz:

Aquí está mi nueva función de control de barras:

donde, i_trading_TF es una variable declarada globalmente externa. Así, cuando configuro mi Asesor Experto en un gráfico, puedo establecer el valor de esta variable en la ventana emergente y así establecer el marco temporal de la apertura de la barra en la que quiero controlar.

He visto una función similar en un Asesor Experto pero con un parámetro formal en la cabecera de la función. Aquí está:

El marco temporal se pasa a través del parámetro de la función. Sin embargo, si la variablei_trading_TF está declarada a nivel global, no creo que tenga sentido pasarla mediante un parámetro formal ya que su visibilidad no está limitada.

Por favor, comente este punto.

La primera opción también me funciona, pero es curioso que algunos programadores tengan la costumbre de rellenar con parámetros formales incluso aquellas funciones en las que yo no lo haría.

Tiene sentido si el EA analiza varios fotogramas y se debe formar una nueva barra en cada fotograma.

Eso no es todo, vamos a añadir el nombre del instrumento a los parámetros transferidos

bool IsNewBar(string Symb,int i_trading_TF)
{
  if(bartime != iTime(Symb,i_trading_TF,0))
  {
    bartime = iTime(Symb,i_trading_TF,0);
    return(true);
  }
  
  return(false);
}
y analizar el hecho de que se forme una nueva barra de cualquier instrumento de cualquier época.
 
artmedia70:
No necesariamente. También se puede matar manualmente. Más bien, hay que recordar el ticket de la orden pendiente; en cuanto falta una orden pendiente con ese ticket y aparece una posición de mercado con el mismo ticket, entonces sí, se activa...

Sí, eso es más correcto. Pero podemos comprobar la idea en el probador así. Para rastrear cuatro tipos de órdenes pendientes, necesitamos 4 variables adicionales para rastrear los ticks. Aunque si hay más de un pendiente para un tipo, entonces debería introducir una variable para los billetes.
 
r772ra:

Tiene sentido si el EA analiza varios marcos y cada marco necesita el hecho de formar una nueva barra.

Eso no es todo, vamos a añadir el nombre del instrumento a los parámetros

y analizar el hecho de que se forme una nueva barra, cualquier símbolo, y punto.

¿Cree que es razonable "involucrar" un símbolo en el "mecanismo de búsqueda de un nuevo bar"? :)))
 
TarasBY:
¿Cree que es apropiado "involucrar" a un símbolo en el "mecanismo para encontrar un nuevo bar"? :)))

Sería interesante hacer un control universal de la nueva barra. Por cierto - todo está ahí para eso
 
Vinin:

Sería interesante hacer un control universal de la nueva barra. Por cierto - todo está ahí para eso
¡¿Estás hablando de "considerar" y DC?! ;)
Razón de la queja: