Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 370

 
Ekburg, ok
 
Ekburg:


Instala la última compilación en la terminal, es más fácil escribir código en ella, es menos probable que cometas errores, te lo aconsejo)

Corregida la parte que se envió primero, sin la última parte de los paréntesis, que no están claros por qué...


esta es mi salida del EA, si se cumplen todas las condiciones entonces salgo del EA

es decir

fail=true;

y luego

if(fail) return(0);

 
SpikeOne:


soy yo quien sale del EA, si se cumplen todas las condiciones entonces el EA se sale

es decir

fail=true;

y luego

if(fail) return(0);


Esto es comprensible, pero en el código que se envió al principio, hay un montón de paréntesis innecesarios antes de la función de salida).

¡¿El que envié ayudó?!

 
si ( AccountProfit()+ AccountBalance()>=740)
{
for(int zx=Total de pedidos(); zx+1>=0; zx--)
{
if(OrderSelect(zx,SELECT_BY_POS,MODE_TRADES)==true)
OrderDelete(OrderTicket());
}
while (OrdersTotal()>0)
{
if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS),3,CLR_NONE);
if(OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
if (OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
OrderDelete(OrderTicket());
if(resultado!=TRUE)
{
er=GetLastError();
Print("ÚltimoError = ",er, ",Symbol());
}
si no, er=0;
}
}
fail=true;
}

if(fail) return(0);

Si insertas mi código en el EA https://www.mql5.com/ru/code antes del lugar

if(or_bu==risk && tick_b==0) open(0)

if(or_sl==risk && tick_s==0) open(1);

entonces el EA comienza a operar de forma diferente, aunque en mi código debería entrar sólo después de escribir 740, inicialmente mi saldo es de 700 en el probador.

Los valores de las pruebas se pueden establecer de la siguiente manera:

extern bool test=false; //desactivar los objetos en la prueba

extern int prof=2; // nivel de beneficio

extern int int chag=1.7; // paso entre órdenes

extern int risk=0; //nivel de riesgo

extern double lot = 0.01; // lote inicial

extern double k_lot=2; // incremento de volumen

extern double lote_máx=100;

resultado bool;

bool fail=false;

El problema es que cotiza de forma diferente, no consigo averiguar la fecha en la que me examiné en 2013. 11. 08. и 2013. 11 .09.

 
SpikeOne:

entonces el EA comienza a operar de manera diferente, aunque en mi código sólo debería entrar después de marcar 740, inicialmente mi saldo es de 700 en el probador.


if ( AccountProfit()+ AccountBalance()>=740)
   {
   for(int zx=OrdersTotal(); zx+1>=0; zx--)
      {
      if(OrderSelect(zx,SELECT_BY_POS,MODE_TRADES)==true)
      OrderDelete(OrderTicket());
      }
   while (OrdersTotal()>0)
      {
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
         {
         if(OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
         if(OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
         if (OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
         OrderDelete(OrderTicket());
         if(result!=TRUE)
            {
            er=GetLastError();
            Print("LastError = ",er, " ",Symbol());
            }
         else er=0;
         }
      else Print( "Error when order select ", GetLastError());
      }
   if(OrdersTotal()==0) fail=true;
   }
if(fail=true) return(0);

Intenta compilar mi código, hazme saber el resultado, luego lo pensamos...

si entra este código antes de lo necesario, entonces el problema está en el operador inicial, veamos qué pasa

 
Ekburg:

Intenta compilar mi código, hazme saber el resultado, luego lo pensamos...

Si entra este código antes de lo necesario, entonces el problema está en el operador de inicio, veamos qué es lo que falla ahí


Sí, lo he compilado, pero el problema persiste.... Parece que se mete en el código antes de lo debido.
 
SpikeOne:

sí compilado, pero el problema sigue siendo.... Sí, parece que entra en el código antes, aunque no debería.

CuentaBeneficioDevuelve el valor del beneficio de la cuenta corriente en la moneda base.

Este es el problema creo, quieres saber el beneficio en libras y te lo devuelve en euros, por ejemplo

Pruebe a sustituir todo el cálculo de la primera declaración de código por esto:

CuentaPatrimonioDevuelve el importe de los fondos propios de la cuenta corriente. El cálculo de la equidad depende de la configuración del servidor de comercio.

y eventualmente compilar este operador:

if(AccountEquity()>=740)
   {
   ...
   }
 
Ekburg:

CuentaBeneficioDevuelve el valor del beneficio de la cuenta corriente en la moneda base.

Ese es el problema creo, que quieres saber el beneficio en libras y te lo devuelve en euros, por ejemplo

Pruebe a sustituir todo el cálculo de la primera declaración de código por esto:

CuentaPatrimonioDevuelve el importe de los fondos propios de la cuenta corriente. El cálculo de la equidad depende de la configuración del servidor de comercio.

y eventualmente compilar este operador:


El problema parece ser otro, si inserto en un EA que no funciona correctamente, un código que funciona correctamente, entonces después de la compilación el EA no funciona correctamente, se siente como cuando abres una página en el navegador, y te da el caché cada vez.

Incluso si se crea un nuevo EA y se inserta un código de trabajo en él, funciona torcido por alguna razón.

 
SpikeOne:


...si inserto un código que funciona incorrectamente en un EA que funciona correctamente, después de la compilación el EA no funciona correctamente...


No puedo ayudarte con eso) tienes que revisar todo el EA.
 
Ekburg:

No puedo ayudar entonces) tengo que revisar todo el EA.


Parece que he encontrado un fallo=) los datos iniciales donde el paso entre órdenes está puesto en int y ponía 1,7, lo he cambiado a doble y ha funcionado bien=)