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

 
Alexey Navoykov:

何がしたいのか理解できない。私は「変数の初期化」の話をしたと言ったのです。そして、この文脈では、静的変数とグローバル変数の動作は同じです。ドキュメントへのリンクも用意しました:変数の初期化

静的変数とグローバル変数が一緒に並んでいることに注意してください。

また、初期化シーケンスについては、当面の問題とは関係ないので、批判はしません。問題は、コンパイラがエラーを発生させるべきところで、エラーを発生させないことです。静的変数がまだ初期化されていない場合は、アクセスできません。

まあ、そんなに気になるなら、グローバル変数の名前を変えればいい。結果に何ら影響を与えるものではありません。

こんにちは、お待たせしました!ご自身でリンク先を読まれましたか?

mqlの他に、私はVBAしか知りませんが、あまり良くなく、そこで初めて変数の初期化を必要とするディレクティブに出会いました。あくまでプログラマーの裁量に任されていることに注意してください。そして、MQに全ての変数を強制的に初期化させたいのですか?そして、そのようなユーザーによるクレームのたびに初期化シーケンスを変更するのですか?あなたは、自分が何をしているかを理解した上で、ルールから逸脱する機会を与えられたのに、そのような機会を排除しろというのですか?

あなたはただ、mqlの言語を非難し、汚点をつけるために何かを探しているように思えます。クラス内の変数からstaticを取り除くと幸せになれます。

 

GetTickCount()で取得したシステム変数がオーバーフローした場合、どうなりますか?

端末からの標準的な反応はありますか?

この瞬間をプログラムで監視し、対応を実施する必要性はあるのか?

 
Alexey Viktorov:

こんにちは、お待たせしました!このリンクはご自分で読まれましたか?

mqlの他には、VBAしか知りませんが、これもあまり良くなく、そこで初めて、変数の初期化が義務付けられているという指令に出会いました。あくまでプログラマーの裁量に任されていることに注意してください。そして、MQにすべての変数を強制的に初期化させたいのですか?

そこに理由があるんです。よく知らないだけでなく(自分で何回言ってるんだ)、この言語とはほとんど関係ないVBAも知っている。私はC++をよく知っています。これは、あなたが空想している、非常に明確で厳格な言葉、そこに自由意志は許されないのです。そして、MQLはC++に似せて作られたのです。だから、やめましょう。まずはC++に慣れろ、そうすれば何か議論する意味も出てくるはずだ。

p.s. ところで、私は今になって、あなたがもともと話を間違った方向に持っていったことに気づきました。というのも、私はすでにこの話の発端を忘れていて、今改めて私の元のコードを見て、あなたがここで 最初に攻撃したのは完全にオフトピックだったことに気づいたのです。と、一気に注目しないわけがない!私のコードでは、スタティック変数は、ドキュメントに記載されているように、まさに定数として 初期化されています。つまり、初期化されていないことが問題なのです。そして、「定数で初期化しなければならないからだ」と言い始めたんですね。そして、ここからが本番です...

 

なぜ変数で配列を初期化 できないのですか?

void (double a, double b,double c )

{

double inp[3]={a,b,c};   // компилятор ругается 'а' - constant expression required      

}

 
Alexey Kochetkov:

なぜ変数で配列を初期化 できないのですか?

なぜなら、MQLでは定数でしか初期化できないからです。
 
Alexey Navoykov:

まあ、そこに理由があるんですけどね。あまりよく知らないだけでなく(自分で何回言ってるんだ)、当該言語とあまり関係のないVBAも知っているんですね。私はC++をよく知っています。これは、あなたが空想している、非常に明確で厳格な言葉、そこに自由意志は許されないのです。そして、MQLはC++に似せて作られたのです。だから、やめましょう。まずはC++に慣れろ、そうすれば何か議論する意味も出てくるはずだ。

p.s. ところで、私は今になって、あなたがもともと話を間違った方向に持っていったことに気づきました。というのも、私はすでにこの話の発端を忘れていて、今改めて私の元のコードを見て、あなたがここで 最初に攻撃したのは完全にオフトピックだったことに気づいたのです。と、一気に注目しないわけがない!私のコードでは、スタティック変数は、ドキュメントに記載されているように、まさに定数として 初期化されています。つまり、初期化されていないことが問題なのです。そして、「定数で初期化しなければならないからだ」と言い始めたんですね。そして、そこにあるのは...。

