[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 917

 
_SS_:
¿Cómo puedo crear una función y llamarla?
Leer un libro de texto... :)
 

artemida70, armé mi primer EA usando el tutorial de S. Kovalev. Resultó que su función de criterio funcionaba con pérdidas. Escribió mi función de criterio. Lo comprobé para ver si había errores y luego compilé el Asesor Experto. Como resultado del trabajo, obtuve:

- en la función de criterios: O - errores, 1 advertencia;

-para la compilación del Asesor Experto: О - errores, О - advertencias.

Pero el trabajo en el Probador de Estrategias no fue, puso ALERTAS de prueba en las funciones int init, int start, int deinit. Veo en las respuestas que el control se pasa de Terminal a la función int init y no se pasa el control a la función int start - no hay respuesta ALERTA. Cuando el EA se descarga, hay una respuesta de la función int deinit.

Por favor, su consejo sobre esta situación. Necesito el consejo de un profesional con experiencia.

GRACIAS

artmedia70:
Leer un tutorial... :)
 
artmedia70:
Aquí tienes una estructura extraña. Está haciendo el bucle estándar de órdenes del terminal. Desde cero hasta OrdersTotal() -1. Y luego se comprueba la ausencia total de órdenes en el terminal en el bucle. ¿Por qué no compruebas el billete de los pedidos? ¿O un magik? Y su bandera =0 por alguna razón. ¿Y por qué no es falso? Sin embargo, tú eres el jefe. Tu lógica, debes entenderla... :)

Gracias por el consejo))) Exactamente en este punto:. De cero a OrdersTotal() -1... Esa es la razón por la que el probador no siguió haciendo pedidos))))

Utilizo este esquema porque lo aprendí en las clases de otra persona. Si pudiera describir un método más racional, le estaría muy agradecido))))

 

Me han jodido, hace casi un mes que no salgo de mql4, creo que me estoy volviendo loco o qué?

No tengo ni idea de lo que estoy tratando de hacer con él.

Lo expongo, al menos dame una pista, ¿qué pasa? ¡Gurús, ayudad a los tontos!

No veo ningún error en el registro.
 
extern double StopLoss=50.0;
extern double TakeProfit=50.0;
extern double Lots=1;
extern int total;

int start()
{
double Price_1, Price_2, min, max;
RefreshRates();
Price_1=Bid;
Price_2=Ask;

min=iLow(NULL,0,2);
max=iHigh(NULL,0,2);
total=OrdersTotal();
if(total<1)
{

if(Price_1>max)
OrderSend(Symbol(),OP_BUY,Lots,Ask,5,Bid-StopLoss*Point,Ask+TakeProfit*Point, "My order#",16384,0,Green);

if(Price_2<min)
OrderSend(Symbol(),OP_SELL,Lots,Bid,5,Ask+StopLoss*Point,Bid-TakeProfit*Point, "My order#",16384,0,Green);
}
}
return(0);
 
boris.45:

artemida70, armé mi primer EA usando el tutorial de S. Kovalev. Resultó que su función de criterio funcionaba con pérdidas. Escribió mi función de criterio. Lo comprobé para ver si había errores y luego compilé el Asesor Experto. Como resultado del trabajo, obtuve:

- en la función de criterios: O - errores, 1 advertencia;

-para la compilación del Asesor Experto: О - errores, О - advertencias.

Pero el trabajo en el Probador de Estrategias no fue, puso ALERTAS de prueba en las funciones int init, int start, int deinit. Veo en las respuestas que el control se pasa de Terminal a la función int init y no se pasa el control a la función int start - no hay respuesta ALERTA. Cuando el EA se descarga, hay una respuesta de la función int deinit.

Por favor, su consejo sobre esta situación. Necesito el consejo de un profesional con experiencia.

GRACIAS


Me gustaría ver lo que has hecho ahí... :)
No entiendo lo que significa: la función de criterios de IC funciona con pérdidas. Al fin y al cabo, cualquier función, si sigue los criterios de apertura, puede funcionar correctamente o mal, y por tanto puede tener errores. Pero la estrategia en sí, puede ser perdedora o rentable... La función de criterios sólo sigue los criterios establecidos por la estrategia y envía señales a la función de negociación.
 
ViktorF:

Gracias por el consejo))) Exactamente en este punto:. De cero a OrdersTotal() -1... Esa es la razón por la que el probador no siguió haciendo pedidos))))

Utilizo este esquema porque lo aprendí en las clases de otra persona. Si pudieras describir un método más racional, te lo agradecería mucho)))).

Hay muchas maneras. Todo depende de lo que quiera encontrar.

En cualquier caso, puedes empezar a recorrer los pedidos

for (int i =0; i<TotalPedidos(); i++)

entonces comprueba exactamente lo que quieres encontrar en el bucle.

if (OrderSelect(i, SELECT_BY_POS) // Si la orden está seleccionada (aquí he omitido el parámetro de la función MODE_TRADES ya que está seleccionado por defecto)

y entonces - ya se comprueban los parámetros de la orden que se necesita, por ejemplo, magik

if (OrderMagicNumber()==Magic) // si el pedido tiene el número mágico dado, entonces... entonces este es el orden que necesitamos...

Bueno... O su tipo...

if (OrderType()==OP_BUY || OrderType()==OP_SELL) // si el tipo de orden es de compra o de venta...

etc.

Aunque, podemos hacerlo de manera completamente diferente... Todo depende de tus hábitos, y de los requisitos del código...

 
gheka:

Debería funcionar. ¿La cara sonriente está sonriendo?
 

Hola a todos. El EA tiene el siguiente código (ver abajo). Según tengo entendido, la señal para abrir una posición se toma de los indicadores de dos índices. ¿Cómo podemos hacer que las órdenes se abran en base a un solo indicador, por ejemplo el CCI? Muchas gracias.

int getSignal() {
   int Momentum = checkMomentum();
   int CCI = checkCCI();
   if (Momentum != CCI) return (0);
   return (Momentum);
}
int checkCCI() {
   double CCI = iCCI(NULL, 0, 60, PRICE_TYPICAL, 1);
   Print("CCI: ", CCI);
   if (CCI > 0.0) return (1);
   if (CCI < 0.0) return (-1);
   return (0);
}

int checkMomentum() {
   double Momentum = iMomentum(NULL, 0, 60, PRICE_TYPICAL, 1);
   Print("Momentum ", Momentum);
   if (Momentum > 100 && Momentum < 101) return (1);
   if (Momentum < 100 && Momentum > 99) return (-1);
   return (0);
}
 

Ayuda, el asesor no cierra todas las órdenes al alcanzar un beneficio

void CloseAllOrders()
{
  for (int i = 0; i < OrdersTotal(); i++)
  {
    if (OrderSelect(i, SELECT_BY_POS))
    {
      if (OrdersTotal() > 1 && OrderSymbol() == Symbol() && AccountProfit() >= AccountBalance()*AllProfit/100)
      {
        if((OrderType()==OP_BUY || OrderType()==OP_BUYSTOP || OrderType()==OP_BUYLIMIT)) OrderClose(OrderTicket(), OrderLots(),Bid,0);
        if((OrderType()==OP_SELL || OrderType()==OP_SELLSTOP || OrderType()==OP_SELLLIMIT)) OrderClose(OrderTicket(), OrderLots(),Ask,0);
        if(UseSound == true)
        {
        PlaySound(SuccesSound);
        }        
      }
    }
  }
}
Razón de la queja: