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

 

Hola a todos, sólo una actualización rápida del hilo: Hay una pregunta en el código:

int stoplevel;
int  MinimumUseStopLevel;

// Calculate stoplevel as max of either STOPLEVEL or FREEZELEVEL
   stoplevel = fmax(SymbolInfoInteger(_Symbol,MODE_FREEZELEVEL), SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL));
// Then calculate the stoplevel as max of either this stoplevel or MinimumUseStopLevel
   stoplevel = fmax(MinimumUseStopLevel, stoplevel);

Al compilar, genera una advertencia:"posible pérdida de datos debido a la conversión de tipos...". ¿Qué necesita? No es tan crítico, pero me gustaría saberlo.


Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Часто возникает необходимость преобразовать один числовой тип в другой. Не каждый числовой тип допустимо преобразовать в другой, допустимые преобразования в MQL5 показаны на схеме: Сплошные линии со стрелками обозначают преобразования, которые выполняются без потери информации. Вместо типа char может выступать тип bool (оба занимают в памяти 1...
 
Sayberix:

Hola a todos, sólo una actualización rápida del hilo: Hay una pregunta en el código:

Al compilar, genera una advertencia:"posible pérdida de datos debido a la conversión de tipos...". ¿Qué necesita? No es tan crítico, pero me gustaría saberlo.


El propio motor del sitio insertó un enlace a la respuesta, y hay un ejemplo de conversión de tipo explícito .........

//--- ускорение свободного падения
   double g=9.8;
   double round_g=(int)g;
   double math_round_g=MathRound(g);
   Print("round_g = ",round_g);
   Print("math_round_g =",math_round_g);
/*
   Результат:
   round_g = 9
   math_round_g = 10
*/
 
Sayberix:

Hola a todos, sólo una actualización rápida del hilo: Hay una pregunta en el código:

Al compilar, genera una advertencia:"posible pérdida de datos debido a la conversión de tipos...". ¿Qué necesita? No es tan crucial, pero me gustaría saberlo.


No sólo tiene una advertencia, sino también un error. ¿Estás seguro de que es este código en particular el que estás compilando?

Así es como debe ser:

   int stoplevel=0;
   int MinimumUseStopLevel=0;

// Calculate stoplevel as max of either STOPLEVEL or FREEZELEVEL
   stoplevel = int(fmax(SymbolInfoInteger(_Symbol,SYMBOL_TRADE_FREEZE_LEVEL), SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)));
// Then calculate the stoplevel as max of either this stoplevel or MinimumUseStopLevel
   stoplevel = int(fmax((int)MinimumUseStopLevel,(int)stoplevel));

Sólo que sin profundizar en el código, para que no se produzcan errores y advertencias.

Y si lo piensas, estás mezclando lo cálido y lo húmedo

 
Artyom Trishkin:

No sólo tiene una advertencia, también tiene un error. ¿Estás seguro de que este es el código que estás compilando?

Así es como debe ser:

Sólo que sin profundizar en el código, para que no se produzcan errores y advertencias.

Y si lo piensas, estás mezclando las cosas.

Gracias.

No me regañes, sólo estoy aprendiendo - tratando de entender el código de otras personas. Me parece que es la forma más rápida de aprender.

No entiendo por qué necesita la conversión de tipo, si todas las variables son int y los valores de retorno a través de symbolinfointeger ?

 
Sayberix:

Gracias.

No me regañes demasiado, sólo estoy aprendiendo - tratando de dar sentido al código de otras personas. Me parece que esta es la forma más rápida de aprender.

No entiendo por qué necesita la conversión de tipo, si todas las variables son int y los valores de retorno a través de symbolinfointeger ?

SymbolInfoInteger() devuelve long
Документация по MQL5: Получение рыночной информации / SymbolInfoInteger
Документация по MQL5: Получение рыночной информации / SymbolInfoInteger
  • www.mql5.com
2. Возвращает true или false в зависимости от успешности выполнения функции.  В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром. Если функция используется для получения информации о последнем тике, то лучше использовать SymbolInfoTick(). Вполне возможно, что по данному символу с...
 

¡Buenos días queridos programadores!

¿Cómo puedo hacer que mi EA abra posiciones independientemente de las posiciones abiertas manualmente o de otras posiciones abiertas por otro EA? Intenté hacerlo con magia, pero no funcionó. Intenté hacerlo con magia, pero no funcionó:

datetime some_time=TimeCurrent();
extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)
extern int P=1;          //Таймфрейм
extern int MagicNumber = 100500;


int start()
{

int send;
                                      
double SL=50;                                   
double TP=50;                       
double Lots=3;       

      
//&&(OrderMagicNumber() == MagicNumber)
//&&(OrdersTotal() ==0)&&    
 
              
if ((Close[0]>High[1])&&(OrderMagicNumber() != MagicNumber)) 
{
send=OrderSend(Symbol3,OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,MagicNumber);
}

if ((Close[0]<Low[1])&&(OrderMagicNumber() != MagicNumber))
{
send=OrderSend(Symbol3,OP_SELL,Lots,Bid,3,Ask+SL*Point,Ask-TP*Point,MagicNumber);
}

return(0);
}
 
Alexey Belyakov:

¡Buenos días queridos programadores!

¿Cómo puedo hacer que mi EA abra posiciones independientemente de las posiciones abiertas manualmente o de otras posiciones abiertas por otro EA? Intenté hacerlo con magia, pero no funcionó. Aquí está el código:


Faltan campos y no se ha seleccionado ninguna orden para comprobar el número

int n = 0;
for(int i = OrdersTotal(); i >= 0; i--) {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
      if(OrderSymbol() != _Symbol)continue;
      if(OrderMagicNumber() != magic)continue;     
n++;
}

if(n == 0){
OrderSend(_Symbol, _type, lot, price, 0, sl, tp, comment, magic, 0, clrNONE);
}
 
Cómo retirar dinero de una cuenta

 
Ayuda... Ponerlo y no poder sacarlo
 
Georgiy Liashchenko:


Faltan campos y no se resalta la orden para comprobar el número

Lo hice. No lo hice. Se abre en paquetes. La magia lo ignora.


datetime some_time=TimeCurrent();
//extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)
extern int P=1;          //Таймфрейм
extern int MagicNumber = 100500;


int start()
{

int send;
                                     
double SL=200;                                   
double TP=200;                       
double Lots=1;       

int n = 0;
for(int i = OrdersTotal(); i >= 0; i--) 
{
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
      if(OrderSymbol() != "EURUSD")continue;
      if(OrderMagicNumber() != MagicNumber)continue;     
n++;
}
          
//&&(OrderMagicNumber() == MagicNumber)
//&&(OrdersTotal() ==0)&&    
             
if ((Close[0]>High[1])&&(n==0))
{
send=OrderSend("EURUSD",OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,MagicNumber);
}

if ((Close[0]<Low[1])&&(n==0))  
{
send=OrderSend("EURUSD",OP_SELL,Lots,Bid,3,Ask+SL*Point,Ask-TP*Point,MagicNumber);
}

return(0);
}

Razón de la queja: