MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1116

 
Roman:

ヘルプには、EnumToString() で変換した識別子ではなく、タイムフレームの値を 返すように書かれています。
変数_Periodは、intを返します。
ENUM_TIMEFRAMES Period() は int が返されることを意味する。

それを暗示しているのは、あなただけなのです。実際には、Period()はENUM_TIMEFRAMES 列挙の値を返します。

この列挙の中の定数の値をプリントアウトすると、すでに見慣れた数字が表示される。

そして、いつもこんな感じです。MQL5が誕生したときからそうだったんです。

そして、何が返却されるかはヘルプに明記されています。

Value は、 ENUM_TIMEFRAMES列挙型の値のいずれか である。

Документация по MQL5: Проверка состояния / Period
Документация по MQL5: Проверка состояния / Period
  • www.mql5.com
Проверка состояния / Period - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin:

これを暗示しているのは、あなただけです。実際、Period()はENUM_TIMEFRAMES 列挙の値を返す。

この列挙の中の定数の値をプリントアウトすると、すでに見慣れた数字が表示される。

そして、いつもこんな感じです。MQL5が誕生したときからそうだったんです。

そして、ヘルプには、返却されるものが明確に書かれています。

ENUM列挙型はどのような型を返すのでしょうか?)
そして、参考文献にははっきりとこう書かれています。
現在のチャートのタイムフレーム値を 返します。

自分で印刷する

Print(PERIOD_M30);
Print(PERIOD_H1);
 
Roman:

そして、ENUM列挙はどのような型を返すと思いますか?)
そして、参考文献にははっきりとこう書かれています。
現在のチャートのタイムフレーム値を 返します。

自分でプリントする

何を証明したいんだ?

いつ、どこで、何が印刷され、どんなデータが返されるのか、完璧に把握しています。

現在の期間の分数を知りたいのですか?

このように取得します。

PeriodSeconds(Period())/60;

とか、こんな感じ。

PeriodSeconds(PERIOD_CURRENT)/60;

あるいはこんな感じ。

PeriodSeconds()/60;
 
Artyom Trishkin:

何を証明したいんだ?

何もあなたに、この問題について書いたのではなく、開発者に書いたのです。
M30、H1と印刷を重ね、その違いを実感してください。

Print(_Period);
 
Roman:

どうでもいいんだろ、不具合について書き込んだんじゃなくて、開発者に書き込んだんだから。
M30、H1と印刷を重ね、その違いを実感してください。

問題ないです。今までもそうでした。

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

バグ、バグ、質問

アルチョム・トリシキン, 2020.04.09 22:11

何を証明したいのですか?

いつ、どこで、何を印刷し、どんなデータを返すのか、よく理解しています。

現在の期間の分数を知りたいのですか?

この方法で取得します。

PeriodSeconds(Period())/60;

とか、こんな感じ。

PeriodSeconds(PERIOD_CURRENT)/60;

とか、こんな感じ。

PeriodSeconds()/60;

 
Roman:

その必要はありません、私はあなたに問題を書いたのではなく、開発者に書いたのです。
M30とH1に増刷し、その違いをご覧ください。

MQL4から脱却できないのか?

こんな感じでMQL4でやってください。

PeriodSeconds(Period())/60;

とか、こんな感じ。

PeriodSeconds(PERIOD_CURRENT)/60;

あるいはこんな感じ。

PeriodSeconds()/60;

そして、結果の値をプリントアウトする。

 
Artyom Trishkin:

MQL4から脱却できないのか?

こんな感じでMQL4でやってください。

とか、こんな感じ。

とか、こんな感じ。

を実行し、結果の値をプリントアウトします。

mql4 )) を使っていなかったので、慣れませんでした。
なぜ、さらに60で割る必要があるのですか?
ヘルプのどこにそんなことが書いてあるんだ?
バグを迂回するのは、すでにあなたの松葉杖です。
今度は、すべてのタイムフレームで、あなたの松葉杖をチェックしてみてください。

Print(_Period / 60);
 
Roman:

mql4 )) を使っていなかったので、慣れませんでした。
なぜ、さらに60で割る必要があるのですか?
ヘルプのどこにそんなことが書いてあるんだ?
バグを迂回するのは、すでにあなたの松葉杖です。

面目躍如
 
Roman:

変数_PeriodおよびM30までのPeriod()関数は、値を分単位で表示します。
期間M1なら1
期間M2なら2
...
期間M30なら30

1時間当たりの回転数が60回転になるのは理にかなっています。
二時限目 120
三時百八十分
など

しかし、H1以降は間違った値が表示されます。

プログラムが「間違った値」を出力した場合、プログラムが「何を考えているか」を確認する必要があるが、プログラムはバイナリ形式でしか考えることができない

確認したら、そうだった。

void OnStart()
{

   ENUM_TIMEFRAMES allperiod[] = {PERIOD_CURRENT, PERIOD_M1, PERIOD_M2, PERIOD_M3, PERIOD_M4, PERIOD_M5, PERIOD_M6, PERIOD_M10, PERIOD_M12, PERIOD_M15, PERIOD_M20, PERIOD_M30, PERIOD_H1, PERIOD_H2,
                                  PERIOD_H3, PERIOD_H4, PERIOD_H6, PERIOD_H8, PERIOD_H12, PERIOD_D1, PERIOD_W1, PERIOD_MN1
                                 };
   for(int i = 0; i < ArraySize(allperiod); i++)
      Print(UintToBinary((uint)allperiod[i]));

}
//+------------------------------------------------------------------+
string UintToBinary(uint n)
{
   string r = "";
   if(n == 0) return("0");
   while(n != 0)
   {
      r = (n % 2 == 0 ? "0" : "1") + r;
      n /= 2;
   }
   return(r);
}
//+------------------------------------------------------------------

2020.04.10 00:38:57.118 tst (EURUSD,H1) 0

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1

2020.04.10 00:38:57.118 tst (EURUSD,H1) 10

2020.04.10 00:38:57.118 tst (EURUSD,H1) 11

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100

2020.04.10 00:38:57.118 tst (EURUSD,H1) 101

2020.04.10 00:38:57.118 tst (EURUSD,H1) 110

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1010

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1100

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1111

2020.04.10 00:38:57.118 tst (EURUSD,H1) 10100

2020.04.10 00:38:57.118 tst (EURUSD,H1) 11110

2020.04.10 00:38:57.118 tst (EURUSD,H1) 10000000001

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000000010

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000000011

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000000100

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000000110

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000001000

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1000000001100

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000011000

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000001

2020.04.10 00:38:57.118 tst (EURUSD,H1) 11000000000001


 
Artyom Trishkin:
面目躍如

本当にスリーブ...

異なる時間軸で印刷する。

Print(_Period);
2020.04.09 23:39:49.963 VP (EPM20,M1)   1
2020.04.09 23:39:53.135 VP (EPM20,M3)   3
2020.04.09 23:39:53.758 VP (EPM20,M5)   5
2020.04.09 23:39:54.377 VP (EPM20,M10)  10
2020.04.09 23:39:55.094 VP (EPM20,M15)  15
2020.04.09 23:39:55.679 VP (EPM20,M30)  30
2020.04.09 23:39:56.384 VP (EPM20,H1)   16385  //Почему не 60 ?
2020.04.09 23:39:57.071 VP (EPM20,H4)   16388  //Почему не 240 ?
2020.04.09 23:39:57.641 VP (EPM20,D1)   16408  //Почему не 1440 ?
2020.04.09 23:39:58.181 VP (EPM20,W1)   32769  и т.д.
2020.04.09 23:39:58.768 VP (EPM20,MN1)  49153