来自一个 "傻瓜 "的问题 - 页 248

 

Silent:

什么--K?K被初始化为假。一路走来,分配到了真实。然后我们检查--如果(K)。什么--K?


首先阅读文档。

要明白if中的bool不只是真/假,对于编译器来说,任何不是0的都是真。

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

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

首先要阅读文档。

理解if中的bool不只是真/假。对于编译器来说,任何不是0的东西都是真。

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       // номер линии

我已经做了各种技巧,删除和添加数字--我没有得到对象时间。

如果你指的是行标识符--如何得到它,我找不到这个函数。

更新

line_id

一般来说,它似乎与指标有关,那么为什么没有反映在文件中。那就

ObjectGetTimeByValue

在图形对象部分。

 

摆脱了警告,宣布只要

long           TL1_Old_Time,TL2_Old_Time;

应该理解的是,。

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

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

我得到一个警告

由于类型转换可能造成的数据损失

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

你可以做到这一点。

而你在一小时内有很多秒,多达72,000秒!我希望我在现实中也有这么多))。

在实际代码中,你仍然需要检查较小的时间框架的同步性。