Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 33

 

¡Buenas noches! Estoy seguro de que esta función producirá exactamente lo que quería, bueno, casi. Pero la máquina no compila, jura así

'}' - no todas las rutas de control devuelven un valor htghtgfhthf.mq5 61 10 Le está diciendo que tengo algo mal en mi lógica, no todos los retornos están especificados ahí. Sí, lo son. Por el contrario, si los ponemos después de cada opirador de if, será un sinsentido, el programa producirá inmediatamente un resultado erróneo. Es corto y va al grano. Si puedes, ¿cómo puedes hacer que lo acepte?

string OrderType() { 
 string Si="";

 long lo;
 bool Bull=false; 
 Bull =PositionGetInteger(POSITION_TYPE,lo);
 if ( Bull ) {
 if ( lo==POSITION_TYPE_BUY) Si="OP_BUY";
 if ( lo==POSITION_TYPE_SELL) Si="OP_SELL";
 return (Si); }


 // ENUM_ORDER_TYPE ORType;

 Bull =OrderGetInteger(ORDER_TYPE,lo);
 if ( Bull ) {
 if ( lo==ORDER_TYPE_BUY_LIMIT) Si="OP_BUY_LIMIT";
 if ( lo==ORDER_TYPE_SELL_LIMIT) Si="OP_SELL_LIMIT";
 if ( lo==ORDER_TYPE_BUY_STOP) Si="OP_BUY_STOP";
 if ( lo==ORDER_TYPE_SELL_STOP) Si="OP_SELL_STOP";
 return (Si); }

 }
 
Dimka-novitsek:

¡Buenas noches! Estoy seguro de que esta función producirá exactamente lo que quería, bueno, casi. Pero la máquina no compila, jura así

'}' - no todas las rutas de control devuelven un valor htghtgfhthf.mq5 61 10 Me está diciendo que tengo algo mal en la lógica, no todos los retornos están especificados ahí. Sí, lo son. Por el contrario, si los ponemos después de cada opirador de if, será un sinsentido, el programa producirá inmediatamente un resultado erróneo. Es corto y va al grano. Si puede, ¿cómo puede hacer que lo acepte?

Un consejo: aprende algo de inglés técnico. Déjame ver el código.

En cuanto al tema: la función debe devolver un valor del tipo cadena. Dentro de la función utilizamos la sentencia if, que contiene las declaraciones de retorno. Pregunta: si la sentencia if detecta que Bull == false, ¿qué debe devolver la función?

 
Por supuesto, Si="" ¡! Valor vacío.
 

¡¡¡Aha!!! ¡¡¡Gracias!!!

¡¡¡¡Gracias!!!!

 
Dimka-novitsek:

¡Buenas noches! Estoy seguro de que esta función producirá exactamente lo que quería, bueno, casi. Pero la máquina no compila, jura así

'}' - no todas las rutas de control devuelven un valor htghtgfhthf.mq5 61 10 Me está diciendo que tengo algo mal en la lógica, no todos los retornos están especificados ahí. Sí, lo son. Por el contrario, si los ponemos después de cada opirador de if, será un sinsentido, el programa producirá inmediatamente un resultado erróneo. Es corto y va al grano. Si puede, ¿cómo hacer que lo acepte?

no todas las vías de control devuelven un valor - no hay un control total sobre la devolución del valor.

Significa que en la cadena OrderType(), que debe tener un valor de retorno ya que el tipo es diferente de void, no hay una salida garantizada con un valor de retorno.

Aunque has puesto hasta 2 operadores de retorno, pero ambos están protegidos por la condición if. ¿Qué ocurrirá si ambas condiciones son falsas?

Entonces la máquina puede saltar por la ventana a voluntad.

Por cierto, en esta función tiene más sentido usar switch counter, en lugar de un montón de if's, que esencialmente hacen el mismo trabajo que switch.

ZZZY Además, no debemos olvidar que la posición debe ser preseleccionada, así como el orden. Y existe una función estándar EnumToString para traducir las enumeraciones en cadenas, así que no es necesario reinventar la rueda.

 
¡¡¡GRACIAS!!!
 
//+------------------------------------------------------------------+
//|                                                  Sample_Tick.mq5 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

int Tick_All;

MqlTick           last_tick;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   Tick_All=0;

//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(!SymbolInfoTick(_Symbol,last_tick))
     {
      Print("Failed to get Symbol info!");
     }

   Tick_All++;
   Print(Tick_All,"   ",last_tick.bid,"   ",last_tick.ask,"  ",last_tick.last," ",last_tick.volume);
  }
//+------------------------------------------------------------------+


No entiendo por qué se llama a OnTick aunque el precio no cambie?????

2012.09.10 11:52:11 Sample_Tick (EURUSD,M5) 493 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:10 Sample_Tick (EURUSD,M5) 492 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:09 Sample_Tick (EURUSD,M5) 491 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:07 Sample_Tick (EURUSD,M5) 490 1.2787 1.2789 1.2788 300000

 
dentraf:

No entiendo por qué se activa OnTick aunque el precio no cambie?????

2012.09.10 11:52:11 Sample_Tick (EURUSD,M5) 493 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:10 Sample_Tick (EURUSD,M5) 492 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:09 Sample_Tick (EURUSD,M5) 491 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:07 Sample_Tick (EURUSD,M5) 490 1.2787 1.2789 1.2788 300000

¿También se mantiene la hora de la última actualización del precio?
 
Yedelkin:
¿la hora de la última actualización del precio tampoco cambia?

2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 20 1.27841 1.27852 1.27841 2000000 2012.09.10 14:37:19
2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 19 1.27841 1.27852 1.27841 2000000 2012.09.10 14:37:19
2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 18 1.27841 1.27852 1.27841 2000000 2012.09.10 14:37:18

o

2012.09.10 15:37:12 Sample_Tick (EURUSD.m,M5) 6 1.27835 1.27845 1.27835 1000000 2012.09.10 14:37:11
2012.09.10 15:37:12 Sample_Tick (EURUSD.m,M5) 5 1.27835 1.27845 1.27835 1000000 2012.09.10 14:37:11
2012.09.10 15:37:12 Sample_Tick (EURUSD.m,M5) 4 1.27835 1.27845 1.27835 1000000 2012.09.10 14:37:10

 
dentraf:

2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 20 1.27841 1.27852 1.27841 2000000 2012.09.10 14:37:19

La hora de cambio de precios es GMT+3, creo. ¿De quién es el servidor?
Razón de la queja: