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

 
danil77783:

Hola. Me pueden ayudar si tienen tiempo La pregunta es la siguiente, necesito que el EA abra una orden en cada señal de dos indicadores, (dan una señal cuando están en cierta combinación) en una palabra, debe haber varias órdenes para comprar o vender en el mercado, en consecuencia, de acuerdo a las señales de los indicadores. Pero sólo tengo una orden en el mercado y hasta que no se cierra no se abre la siguiente...... ¿Es cuestión de contar órdenes? Por favor, dame una pista. Si lo necesitas, puedo enviarte el código.

Gracias de antemano.

eliminar la condición "if (OrdersTotal()==0)....". - Sólo dicen: buscar entradas y abrir nuevas órdenes sólo cuando no haya ninguna.

Si no quiere abrir un gran paquete de nuevos pedidos sin esa condición, debe crear una condición adicional. Y esto depende de tu estrategia: no abrir una nueva dentro del tiempo T de la anterior, o controlar las barras o mantener distancias en pips entre órdenes...

 

Hola. Empezaré diciendo que muchas gracias por ayudar a los novatos. No sería capaz de responder a preguntas elementales por mí mismo día tras día a un novato y luego a otro.

Y la pregunta es la siguiente:

Yo pensaba antes, cuando mql4 era un poco diferente, que cualquier procesamiento de órdenes, como abrir/cerrar/modificar después de un posible error debería ser interrumpido por la función return(0). Debido a eso, si tenía que cerrar varias órdenes abiertas al precio actual, el probador las cerraría una por una en cada nueva barra y eso probablemente distorsionaría la imagen real (bastante dramáticamente, a veces) en el probador (para cada tick de un frame). El nuevo EA tiene que cerrar varias órdenes exactamente por la señal y parcialmente.

Pregunta: ¿Es posible procesar todos ellos (cerrarlos parcialmente) en un bucle, sin interrumpir el bucle cada vez? ¿Podrá el probador manejarlo? Es decir, ¿podrá cerrar parcialmente todas ellas en una sola barra?

 
XpeHHukoB:

Hola. Empezaré diciendo que muchas gracias por ayudar a los novatos. No sería capaz de responder a preguntas elementales por mí mismo día tras día a un novato y luego a otro.

Y la pregunta es la siguiente:

Antes, cuando mql4 era un poco diferente, pensaba que cualquier procesamiento de órdenes, como la apertura/cierre/modificación después de un posible error debería ser interrumpido por la función return(0). Debido a eso, si tenía que cerrar varias órdenes abiertas al precio actual, el probador las cerraba una por una en cada nueva barra, lo que distorsionaba la imagen real (bastante dramáticamente, a veces) en el probador (para cada tick de un frame). El nuevo EA tiene que cerrar varias órdenes exactamente por la señal y parcialmente.

Pregunta: ¿Es posible procesar todos ellos (cerrarlos parcialmente) en un bucle, sin interrumpir el bucle cada vez? ¿Podrá el probador manejarlo? Es decir, ¿podrá cerrar parcialmente todas ellas en una sola barra?

Puede hacerlo sin problemas con una pequeña condición. El código debe estar escrito correctamente.

 
Seric29:
Si hay 2 funciones (posiblemente sobrecargadas), por ejemplo, int Funkz(int a) int Funkz(int a, int b, int w), y luego se compila el programa, ¿qué función funcionará más rápido, la primera teniendo en cuenta que tiene un argumento o no importa, porque el programa ya está construido y lo que se describe en el cuerpo, o después de todo hay un pequeño efecto porque los argumentos de la función representan una pila para la que se reserva la memoria?

Si tienes dos funciones del mismo nombre con diferente número de argumentos, no es cuestión de cuál será llamada más rápido. Cuando llamas a una función, no escribes Funkz(), sino que especificas el número de argumentos.

La cuestión es si el compilador masticará las funciones con el mismo nombre.

Según tengo entendido, no estamos hablando del código, sino del archivo compilado?

 
Um... Gracias por tu respuesta, Alexei. Se han aclarado muchas cosas.
 
Ayuda por favor, tenemos SL igual a un valor en pips (este nivel de pérdida - parámetro ajustable por el usuario), y tenemos un precio en el símbolo en el día de baja o alta - es como una segunda pérdida de la parada y en diferentes puntos en el tiempo que será diferente, necesito auto función de comparación - de modo que después de que el robot establece una pérdida de la parada para el parámetro más pequeño (SL o Ilow - para la compra o SL -iHign para la venta) a continuación es el código que no da el resultado deseado, no puedo entender lo que es...
   пользовательский параметр - extern int    SL               = 1000;
