Perguntas de um "boneco" - página 248

 

Silent:

O quê - K? K é rubricado como falso. Atribuído verdadeiro ao longo do caminho. Depois verificamos - se (K). O quê - K?


Leia primeiro os documentos.

Compreender que um bool in se não for apenas verdadeiro/falso. Para o compilador, tudo o que não for 0 é verdadeiro.

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

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

Leia os documentos para começar.

Compreender que um bool in se não for apenas verdadeiro/falso. para o compilador, tudo o que não for 0 é verdadeiro.

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

Sim, de alguma forma falhei esse ponto. Obrigado, vou ter isso em mente.
 

Tentar obter o tempo/preço da linha de tendência destacada

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);

Recebo um aviso

possible loss of data due to type conversion

Mas

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

Pergunta 1: como converter correctamente?

Para

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

Não recebo a hora do segundo ponto da linha, mas a hora do início da história pelo 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

Pergunta 2: Porquê se

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

с

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

Fiz todo o tipo de truques, apaguei e adicionei números - não recebo tempo de objecto.

Se se refere ao identificador de linha - como obtê-lo, não consigo encontrar a função.

Actualização

line_id

Em geral, parece estar relacionado com os indicadores, então porque não está reflectido na documentação. Assim, então

ObjectGetTimeByValue

na secção de objectos gráficos.

 

Hmm. Livrou-se do aviso declarando o tempo

long           TL1_Old_Time,TL2_Old_Time;

Deve ser entendido que.

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

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

Recebo um aviso

possível perda de dados devido à conversão do tipo

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

uma tal curva na função da língua

 
A100:

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

uma tal curva na função da língua

Isto é, pode (e no meu caso deve) especificar uma conversão para funções?

Obrigado.

 
Silent:

Então, é possível (e no meu caso, necessário) especificar uma transformação para funções?

Acontece que deveria. Mas também é possível ignorar os avisos, o que, em alguns casos, não é muito conveniente
 
A100:
Acontece que deveria. Mas também pode ignorar avisos, o que em alguns casos não é muito conveniente

OK.

E ignorar não é uma opção, e o registo de erros fica recheado de qualquer coisa durante a compilação, e local potencialmente problemático - por isso tem de procurar respostas :)

 

Preciso de obter o número de barras de minutos a partir do período de tempo elevado.

Recebo um número incompreensível de Bars. Começo no H1 e recebo 1201. Em M1 eu recebo 6.

Pode dizer-me onde está o 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);
     }
  }
//+------------------------------------------------------------------+

Pode fazer isso.

E tem muitos segundos numa hora, até 72.000! Quem me dera ter tantos assim na realidade )).

Em código real ainda precisa de verificar a sincronização do menor período de tempo.

Razão: