[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 86

 
BeerGod:

Traduce la variable a mapear a una impresión o comentario en cadena DoubleToStr( valor doble, dígitos int) y establece la precisión deseada.

https://docs.mql4.com/ru/convert/DoubleToStr

https://docs.mql4.com/ru/common/comment


Bien, gracias. También estaba pensando en hacerlo así, o construir a través de ObjecCreate()...
 
okvseok:

por favor, sugiera una función que cuente el número de órdenes perdedoras (desde la última) hasta el último take profit...

Gracias.

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

        if(OrderProfit() < 0 ) loss = loss++;                 // Если убыток по посл.ордеру - считаем
        
        if(OrderProfit() > 0 ) return(loss);                  // Если прибыль, вернем количество убыточных
     }
  }
  return(-1);
}
 

¿cuántas veces tengo que llamar aOrderSelect antes de usar OrderProfit(), OrderType() etc.? ¿es suficiente una vez dentro de Start o cada vez antes de usar OrderProfit, OrderType etc. tengo que llamar aOrderSelect?

¿y OrderSelect tiene que ser llamado inmediatamente antes de OrderProfit o puede ser llamado en cualquier lugar al principio, siempre y cuando sea ?

 
hoz:

Escribí la pregunta, pero nadie pareció darse cuenta. No quería escribir una pregunta tan larga aquí para no confundir a todo el mundo. Tenga en cuenta...

https://www.mql5.com/ru/forum/142983

Inténtalo de esta manera:

int OrderCloseCount(double ordOpPrice, datetime ordOpTime)
{
  // slippage= Взять из OrderSend
  int timePlusMinus=20; // Пусть будет 20 сек.
  int count = 0;
  
  for (int i = OrdersHistoryTotal() - 1; i >= 0 ; i--)
  {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
      if (OrderSymbol() != Symbol()) continue;
          if (MathAbs(OrderOpenPrice()-ordOpPrice) <= slippage*Point && MathAbs(OrderOpenTime()-ordOpTime))< timePlusMinus)
              count++;
  }
  
   return (count);
}

Porque no hay garantía de que sus órdenes se abran exactamente al mismo precio y a la misma hora.

 
hoz:

Escribí la pregunta, pero nadie pareció darse cuenta. No quería escribir una pregunta tan larga aquí para no confundir a todo el mundo. Tenga en cuenta...

https://www.mql5.com/ru/forum/142983

Ya te he dado un algoritmo aproximado en ese hilo (lo he corregido ligeramente aquí para que se entiendan mejor algunos matices) y no hace falta que empieces un huerto:


El algoritmo es tan sencillo como un panecillo.

El cierre parcial no cambia el Magic. El billete cambia, pero el Magic no.

Hay una pose abierta y niveles en los que esta pose debería estar parcialmente cerrada.

Supongamos que el Nivel1, el Nivel2 y el Nivel3.

Si la posición de compra está en beneficios y Bid >= Nivel1 && Bid< Nivel2 ---> cerramos la primera parte de la posición (con el lote que sea menor que el lote de esta posición, siempre que el lote restante no sea menor que el lote mínimo), entonces:

Si Oferta >= Nivel2 && Oferta< Nivel3 ---> cerrar la segunda parte de la posición (por un lote menor que el lote de esta posición, siempre que el lote restante no sea menor que el lote mínimo), además:

Si Oferta >= Nivel3 && Oferta<Nivel4 ---> cerrar la tercera parte de la posición (por un lote menor que el lote de esta posición, siempre que el lote restante no sea menor que el lote mínimo), además:

1. Si al cierre parcial en el nivel Bid>=NivelX el lote ha pasado a ser inferior al lote mínimo ---> cerrar toda la posición

2) Si después del tercer cierre al nivel Bid>=Nivel3 todavía hay una posición, acompañe la posición restante con un arrastre después de pasar el Nivel4, o ciérrelo todo de una vez.

Eso es todo.

Para la venta, nos fijamos en Ask: Ask<=Nivel1 && Ask>Nivel2 ... etc...

Hacer un bucle sobre todas nuestras posiciones, seleccionar cada una de ellas por índice, calcular sus niveles y lotes de cierre para la posición seleccionada y disfrutar del algoritmo de trabajo... :)

Al mismo tiempo no hay necesidad de almacenar en la memoria del EA (en variables) los valores de estos niveles, lo cual es muy conveniente - si el EA por alguna razón termina su trabajo, entonces después de la reanudación no perderá los datos sobre los niveles - los recalculará para cada posición sobre la marcha.

Una cosa más: después de un cierre parcial, no se olvide de retroceder el stop de protección. Tras el cierre en el nivel 1 - stop en el punto de equilibrio, tras el cierre en el nivel 2 - stop en el nivel 1, tras el cierre en el nivel 3 - stop en el nivel 2, etc.


 
Hola a todos, ¿alguien tiene un ejemplo de un Asesor Experto que utilice un indicador personalizado?
 
dimarik0000:
Hola a todos! ¿Alguien tiene un ejemplo de un EA que utilice un indicador personalizado?
¿Cuál es el problema?
 
artmedia70:
¿Cuál es el problema?


He leído el artículo sobre la transferencia de un indicador personalizado al código del Asesor Experto y me he confundido. ¿Debo hacerlo o basta con especificar ciertos parámetros del indicador en el código?
 
dimarik0000:

He leído el artículo sobre la portación de un indicador personalizado en el código del Asesor Experto y estoy confundido, ¿debo hacerlo o es suficiente con especificar sólo algunos parámetros específicos del indicador en el código?
Si no tiene mucha experiencia, es mejor que utilice iCustom() o que estudie a fondo y entienda el principio de funcionamiento del indicador antes de añadir su lógica al Asesor Experto.
 

713
borilunad 15.01.2013 12:10

Podrías resolver un misterio: ¿Por qué cuando inserté esta función || isCloseLastPosByTake() == True || el experto en el probador empezó a ralentizar mucho, ¡por 10! Esta es una de las 4 condiciones mutuamente excluyentes, por lo que no puedo utilizar la cadena if como en las condiciones sumadas para que el código se ejecute más rápido. ¿Qué puede aconsejarme? Gracias de antemano por sus consejos.