初学者的问题 MQL5 MT5 MetaTrader 5 - 页 85

 

一路上还出现了其他几个问题。

1.有一个字符串。

数据时间 ProvTimeX1=ObjectGetInteger(0, "Y="+IntegerToString(y,0,''),OBJPROP_TIME)。

编译器对它不屑一顾,写道" 由于类型转换,可能会丢失数据"。这里有什么问题吗?

2.mql5是如何将数据放入数组并分配的,在哪个方向?

 
WindSW:

一路上还出现了其他几个问题。

1.有一个字符串。

数据时间 ProvTimeX1=ObjectGetInteger(0, "Y="+IntegerToString(y,0,''),OBJPROP_TIME)。

编译器对它不屑一顾,写道" 由于类型转换,可能会丢失数据"。这里有什么问题吗?

好吧,这是对的,你是想把ObjectGetInteger 返回的一个长值写进datetime变量。做类型转换。

datetime ProvTimeX1=(datetime)ObjectGetInteger(0,"Y="+IntegerToString(y,0,' '),OBJPROP_TIME);
2.mql5中的数据是如何放入数组并分配的,在哪个方向?

方向总是相同的--从开始(索引为0)到结束, 如果没有指定用ArraySetAsSeries 函数进行索引。如果问题是关于索引的。

 

下午好,我不能除以这些数字,结果是0.0

为什么?

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

下午好,我不能除以这些数字,结果是0.0

为什么?



   double res=((double)8000/16000)*100;
   Print(res);
文档>>类型转换
 

这当然是愚蠢的,你必须添加一些东西来改变一些东西,一些没有点的计算器是很好的,它不需要指定什么类型的数据,但是好的,第二种方法是在整数的末尾添加".0"

所以正确的表达方式应该是这样的。

double res =8000.0/16000.0*100;
Print(res);
顺便说一下,在一些编程语言中看到一个变量,以便终端选择它的类型,也许它只适用于数字数据,但仍然很舒服,是不是在这里没有实现,我试图在文档中找到 - 找不到?
 
谢谢大家)
 

在版本4中:数据时间TimeX2=Time[0]+18000;--将时间值向前增加了5根蜡烛

现在在5写的时候。

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

调试时,它给出了数组溢出错误,并指向日期 行 TimeX2=Topen[0]+18000。

请告知如何在5中获得与4中相同的结果?

补充:写得很正确,我只是犯了一个错误--在OnInit中数组是空的。

 
WindSW:

在版本4中:数据时间TimeX2=Time[0]+18000;--将时间值向前增加了5根蜡烛

现在在5写的时候。

调试时,它给出了数组溢出错误,并指向日期 行 TimeX2=Topen[0]+18000。

请告知如何在5中获得与4中相同的结果?

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

我遇到了一个关于绘制水平的问题。

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);
      }
   }
我用Print()检查,得到正常的计算结果 "例如。(GBPUSD,H1) 0.0152 i 1.5911 i 1.59682 i 2013.01.20 22:00:00 i 2013.01.22 09:46:40" 但它并没有画出这些水平。在终端通过"对象列表"检查,它们不在那里。请告知问题出在哪里?我哪里错了?
 
WindSW:

我在画水平时遇到了困难。

我用Print()检查,得到正常的计算结果 "例如。(GBPUSD,H1) 0.0152 i 1.5911 i 1.59682 i 2013.01.20 22:00:00 i 2013.01.22 09:46:40" 但它并没有画出这些水平。在终端通过"对象列表"检查,它们不在那里。请告知问题出在哪里?我哪里错了?
打印ObjectCreate的结果,也许那里有一个错误。