Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 717

 
Vladimir Pastushak:

Gracias. Tengo problemas para llamar a un método de la clase padre.

Que yo recuerde se hace a través del método parent ::

¿Tiene el método un cuerpo en el padre?

 
Artyom Trishkin:

¿El propio método en el padre tiene un cuerpo?

Sí, así es.

Aquí está el código, ¿qué estoy haciendo mal?

//+------------------------------------------------------------------+

class A

  {

public:

   virtual int Test_A()

     {

      return 100;

     }

  };

//+------------------------------------------------------------------+

class B :public A

  {

public:

   virtual int Test_A()

     {

      return 200;

     }

  };


B b;

//+------------------------------------------------------------------+

void OnStart()

  {

   Comment (A::b.Test_A());

  }

//+------------------------------------------------------------------+


 
Hay un indicador de zigzag que muestra el valor del precio de un extremo, necesito dibujaruna línea de tendencia desde el extremo hasta el futuro (el día siguiente), ¿cómo puedo hacerlo sin conocer las coordenadas del segundo punto y el valor del tiempo del primer punto?
 
Vladimir Pastushak:

Aquí está el código, ¿qué estoy haciendo mal?

no, no funcionará así

al escribir el cuerpo de test() en la clase B, has cerrado la antigua función Test() y ahora cuando declares una instancia de la clase y llames al método Test(), siempre se ejecutará B::Test(), pero si no escribieras B::Test(), siempre se ejecutaría A::Test()

Aquí tienes un ejemplo. Experimenta con él

//+------------------------------------------------------------------+
class A
  {
public:
   virtual int Test_A()  { Print(__FUNCSIG__); return 100;  }
  };

//+------------------------------------------------------------------+
class B :public A
  {
public:
   virtual int Test_A()  { Print(__FUNCSIG__," = ", A::Test_A()); return 200;   }
  };

B b;

//+------------------------------------------------------------------+

void OnStart()

  {
   Print (__FUNCSIG__," = ",b.Test_A());
  }
//+-------------------------------------------------------------
 
Hola. ¿Cómo se hace un cálculo ordinal? De modo que en lugar de VENDER primero habrá 1, luego 2 y así sucesivamente... ...hasta que se actualiza cuando no hay pedidos. Algunas pistas.
        if((fMarketOrderss(OP_SELL)>=1)) { 
       if( ((Bid-Opens)/ma+Times/1440) > SELL ) {
if(OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0,NULL,321,0,1)>0){} }}
 
Hmm, qué raro, nadie contesta.
 
Rustam Bikbulatov:
Hmm, es extraño, nadie responde.

Creo que nadie entiende tu post :)


 

Hola, cómo hacer que el EA abra una posición con un volumen determinado de órdenes individuales de ambas posiciones, por ejemplo

Hemos especificado el volumen de una sola orden = 1,35 lotes, y el volumen total de las posiciones abiertas es de 500 lotes. El EA abre una orden de compra de 1,35 lotes, y luego abre una orden de venta de 1,35 lotes,

y luego se repite hasta que se abran 500 lotes de compra y 500 lotes de venta, y como el número de lotes no es múltiplo de 1,35, la última orden debe ser inferior a 1,35

 

Saludos.

Hice una función que cuando una orden alcanza puntos de beneficio "bezubitok", modifica la orden moviéndola al nivel de apertura de la orden. Parece que funciona correctamente, pero durante las pruebas (y en todos los ticks) cada 10-20 veces envía el error 1 al registro.

No hay error, pero el resultado es desconocido

void Bezubitok(){
   for (int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == magic){
            if(OrderType()==OP_BUY){
               if (OrderStopLoss()!=OrderOpenPrice() && Ask-OrderOpenPrice()>bezubitok*Point){
                  double sl1 = OrderOpenPrice();
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), sl1, OrderTakeProfit(), 0, Indigo)) {}
                  }
               }
            if(OrderType()==OP_SELL){
               if (OrderStopLoss()!=OrderOpenPrice() && OrderOpenPrice()-Bid>bezubitok*Point){
                  double sl1 = OrderOpenPrice();
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), sl1, OrderTakeProfit(), 0, DeepPink)) {}
                  }
               }
            }   
         }
      }
   }

¿Cuál es la razón de esto y cómo puedo vencerlo?

 
Andrey Sokolov:

Saludos.

Hice una función que cuando una orden alcanza puntos de beneficio "bezubitok", modifica la orden moviéndola al nivel de apertura de la orden. Parece que funciona correctamente, pero durante las pruebas (y en todos los ticks) cada 10-20 veces se escribe el error 1 en el registro.

¿A qué se debe esto y cómo puedo solucionarlo?

El error 1 no es un error, pero el resultado es desconocido. La cuestión es que estás intentando modificar el stop al mismo precio al que ya está. Antes de modificarlo, compare el precio del stop con el precio al que quiere fijarlo. Si ya está a ese precio, no hay nada que modificar.