最後にもう一度、初期化シーケンスを勉強 するために呼んでいるんだ。知識よりも論理的思考力が重要なようです。プログラミング言語はすべて心得ていても、初期化シーケンスについては 理解しておく必要があります。

静的変数は、グローバル変数の前に初期化することはできません。そして、それがすべてを物語っている。

 
ChartNavigateのバグ
const bool Init = ChartSetInteger(0, CHART_AUTOSCROLL, false) && EventSetTimer(1);  

void OnTimer()
{  
  Print("----------")  ;
  Print(ChartGetInteger(0, CHART_FIRST_VISIBLE_BAR));  

  ChartNavigate(0, CHART_BEGIN, 100);
  
  Print(ChartGetInteger(0, CHART_FIRST_VISIBLE_BAR));
}

ICMarkets-Demo EURCHF M1 (maxbars=5000)での結果です。

2017.10.18 21:16:00.800 ----------
2017.10.18 21:16:00.800 4899
2017.10.18 21:16:00.801 199930
2017.10.18 21:16:01.821 ----------
2017.10.18 21:16:01.821 199930
2017.10.18 21:16:01.821 4899
2017.10.18 21:16:02.836 ----------
2017.10.18 21:16:02.836 4899
2017.10.18 21:16:02.836 199930
2017.10.18 21:16:03.845 ----------
2017.10.18 21:16:03.845 199930
2017.10.18 21:16:03.855 4899
2017.10.18 21:16:04.864 ----------
2017.10.18 21:16:04.864 4899
2017.10.18 21:16:04.864 199930
2017.10.18 21:16:05.876 ----------
2017.10.18 21:16:05.876 4999
2017.10.18 21:16:05.886 199930

全く理解できないんです。同じ数字になるはずです。でも、結局チャートはずっとジャンプしているんです。

誰でも使えるのか?

 
Alexey Viktorov:

最後にもう一度、初期化シーケンスに慣れる ことを強くお勧めします。知識よりも論理的思考力が重要なようです。プログラミング言語はすべて心得ていても、初期化シーケンスについては 理解しておく必要があります。

静的変数は、グローバル変数の前に初期化することはできません。そして、それがすべてを物語っている。

申し訳ありませんが、あなたの無意味な挑発やそのような口調にはもう注意を払わないことにします。もう、ド素人と無意味な議論をして時間を浪費したことが申し訳ないです。まず、あなたは私の状況に全く関係のない定数について、今と同じように攻撃的な傲慢さで発表していました。今、あなたは、このテーマを知りもせず、プログラミング言語がどのように構成されているのかも理解せず、根拠のない発言をしています。論理的思考」「思い込み」「妄想」は、自分の中だけにとどめておきましょう。興味はない。

 
Kirill Belousov:

GetTickCount()で取得したシステム変数がオーバーフローした場合、どうなりますか?

端末からの標準的な反応はありますか?

この瞬間をプログラムで追跡し、リアクションを実装する必要性はあるのでしょうか?

リアクションを実装する必要はありません。

GetTickCountの戻り値をuint型の 変数に受け取れば、安全に差分を得ることができます。

uint prev_count=GetTickCount();
...
...
uint diff=GetTickCount()-prev_count;

オーバーフローがあっても、正しい差額を得ることができます。これらは符号なし整数を使った演算の特殊性である。しかし、それは前の値が全く同じ方法(GetTickCount)で取得され、前の値が49日前より前に取得された場合のみ有効です。

多寡を確認する場合は、単純な引き算以上の演算が必要になる

 
fxsaber:
ChartNavigateのバグ

ICMarkets-Demo EURCHF M1 (maxbars=5000)での結果です。

全く理解できないんです。同じ数字になるはずです。でも、結局チャートはずっとジャンプしているんです。

再生しているのでしょうか?

なぜバグなのか?

グラフのナビゲーションはすぐにはできない。非同期コマンドなんです。また、その実行結果は保証されません。

まるでPageUpボタンを押したかのように、チャートが静止しているのです。そして突然、ピクッと動いた。