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

 

En el camino surgieron un par de preguntas más:

1. hay una cadena:

datetime ProvTimeX1=ObjectGetInteger(0, "Y="+IntegerToString(y,0,''),OBJPROP_TIME);

El compilador lo desaprueba, escribiendo"posible pérdida de datos debido a la conversión de tipos". ¿Qué ocurre aquí?

2. ¿Cómo pone mql5 los datos en arrays y los distribuye, en qué dirección?

 
WindSW:

En el camino surgieron un par de preguntas más:

1. hay una cadena:

datetime ProvTimeX1=ObjectGetInteger(0, "Y="+IntegerToString(y,0,''),OBJPROP_TIME);

El compilador lo desaprueba, escribiendo"posible pérdida de datos debido a la conversión de tipos". ¿Qué ocurre aquí?

Bien, es correcto, estás intentando escribir en la variable datetime un valor largo devuelto por ObjectGetInteger. Haz la conversión de tipo.

datetime ProvTimeX1=(datetime)ObjectGetInteger(0,"Y="+IntegerToString(y,0,' '),OBJPROP_TIME);
2. ¿Cómo se ponen los datos en mql5 en arrays y se asignan, en qué dirección?

La dirección es siempre la misma - desde el principio (el índice es cero) hasta el final, PERO si no se especifica la indexación con la función ArraySetAsSeries. Si la pregunta es sobre la indexación.

 

Buenas tardes, no puedo dividir los números, el resultado es 0.0

¿Por qué?

   double res =  8000/16000 * 100;
   Print(res);
 
ryzhak.vladimir:

Buenas tardes, no puedo dividir los números, el resultado es 0.0

¿Por qué?



   double res=((double)8000/16000)*100;
   Print(res);
Documentación >>> Conversión de tipos
 

Es una estupidez por supuesto, que haya que añadir algo para cambiar algo, alguna calculadora sin puntos está bien y no necesita especificar qué tipo de datos, pero bueno, la segunda forma es añadir ".0" al final del entero

por lo que la expresión correcta sería así.

double res =8000.0/16000.0*100;
Print(res);
Por cierto, en algún lenguaje de programación vio una variable para que el terminal selecciona su tipo, tal vez fue sólo para los datos numéricos, pero todavía cómodo, no está implementado aquí, he tratado de encontrar en la documentación - no pudo encontrar?
 
gracias a todos)
 

En la versión 4: datetime TimeX2=Time[0]+18000; - se aumenta el valor del tiempo en 5 velas hacia adelante

Ahora en 5 al escribir:

datetime Topen[];
ArraySetAsSeries(Topen,true);
CopyTime(_Symbol,_Period,0,3,Topen);
datetime TimeX2=Topen[0]+18000;

Al depurar da error de desbordamiento de array y apunta a la línea dedatetime TimeX2=Topen[0]+18000;

Por favor, indíqueme cómo conseguir el mismo resultado en el 5 que en el 4.

Adenda: Está escrito correctamente, sólo cometí un error - en OnInit el array estaba vacío.

 
WindSW:

En la versión 4: datetime TimeX2=Time[0]+18000; - se aumenta el valor del tiempo en 5 velas hacia adelante

Ahora en 5 al escribir:

Al depurar da error de desbordamiento de array y apunta a la línea dedatetime TimeX2=Topen[0]+18000;

Por favor, indíqueme cómo conseguir el mismo resultado en el 5 que en el 4.

datetime b=TimeTradeServer()+60*min; //min - кол-во минут от текущего времени
 

He encontrado un problema con el dibujo de los niveles.

