Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 494

 
Nickolay72:
Hasta ayer, mi EA sólo ha abierto una orden y la siguiente no se abrirá hasta que yo ponga una orden. Ahora, ¿cómo hacer que mi EA abra órdenes cuando la barra anterior ha abierto por encima (por debajo) del canal?
 if (CountTrades()==0) CheckForOpen();
   else
  {
   if(CountTrades()<max_trades) CheckForOpen();
  }

Si analiza este fragmento de código, entonces, según este código, si la función CountTrades() devuelve cero, se ejecutará la condición if (CountTrades()==0) CheckForOpen(), y se llamará a la funciónCheckForOpen(). En el siguiente tick, si la orden se ha abierto, la funciónCountTrades() debe devolver 1, y entonces se cumple la condición else

....  
else
  {
   if(CountTrades()<max_trades) CheckForOpen();
  }

Si parece que CountTrades()<max_trades, se ejecutará de nuevo la funciónCheckForOpen(). Según el código, el valor de la variable max_trades es igual a 3. Así, tendrá 4 órdenes abiertas.

Si el EA no abre las órdenes correctamente, entonces compruebe la lógica, en la que se definen las condiciones bajo las que se deben abrir las posiciones en la función CheckForOpen(). Y también comprobar las condiciones de tiempo si (CurrTime < EaStartTime || CurrTime >= EaEndTime). En su lugar, utilizaría la función if (TimeHour(TimeCurrent()) = hora de inicio && TimeMinute(TimeCurrent()) = minutos de inicio ). La hora y los minutos se establecen en variables de tipo int o uint.

 
Artyom Trishkin:
Si la barra libre número 1 está por encima/debajo del canal.
Maldita sea, acabo de ver que tengo una operación alrededor del límite inferior del canal, sólo copié las órdenes y no corregí la parte inferior a la superior, probaré la versión corregida).
//-----Ставим ордер на покупку.
 if(PriceCurrentOpen<PriceLow&&PriceCurrentOpen<PriceCurrentClose&&SignalCurrent<MacdCurrent&&SignalMAPrevious<SignalMAThis)
 {
  ticket=OrderSend(NULL,OP_BUY,Lots,Ask,slippage,0,0,"5",magic,0,Blue);
   if(ticket>0)
    return; 
 }
//-----Ставим ордер на продажу.
 if(PriceCurrentOpen>PriceLow&&PriceCurrentOpen>PriceCurrentClose&&SignalCurrent>MacdCurrent&&SignalMAPrevious>SignalMAThis)
 {
  ticket=OrderSend(NULL,OP_SELL,Lots,Bid,slippage,0,0,"5",magic,0,Red);
   if(ticket>0)
    return;

	          
 
Vitalii Ananev:

Así, tendrá 4 órdenes abiertas.

Si el EA no abre las órdenes correctamente, entonces compruebe la lógica, donde se especifican las condiciones bajo las cuales se deben abrir las posiciones en la función CheckForOpen(). Y también comprobar las condiciones de tiempo si (CurrTime < EaStartTime || CurrTime >= EaEndTime). En su lugar, utilizaría la función if (TimeHour(TimeCurrent()) = hora de inicio && TimeMinute(TimeCurrent()) = minutos de inicio ). La hora y los minutos se establecen en variables de tipo int o uint.

Quería abrir 3 órdenes pero no era lo que pretendía; quería hasta tres, pero una orden por cada barra nueva.

No hay problema con el tiempo, funciona en un periodo de tiempo estrictamente especificado.

 
Nickolay72:

Quería hasta tres órdenes, pero una orden por cada barra nueva. Hay veces que varias barras seguidas dan señales positivas.

No hay problema con el tiempo, funciona en un periodo de tiempo estrictamente especificado.

La condición: si la barra de la última apertura de posición no es igual a cero y el número de posiciones abiertas es inferior al máximo permitido, entonces se puede abrir una nueva posición.
 

Karputov 2016.01.13_05:14AM. ¡Hola Sr. Karputov! He escrito en MQL4

.mq4, obtuvo el archivo .ex4. Pero no funciona en el probador de estrategias. Final

era escribir un EA para MT4. En MQL5, tengo .mq5 y

archivos .ex5. Y el archivo .ex5 abrió oficios. La cuarta versión es diferente de

La cuarta versión tiene algunas diferencias con respecto a la quinta, y aún no soy un buen programador de MQL, por eso obtuve malos resultados.

No he entendido lo que está mal ahora, el archivo de registro del probador se ha guardado. Я

Intentaré traducirlo. Mientras tanto te pido que me digas

¿qué pasa con el código del programa? Mientras respondes, intentaré

para descubrirlo.
Me sorprendió encontrar en mi cuarta versión del editor la opción de escribir

Estaba a punto de escribirlo. Pero yo no lo escribí. Adjunto

archivos de registro del probador y una captura de pantalla. 05:30 MSC. Registro del probadorKarputovKarputov

Archivos adjuntos:
20160112.log  7 kb
 
Николай Никитюк:

2016.01.13_05:14AM HORA DE MOSCÚ. ¡Hola, señor Karputov! He escrito en MQL4

.mq4, tiene un archivo .ex4. Pero no funciona en el probador de estrategias.

¿Por qué has pegado el código como una imagen? )) ¿Quién los entenderá?
 
Николай Никитюк:


Por favor, inserta tu código correctamente en el post:Inserta el código correctamente en el foro
 

¿Dónde puedo encontrar las descripciones de los errores?

No entiendo qué es lo que no le gusta al compilador, ¿por qué me avisa?

comprobar la precedencia de los operadores para detectar posibles errores; utilizar paréntesis para aclarar la precedencia


if(Low[X]>PriceBuy && High[X]>PriceBuy ||
               Low[X]<PriceBuy && High[X]<PriceBuy)
               calcBarX++;

y aquí

la expresión no tiene ningún efecto


         for(calc_day;calc_day>0; calc_day--)
           {
            if(iLow(Symbol(),TF_3Day,calc_day)<iLow(Symbol(),TF_3Day,calc_day+1)) calc_day_OK++;
            else break;
           }

 
-Aleks-:

¿Dónde puedo encontrar las descripciones de los errores?

No entiendo qué es lo que no le gusta al compilador, ¿por qué me avisa?

En realidad, además del texto del error, el compilador también te indica el número de la línea de código donde está el error y la posición en la línea.
 
Karputov Vladimir:
En realidad, además del texto del error, el compilador también informa del número de la línea de código donde se encuentra el error y su posición en la línea.
Esto es así - en el primer caso sobre los signos de comparación a su vez - aparentemente entre el "o" debe poner un paréntesis, y en el segundo caso jura sobre el paréntesis en el que se escribe la expresión lógica.
Razón de la queja: