[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 301

 
rustein:
He buscado en el foro pero no he encontrado una solución rápida, ayudar a resolver el problema con mientras que en el probador no funciona, en la vida real lo hace.

Gracias.

Si se cuelga el probador, entonces debería. (Asegúrese de describir la salida del bucle).

Así

    while(Result == -1)
    {
      if(TotalOpenOrders() < TotalOrders)
      {
        if(TrendDetection() == BULL)
        {
          Result = OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,NormalizeDouble(Ask,Digits)-(StopLoss*Point),NormalizeDouble(Ask,Digits)+(TakeProfit*Point),OrderComments,Magic,0,CLR_NONE); 
         if((IsTesting()||IsOptimization())&&Result == -1)break;
        }
 
drknn:


Es difícil decir cuál es su problema. Tome como una regla en MQL4 que los números negativos en el código siempre debe ser puesto entre paréntesis. A veces pueden producirse errores sin paréntesis.

Aunque, en las líneas de código que comienzan con extern, no es necesario tomar valores negativos entre paréntesis. No sé por qué es así.

Gracias, pero no funciona, ¿puede sugerir una construcción para deshacerse del bucle if(IsTesting()==true || IsOptimization()==true)
 
rustein:
Gracias, pero no funciona, ¿puede sugerir una construcción para deshacerse del bucle if(IsTesting()==true || IsOptimization()==true)

 while(Result == -1)
    {
      if(TotalOpenOrders() < TotalOrders)
      {
        if(TrendDetection() == BULL)
        {
          Result = OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,NormalizeDouble(Ask,Digits)-(StopLoss*Point),NormalizeDouble(Ask,Digits)+(TakeProfit*Point),OrderComments,Magic,0,CLR_NONE); 
         if((IsTesting()||IsOptimization())&&Result == -1)break;
        }

^^

 
drknn:
No necesita una alerta - mi entendimiento es que en algún lugar del código el archivo probablemente ya está abierto pero no cerrado. Probablemente por eso no se puede reabrir el archivo y sigue apareciendo la ventana de alerta. Aunque, tal vez me equivoque, no soy miembro del club de los telépatas :(
La situación es la siguiente: en un momento determinado, el experto mira en el archivo csv y ve qué orden hay (comprar, vender, cerrar), esta orden es escrita en el archivo por EXCEL. El problema es que de momento, cuando expert va a leer el archivo, lo puede abrir EXCEL, ekspert da un error y ya está, y necesito que vaya de nuevo y lo intente hasta que lea el comando.
No sabía lo de mientras construía...
Por favor, compruebe si lo he escrito correctamente:
 
int init()
{
while(handle<1)
{ 
handle=FileOpen("firstfile.csv",FILE_CSV|FILE_READ|FILE_WRITE,'\t') 
} 

}

 
sanches83:

}

Sí, para qué preguntar, puedes probarlo con una "pelea" )).
 
rustein:
Gracias, pero no funciona, ¿puede sugerir una construcción para deshacerse del bucle if(IsTesting()==true || IsOptimization()==true)


Intenta sin un bucle en absoluto, digamos así:

double  PR,SL,TP;
PR=NormalizeDouble(Ask,Digits);
SL=NormalizeDouble(PR-StopLoss*Point,Digits);
TP=NormalizeDouble(PR+TakeProfit*Point,Digits);
int Result=0;
Result = OrderSend(Symbol(),OP_BUY,Lots,PR,Slippage,SL,TP,OrderComments,Magic,0,CLR_NONE);
if(Result<=0){
        Print("Ошибка № ",GetLastError()," при открытии бай-ордера. PR = ",PR,"   SL = ",SL,"   TP = ",TP);
}

Al menos ayudaría a entender por qué la pose no se abre.

 
costy_:

^^

Muchas gracias :)

Gracias a todos, arreglado, ya funciona.

Muchas gracias por su ayuda.

 
costy_:
Sí, por qué tenemos que preguntar, podemos comprobarlo "luchando" )).


En general esto es correcto, pero para que funcione necesitamos inicializar la variable antes del bucle

mango=0;

while(handle<1)
{
handle=FileOpen("firstfile.csv",FILE_CSV|FILE_READ|FILE_WRITE,'\t');
}

Es para estar absolutamente seguro de que la ejecución del código entrará en el cuerpo del bucle y no lo ignorará.

 
drknn:


En realidad es cierto, pero para que funcione, la variable debe ser inicializada antes del bucle

mango=0;

while(handle<1)
{
handle=FileOpen("firstfile.csv",FILE_CSV|FILE_READ|FILE_WRITE,'\t');
}

Esto es para asegurarse de que la ejecución del código entra en el cuerpo del bucle y no lo ignora.

Sí, por desgracia tengo que ser como un adivino, crear scripts con parte del código en la pregunta, bueno o todo el código y será más fácil para que usted pueda señalar el error. (posos de café zakAchyVeTso).
 

Amigos, ¡¡¡ayudadme un poco!!!

Estoy tratando de escribir un EA utilizando la estrategia del canal de la mañana. La esencia es la siguiente: a las 6:01 en el par EURGBP determinamos el canal de movimiento del precio desde las 0 hasta las 6 de la mañana. Establecemos dos órdenes pendientes y si la orden pendiente activada es cerrada por un stopper, abrimos una orden en sentido contrario. Es la segunda parte de la estrategia la que no funciona. Es decir, si se ha activado un stop, no podemos abrir una orden en sentido contrario.
Archivos adjuntos: