エラー、バグ、質問 - ページ 2888

 
Denis Diakonov:

教えてください!

新しいティックが入ったときにサーバーの時刻が更新されないのはなぜですか?

EAが起動した瞬間は全て正常に動作しているのですが、その後時間が経過しても現在の分の新しい値が変数に入ってきません。

つまり、変数int M = TimeMinute(TimeCurrent()) で得られる数値によってExpert Advisorが動作するのです。

実はこのコード行はリファレンスにあったもので、うまくいかないのです。

例えば、12時に起動した場合、サーバーから返される現在の時刻は 変数内の時刻と一致しますが、時計ではすでに15-20分経過しているにもかかわらず、変数はまだ12時のままになっています。

MQL5では、TimeMinute()は使用できません。

MQL4に関するご質問は、該当するMetaTrader 4のブランチに投稿してください。

クロスプラットフォームソリューションが必要な場合は、MqlDateTimeを 使用してください。

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура даты
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура даты
  • www.mql5.com
Порядковый номер в году day_of_year в високосном году, начиная с марта, будет отличаться от порядкового номера соответствующего дня в невисокосном году.
 
怪しげな警告ですね。
void OnStart()
{
    for ( int i = 0, j; i < 10; i = j ) //(1) Warning: possible use of uninitialized variable 'j'
    {
        j = i+1;
    }
}

が、それでいい。

void OnStart()
{
    for ( int i = 0, j; i < 10;       ) //(2) нормально
    {
        j = i+1;
                                i = j;
    }
}

根本的な違いは何でしょうか?

 
A100:
かなり怪しげな警告ですね。

が、それでいい。

根本的な違いは何でしょうか?

正しい警告変数iにjの値が代入されるとき、最初の使用前に変数jは初期化されない。

そして、2つ目のバリエーションでは、j変数にi+1という値が代入され、初めてi = jとなる

本来は警告なしでこうあるべきなのですが、テストしていないので...。

void OnStart()
{
    for ( int i = 0, j = 0; i < 10; i = j )
    {
        j = i+1;
    }
}
 
Alexey Viktorov:

正しい警告

の場合、これらは同一のサイクルである。
 
TheXpert:
は、同じループです。

では、このループの同一性によって、未同定の変数が使えるようになるのか?

 
Alexey Viktorov:

では、このループの同一性によって、未同定の変数が使えるようになるのか?

ループが同一であれば、コンパイラの動作も同一になるはずですが、それが異なっています。そこに間違いがあるのです。(1) 警告がある理由を説明しましたが、(2)で警告がない理由を説明してください。原理的に何が変わったのでしょうか?それから、初期化されていない変数が使われている場合、なぜコードを実行すると最終結果が正しくなるのでしょうか?

そんな科学、ロジックがあるのです。AとBが同じでAが赤なら、Bも緑ではなく であるべきだ

 
A100:

ループが同じなら、コンパイラの動作も同じはずなのに、違っているのです。ここに間違いがあるのです。(1) 警告がある理由を説明し、(2)で警告がない理由を説明してください。原理的に何が変わったのでしょうか?それから、初期化されていない変数が使われている場合、なぜコードを実行すると最終結果が正しくなるのでしょうか?

そんな科学、ロジックがあるのです。AとBが同じでAが赤なら、Bも赤で なければならず、緑では ありません。

そこに乱数は存在しない。そこにはゼロがある。
MQも修正しました ))

void OnStart()
{
   int val;
   
   Print(val);
   Print(IntegerToString(val));
}
 
Roman:

そこに乱数は 存在しない。そこにはゼロがある。
MQはその点も修正しました ))

まず確認すること-それから「でたらめ」。

void OnStart()
{
        for ( int i = 0, j; i < 10; i++ )
        {
                Print( j );
                break;
        }
}

結果: -2052256859


 
A100:

まず確認すること、それから「くだらないことを言う」ことです。

結果: -2052256859


void OnStart()
{
   for ( int i = 0, j; i < 10; i++ )
   {
      Print( j );                
   }
}
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0

VirtualBoxにテスト用端末をインストールしているためか
また、コンパイラが変数が初期化されていないことを警告してくれません。

しかし、このように警告しています。

void OnStart()
{
   for ( int i = 0, j; i < 10; i++ )
   {
      Print( IntegerToString(j) );                
   }
}
 
Roman:
おそらく、VirtualBoxにテスト用端末をインストールしているためだと思いますが

あなたは乱数0、私は540016640です。

2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640

が、乱数であることに変わりはない。