void OnInit()
  {
   ObjectCreate(0,oPP,OBJ_TREND,0,0,0,0,0);
   ObjectSetInteger(0,oPP,OBJPROP_COLOR,clrDeepSkyBlue);
   ObjectSetInteger(0,oPP,OBJPROP_STYLE,STYLE_SOLID);
   ObjectSetInteger(0,oPP,OBJPROP_WIDTH,2);
   ObjectSetInteger(0,oPP,OBJPROP_RAY,false);
   ObjectCreate(0,oRes1,OBJ_TREND,0,0,0,0,0);
   ObjectSetInteger(0,oRes1,OBJPROP_COLOR,clrDeepSkyBlue);
   ObjectSetInteger(0,oRes1,OBJPROP_STYLE,STYLE_DASH);
   ObjectSetInteger(0,oRes1,OBJPROP_WIDTH,1);
   ObjectSetInteger(0,oRes1,OBJPROP_RAY,false);
   ObjectCreate(0,oSup1,OBJ_TREND,0,0,0,0,0);
   ObjectSetInteger(0,oSup1,OBJPROP_COLOR,clrDeepSkyBlue);
   ObjectSetInteger(0,oSup1,OBJPROP_STYLE,STYLE_DASH);
   ObjectSetInteger(0,oSup1,OBJPROP_WIDTH,1);
   ObjectSetInteger(0,oSup1,OBJPROP_RAY,false);
   PPlevel();
  }
//+------------------------------------------------+
//| Пивот поинт                                    |
//+------------------------------------------------+
void PPlevel()
   {
    double iH=iHigh(Symbol(),PERIOD_D1,1);
    double iL=iLow(Symbol(),PERIOD_D1,1);
    double iC=iClose(Symbol(),PERIOD_D1,1);
    double iO=iOpen(Symbol(),PERIOD_D1,1);
    int New_candle=0;
    New_candle=NBar(); // функция появления новой свечи
    if(New_candle==1)
      {
       double range=NormalizeDouble(iH-iL,_Digits);
       double PP=NormalizeDouble((iH+iL+iC)/3,_Digits);
       double R1=NormalizeDouble((2*PP)-iL,_Digits);
       double S1=NormalizeDouble((2*PP)-iH,_Digits);
       TimeStart=iTime(Symbol(),PERIOD_D1,0)-7200;
       TimeFinish=Topen[0]+64000;
       ObjectSetInteger(0,oPP,OBJPROP_TIME,TimeStart);                 // отрисовка PP
       ObjectSetDouble(0,oPP,OBJPROP_PRICE,PP);
       ObjectSetInteger(0,oPP,OBJPROP_TIME,1,TimeFinish);
       ObjectSetDouble(0,oPP,OBJPROP_PRICE,1,PP);
       ObjectSetInteger(0,oRes1,OBJPROP_TIME,TimeStart);               // отрисовка сопротивления
       ObjectSetDouble(0,oRes1,OBJPROP_PRICE,R1);
       ObjectSetInteger(0,oRes1,OBJPROP_TIME,1,TimeFinish);
       ObjectSetDouble(0,oRes1,OBJPROP_PRICE,1,R1);
       ObjectSetInteger(0,oSup1,OBJPROP_TIME,TimeStart);               // отрисовка поддержки
       ObjectSetDouble(0,oSup1,OBJPROP_PRICE,S1);
       ObjectSetInteger(0,oSup1,OBJPROP_TIME,1,TimeFinish);
       ObjectSetDouble(0,oSup1,OBJPROP_PRICE,1,S1);
      }
   }
Lo comprobé con Print() y obtuve resultados de cálculo normales "Ejemplo: (GBPUSD,H1) 0.0152 i 1.5911 i 1.59682 i 2013.01.20 22:00:00 i 2013.01.22 09:46:40" pero no dibuja estos niveles. Comprobando en el terminal a través de la"Lista de objetos", no están ahí. Por favor, indíqueme cuál es el problema. ¿En qué me equivoco?
 
WindSW:

Tengo problemas para dibujar los niveles.

Lo comprobé con Print() y obtuve resultados de cálculo normales "Ejemplo: (GBPUSD,H1) 0.0152 i 1.5911 i 1.59682 i 2013.01.20 22:00:00 i 2013.01.22 09:46:40" pero no dibuja estos niveles. Comprobando en el terminal a través de la"Lista de objetos", no están ahí. Por favor, indíqueme cuál es el problema. ¿En qué me equivoco?
Imprime los resultados de ObjectCreate, tal vez haya un error allí.
Razón de la queja: