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

 
Лауреат:
Cómo hacer una función que cierre una posición abierta por su propio puente después de que haya pasado un número determinado de velas en el historial de tiempo.
int numBars = 5;
void OnTick()
{
     for(int i = OrdersTotal(); i >= 0; i--)
     {
          if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))continue;
          if( OrderSymbol() != _Symbol)                continue;
          if( OrderMagicNumber() != Magic)             continue;
          if( OrderOpenTime() > Time[numBars-1] )      continue; 
          
          /* work */
     }
}
 
sviter-pro:
¡¡¡Estoy experimentando!!! la lógica es específica!!! ¿puede ayudarme?

¿Qué tiene de específico?

Mira la última posición, y abre la posición opuesta.

 
Konstantin Nikitin:

Lo comprobaré.

 
sviter-pro:

Lo comprobaré bien.

 

Hola. Por favor, ayuda con la función. En una cuenta, se supone que hay varios EAs operando. Cada EA no puede abrir más de una operación por día. Necesito una función que devuelva true si el EA ya tuvo una operación, y false si no hubo ninguna operación. La comprobación debería hacerse por arte de magia en la fecha actual, según tengo entendido. Si me pueden ayudar, pienso construir esta función en cada uno de mis EA, que necesitarán dicha comprobación. Si puedo ayudar, estoy planeando construirlo en cada uno de mis EAs donde necesito tal verificación.

 
Kolya32:

Hola. Por favor, ayuda con la función. En una cuenta, se supone que el comercio con varios EAs. Cada EA no puede abrir más de una operación por día. La función debe devolver true si hubo una operación, y false si no hubo ninguna operación. La comprobación debería hacerse por arte de magia en la fecha actual, según tengo entendido. Si me pueden ayudar, pienso construir esta función en cada uno de mis EA, que necesitarán dicha comprobación. Si puedo ayudar, estoy planeando construirlo en cada uno de mis EAs donde necesito tal verificación.

Todo se ha hecho ya antes que nosotros )) Vea aquí.

 

Parece que necesito la función isTradeToDay(). Bueno, voy a experimentar) Gracias.

He corregido la función por mí mismo comentando int mn=-1 y sustituyendo mn por Magic. ¡Después de ejecutar el EA con esta función en el probador, vi una gran desventaja: el tiempo de prueba del EA aumentó POR AÑOS! Ahora he decidido probar el Asesor Experto con esta característica en una cuenta demo. Tengo 5 Asesores Expertos en mi cuenta y me preocupa que las operaciones se abran con retraso...

bool isTradeToDay(string sy="", int op=-1 /*,int mn=-1*/) {
int i, k=Total de Pedidos();

if (sy=="0") sy=Símbolo();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (Magic<0 || OrderMagicNumber()==Magic) {
if (TimeDay(OrderOpenTime())==Day()
&& TimeMonth(OrderOpenTime())==Month()
&& TimeYear(OrderOpenTime())==Year()) return(True);
}
}
}
}
}
}
k=Total de pedidos();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (Magic<0 || OrderMagicNumber()==Magic) {
if (TimeDay(OrderOpenTime())==Day()
&& TimeMonth(OrderOpenTime())==Month()
&& TimeYear(OrderOpenTime())==Year()) return(True);
}
}
}
}
}
}
return(False);
}

 

Hay que marcar el nivel de equilibrio de la parrilla en el gráfico.

Beneficio en pips:

double current_Prof_Pts = current_Prof_Bux/current_summ_lot/(SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/(SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)/_Point)

Posición de equilibrio para la parrilla de COMPRA

zero = Bid-current_Prof_Pts*_Point

(Para la venta, respectivamente: Ask+current_Prof_Pts*_Point)

Resultado: parece ser cierto, pero siempre salta alrededor del valor verdadero en unos 3 puntos.

¿Puede decirme dónde está el error?

 
Kolya32:

Parece que necesito la función isTradeToDay(). Bueno, experimentaré) Gracias.

¡He encontrado una gran desventaja: el tiempo de prueba de un EA ha aumentado EXACTAMENTE CINCO VECES!

Sí, por supuesto. La función está escrita de forma universal. Si se accede con cada tic, el bucle recorre todo el historial de la cuenta. Y el historial de la cuenta puede ser bastante profundo (he visto casos en los que había más de 100 000 pedidos). Para acelerar la ejecución, no es necesario ejecutar el bucle en todo el historial cada vez. Basta con hacerlo una sola vez al principio y recordar el índice del último pedido procesado. La próxima vez, hay que recorrer el bucle sólo para los pedidos que tienen un índice mayor que el índice almacenado. Después, vuelve a recordar el índice de la última orden, y así sucesivamente.

 
Igor Zakharov:

Hay que marcar el nivel de equilibrio de la parrilla en el gráfico.

Beneficio en pips:

Posición de equilibrio para la parrilla de COMPRA

(Para la venta, respectivamente: Ask+current_Prof_Pts*_Point)

Resultado: parece ser cierto, pero siempre salta alrededor del valor verdadero en unos 3 puntos.

Por favor, indíqueme dónde está el error.

La culpa la tiene el diferencial flotante.