//---------------------------------------------------------------
bool CheckForStopLossSell()
  {
   double Hign=iHigh(Symbol(),PERIOD_D1,1);
   double StopLoss=NormalizeDouble(SL*Point,Digits);
   double uroven = StopLoss;
   double OOPS=iLow(Symbol(),PERIOD_D1,1)-StepOpenOrder*Point;
   double StopLossS=NormalizeDouble(OOPS+StopLoss,Digits);
   //----------------------------------------
   if(Hign>StopLoss) Alert("StopLoss");
   return bool(StopLossS);
   
   //else
   if(Hign<StopLoss) Alert("Hign");
   return bool(Hign); 
   
   //else
   Alert("uroven");
   return bool(uroven); 
   
  }
//--------------------------------------------------------------
bool CheckForStopLossBuy()
  {
   double LOW=iLow(Symbol(),PERIOD_D1,1);
   double StopLoss=SL*Point;
   double uroven = StopLoss;
   double SPREAD = MarketInfo(Symbol(),MODE_SPREAD)*Point;
   double OOPB = (iHigh(Symbol(),PERIOD_D1,1)+SPREAD)+StepOpenOrder*Point;
   double StopLossB=OOPB-StopLoss;
   //-------------------------------------------
   if(LOW<StopLoss) Alert("StopLoss"); 
   return bool(StopLossB);  
   
   //else
   if(LOW>StopLoss) Alert("LOW"); 
   return bool(LOW);  
   
   //else
   Alert("uroven");
   return bool(uroven);  
   
  }
//---------------------------------------------------------------
 
XpeHHukoB:

Si tienes dos funciones del mismo nombre con diferente número de argumentos, no es cuestión de cuál será llamada más rápido. Cuando llamas a una función, no escribes Funkz(), sino que especificas el número de argumentos.

La cuestión es si el compilador masticará las funciones con el mismo nombre.

¿Te refieres al archivo compilado, no al código?

Y si las funciones son diferentes, ¿cuál funcionará más rápido con menos o más argumentos? Creo que sobrecargar con diferentes números también conlleva una carga o es sólo por comodidad?

 

Por favor, dígame cómo escribir #define ?

Lo escribo así

#define  my_POS    cst_Position.my_Position

Si cambio esta construcción a def - todo funciona.

my_POS.SelectByTicket(pos_DATA(DATA_TICKET))

Pero cuando sólo escribo mi_POS. la lista de funciones no aparecerá después de un punto.

Lo mismo para

#define  pos_DATA  cst_Position.getPositionData

no hay pistas después de la pos_DATA(.

¿Qué estoy haciendo mal?

 
bool operation=0;for(int pos=0;pos<OrdersTotal();pos++)
     {if ( OrderSelect (pos, SELECT_BY_POS) == false )  continue;
      if ( OrderSymbol()==Symbol()) break;}


//=========================================================================================================
if(Hour()>=2&&Hour()<=18&&operation==0){
if(OPB1==1)
   {operation=1;if(operation==0 &&OrderSymbol()!=Symbol()||OrdersTotal()==0)
        {OrderSend(Symbol(),OP_BUY,lots,Ask,0,Bid-ss*Point,Ask+T*Point,"My order#",mn,0,Green);}}
        if (OrderType()==OP_BUY &&OrdersTotal()==1&&OrderMagicNumber()==8)
        {OrderSend(Symbol(),OP_SELLSTOP,5*lots,OrderOpenPrice()-(ss-ss/4)*Point,0,0,SstopClose,"My order#",80,0,Red);}
       

if(OPS1==1)
   {operation=1;if(operation==0 &&OrderSymbol()!=Symbol()||OrdersTotal()==0)        
         {OrderSend(Symbol(),OP_SELL,lots,Bid,0,Ask+ss*Point,Bid-T*Point,"My order#",mn,0,Red);}}
         if (OrderType()==OP_SELL &&OrdersTotal()==1&&OrderMagicNumber()==8)
         {OrderSend(Symbol(),OP_BUYSTOP,5*lots,OrderOpenPrice()+(ss-ss/4)*Point,0,0,BstopClose,"My order#",80,0,Green);}}



if(OrderMagicNumber()==80){operation=0;
 {for( int  ii=OrdersTotal()-1;ii>=0;ii--)
       {OrderSelect(ii, SELECT_BY_POS);
        int  type   = OrderType();bool result = false;
        switch(type)
         {case OP_BUYSTOP   : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );//break;
          case OP_SELLSTOP  : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red ); //break;
         
          result = OrderDelete( OrderTicket() );//break;
          }}}}

¡Hola, queridos expertos!

Por favor, ayúdenme a resolver este problema.

Al probar cualquier par, todo funciona correctamente, pero al trabajar con otras divisas, las órdenes pendientes no se colocan (tengo que exponerlas a mano) y no se cierran tras la activación del Take Profit.

Por favor, indíqueme cómo cambiar el código, si es posible:



Muchas gracias de antemano

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
Archivos adjuntos:
c5k8icfo.png  55 kb
 
Motzaart:

¡Hola, queridos expertos!

Por favor, ayúdenme a resolver este problema.

...

Por favor, introduzca el código correctamente:


Razón de la queja: