Preguntas de un "tonto" - página 248

 

Silent:

¿Qué? ¿K? K se inicializa como falso. Asignado verdadero en el camino. Entonces comprobamos - si (K). ¿Qué? ¿K?


Lee primero los documentos.

Entienda que un bool en if no es sólo verdadero/falso. Para el compilador, cualquier cosa que no sea 0 es verdadera.

https://www.mql5.com/ru/docs/basis/types/integer/boolconst

Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип bool
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип bool
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Тип bool - Документация по MQL5
 
sergeev:

Para empezar, lee los documentos.

Entienda que un bool en if no es sólo verdadero/falso. para el compilador, cualquier cosa que no sea 0 es verdadera.

https://www.mql5.com/ru/docs/basis/types/integer/boolconst

Sí, de alguna manera me perdí ese punto. Gracias, lo tendré en cuenta.
 

Tratando de obtener el tiempo/precio de la línea de tendencia resaltada

datetime       TL1_Old_Time,TL1_New_Time,TL2_Old_Time,TL2_New_Time;
double         TL1_Old_Prise,TL1_New_Prise,TL2_Old_Prise,TL2_New_Prise;
int            i;
string         n;

void OnStart()
  {
   if(ObjectsTotal(0,0,OBJ_TREND)<=0)
     {
      Print("-1 Trendlines не обнаружены");
      return;
     };
   for(i=ObjectsTotal(0,0,OBJ_TREND)-1;i>=0;i--)
     {
      n=ObjectName(0,i,0,OBJ_TREND);
      Print("0 Trendline "+n);
      if(ObjectGetInteger(0,n,OBJPROP_SELECTED))
        {
         TL1_Old_Prise=ObjectGetDouble(0,n,OBJPROP_PRICE,0);
         Print("TL1_Old_Prise = "+DoubleToString(TL1_Old_Prise));
         TL1_Old_Time=ObjectGetInteger(0,n,OBJPROP_TIME);
         Print("TL1_Old_Time = "+TimeToString(TL1_Old_Time));
         TL2_Old_Prise=ObjectGetDouble(0,n,OBJPROP_PRICE,0);
         Print("TL2_Old_Prise = "+DoubleToString(TL2_Old_Prise));
         TL2_Old_Time=ObjectGetTimeByValue(0,n,TL2_Old_Prise,0);
         Print("TL2_Old_Time = "+TimeToString(TL2_Old_Time));
        };
     };
  }

para

TL1_Old_Time=ObjectGetInteger(0,n,OBJPROP_TIME);

Recibo una advertencia

possible loss of data due to type conversion

Pero

ObjectGetInteger
Возвращает значение соответствующего свойства объекта.
Свойство объекта должно быть типов datetime, int, color, bool или char.

Pregunta 1: ¿cómo convertir correctamente?

Para

TL2_Old_Time=ObjectGetTimeByValue(0,n,TL2_Old_Prise,0);

No consigo la hora del segundo punto de la línea, sino la hora del comienzo de la historia por el símbolo

2013.05.19 17:01:52     s_Trend_Line_avto_position_1_00 (EURUSD,D1)     TL2_Old_Time = 1970.01.01 00:00

Pregunta 2: ¿por qué si

ObjectGetTimeByValue
Возвращает значение времени для указанного значения цены указанного объекта.

с

   int     line_id       // номер линии

He hecho todo tipo de trucos, he borrado y añadido números - no tengo tiempo de objeto.

Si te refieres al identificador de línea - cómo obtenerlo, no encuentro la función.

Actualización

line_id

En general, parece que se relaciona con los indicadores, entonces por qué no se refleja en la documentación. Así que entonces

ObjectGetTimeByValue

en la sección de objetos gráficos.

 

Hmm. Me deshice de la advertencia declarando como largo

long           TL1_Old_Time,TL2_Old_Time;

Debe entenderse que.

ObjectGetInteger
Возвращает значение соответствующего свойства объекта в каком формате?.
Свойство объекта должно быть типов datetime, int, color, bool или char.
 
Silent:

para
TL1_Old_Time=ObjectGetInteger(0,n,OBJPROP_TIME);

Recibo una advertencia

posible pérdida de datos debido a la conversión de tipos

TL1_Old_Time=(datetime)ObjectGetInteger(0,n,OBJPROP_TIME)

tal curva en la función lingüística

 
A100:

TL1_Old_Time=(datetime)ObjectGetInteger(0,n,OBJPROP_TIME)

tal curva en la función lingüística

Es decir, ¿se puede (y en mi caso se debe) especificar una conversión para las funciones?

Gracias.

 
Silent:

Entonces, ¿es posible (y en mi caso, necesario) especificar una transformación para las funciones?

Resulta que sí. Pero también es posible ignorar las advertencias, lo que en algunos casos no es muy conveniente
 
A100:
Resulta que sí. Pero también puedes ignorar las advertencias, lo que en algunos casos no es muy conveniente

DE ACUERDO.

E ignorar no es una opción, y el registro de errores se rellena con cualquier cosa durante la compilación, y el lugar potencialmente problemático - por lo que tiene que buscar respuestas :)

 

Necesito obtener el número de barras de minutos del marco temporal alto.

Recibo un número incomprensible de Bares. Lo arranco en H1 y obtengo 1201. En la M1 tengo 6.

¿Puede decirme dónde está el problema?

//--- для H1
//--- переменные для указания параметров функции
   int start = 5; // индекс бара
   int count = 1; // количество баров
   int b=72000;   // секунд в H1
   int bm;        // надо получить
   datetime tm[]; // массив, в котором возвращается время баров
//--- копирование времени 
   CopyTime(_Symbol,PERIOD_CURRENT,start,count,tm);
//--- вывод результата
   Print(tm[0]);

   bm=Bars(_Symbol,PERIOD_M1,tm[0]+b,tm[0]);
   Print("bm = "+bm);
//--- возвращает bm = 1201
   bm=Bars(_Symbol,PERIOD_M1,tm[0]-b,tm[0]);
   Print("bm = "+bm);
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int start=5;
   int count=2;
   datetime _time[];
   datetime _timeM1[];
   int ntime=CopyTime(_Symbol,_Period,start,count,_time);//узнаем время 5 и 4 бара, нумерация как в тайм серии
   if(ntime>0)
     {
      Print("_time[0]=",_time[0]);
      Print("_time[1]=",_time[1]);
      
      datetime endtime=_time[1]-PeriodSeconds(PERIOD_M1);
      int nM1=CopyTime(_Symbol,PERIOD_M1,_time[0],endtime,_timeM1);//получаем массив содержащий время минуток и число минуток
      if(nM1>0)
       {
        Print("Число минуток в период с ",_time[0]," по ",endtime," =",nM1);
       }
      int nbarsM1=Bars(_Symbol,PERIOD_M1,_time[0],endtime);//проверимся
      Print("Число минуток =",nbarsM1);
     }
  }
//+------------------------------------------------------------------+

Puedes hacerlo.

Y tienes muchos segundos en una hora, ¡hasta 72.000! Ojalá tuviera tantos en la realidad )).

En el código real, todavía hay que comprobar la sincronización del marco temporal más pequeño.