初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 85

 

その他にも、途中でいくつか疑問が出てきました。

1.文字列がある。

datetime ProvTimeX1=ObjectGetInteger(0, "Y="+IntegerToString(y,0,''),OBJPROP_TIME);

コンパイラは、「型変換によるデータ損失の可能性」と書いて、これを嫌がる。ここで何が問題なのか?

2.mql5はどのようにデータを配列に入れ、どの方向に分配しているのでしょうか?

 
WindSW:

その他にも、途中でいくつか疑問が出てきました。

1.文字列がある。

datetime ProvTimeX1=ObjectGetInteger(0, "Y="+IntegerToString(y,0,''),OBJPROP_TIME);

コンパイラは、「型変換によるデータ損失の可能性」と書いて、これを嫌がる。ここで何が問題なのか?

ObjectGetIntegerで 返されたlongの値を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);
ドキュメント >> 型変換
 

もちろん、何かを変更するために何かを追加しなければならないというのは愚かなことで、ドットのない電卓もあるし、データの種類を指定する必要もない、でもいい、2番目の方法は、整数の最後に「.0」を追加することである。

ということで、正しい表現は次のようになります。

double res =8000.0/16000.0*100;
Print(res);
ところで、いくつかのプログラミング言語では、端末がその型を選択するように変数を見た、おそらくそれは数値データのためだけだったが、それでも快適な、それはここに実装されていない、私はドキュメントで見つけることを試みた - 見つけることができなかった?
 
お疲れ様でした)
 

バージョン 4 では、datetime 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というdatetime 行を指しています。

4の時と同じ結果を5で得るにはどうしたらいいのか、アドバイスをお願いします。

追記:正しく書かれています。ただ、OnInitで配列が空になってしまうというミスがありました。

 
WindSW:

バージョン 4 では、datetime TimeX2=Time[0]+18000; - 時間値を 5 本のローソク足で前進させるようにした。

現在、執筆時に5で。

デバッグ時に配列のオーバーフローエラーが発生し、TimeX2=Topen[0]+18000というdatetime 行を指しています。

4の時と同じ結果を5で得るにはどうしたらいいのか、アドバイスをお願いします。

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()で確認したところ、正常な計算結果 "Example "が得られました。(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()で確認したところ、正常な計算結果 "Example "が得られました。(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の結果を表示してください。もしかしたら、そこにエラーがあるかもしれません。
理由: