Вопросы от "чайника" - страница 248

 

Silent:

Что - К? К инициализирована как false. По ходу присвоили true. Потом проверяем - if (К). Что - К?...


покурите доки для начала.

поймите, что bool в if - это не только true/false. для компилятора все что не 0 это true

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

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

покурите доки для начала.

поймите, что bool в if- это не только true/false. для компилятора все что не 0 это true

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

Да, как то я пропустил этот момент. Спасибо, учту.
 

Пытаюсь получить время/цену выделенной трендовой линии

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

для

TL1_Old_Time=ObjectGetInteger(0,n,OBJPROP_TIME);

получаю предупреждение

possible loss of data due to type conversion

Но

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

Вопрос 1: как правильно преобразовать?

Для

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

получаю не время второй точки линии, а время начала истории по символу

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

Вопрос 2: почему, если

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

с

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

игрался всяко, удалял, циферки разные ставил - время объекта не получаю.

Если имеется ввиду идентификатор линии - как его получить, не могу найти соответствующую функцию.

Upd

line_id

вообще, похоже, к индикаторам относится, тогда почему не отражено в документации. Так то

ObjectGetTimeByValue

в разделе графических объектов.

 

Хм. Избавился от предупреждения, объявив как long

long           TL1_Old_Time,TL2_Old_Time;

Это надо понимать, что

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

для
TL1_Old_Time=ObjectGetInteger(0,n,OBJPROP_TIME);

получаю предупреждение

possible loss of data due to type conversion 

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

такая кривая в языке функция

 
A100:

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

такая кривая в языке функция

Т. е., для функций можно (а в моём случае - нужно) задавать преобразование?

Спасибо.

 
Silent:

Т. е., для функций можно (а в моём случае - нужно) задавать преобразование?

Получается, что нужно. Но также можно игнорировать предупреждения, что в ряде случаев не совсем удобно
 
A100:
Получается, что нужно. Но также можно игнорировать предупреждения, что в ряде случаев не совсем удобно

Ок.

А игнорировать не вариант, и журнал ошибок закидывает чем попало при компиляции, и потенциально проблемное место - значит, надо ответы искать :)

 

Надо получить кол-во баров минут со старшего тф.

От Bars получаю непонятную цифру. Запускаю на H1, получаю 1201. На M1 - 6.

Подскажите, где проблема

//--- для 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);
     }
  }
//+------------------------------------------------------------------+

Можно так.

И у Вас что то много секунд в часе, целых 72000! Мне бы столько в реальности )).

В реальном коде еще нужно проверять синхронизацию меньшего таймфрейма.

Причина обращения: