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

 

チャートが「更新」されたところです。そして、それはまた同じです。

 
Yedelkin:

チャートが「更新」されたところです。そして、それはまた同じです。

servicedeskに緊急書き込み、端末を閉じない
 
AlexSTAL:
サービスデスクに緊急で書き込み、端末をオープンにしておくこと
よし、ぶっちゃけこのスレのリンクをコピーしておこう。
 

ターミナルで確認したところ、EURUSD M1チャートは指定した場所に隙間なく完全に存在しています。

チャートのコンテキストメニューから "Refresh "コマンドを実行してみてください。

 
Renat:

ターミナルで確認したところ、EURUSD M1チャートは指定した場所に隙間なく完全に存在しています。

チャートのコンテキストメニューから "Refresh "コマンドを実行してみてください。

手動でリフレッシュ、ありがとうございました。私は実質的にチャートを扱うことはないので、質問があるのですが、このような状況でExpert Advisorレベルでミニテーブルのベースを更新するにはどうすればよいのでしょうか。端末は持っているデータベースでしか動作しない。同期を確認する機能を組み込むべきでしょうか?
 
Renat:

ターミナルで確認したところ、EURUSD M1チャートは指定した場所に隙間なく完全に存在しています。

チャートのコンテキストメニューから "Refresh "コマンドを実行してみてください。


どこかに浮遊しているバグがあると思うのですが...。ほぼ同じ状況が続いているのは私だけではないので...。
 
Yedelkin:
手動で更新されました、ありがとうございます。私は実質的にチャートを扱うことはないので、質問があるのですが、このような場合、分足のベースはどのように更新するのでしょうか?端末が持っている基盤でしか動作しない。同期チェックの機能を組み込む必要がありますか?

通信が途絶えた時刻と再開した時刻をタイマーで記憶しました。

この情報があれば、その期間の履歴をダウンロードしてみることができます(意味があれば、サーバーとの同期を確認することもできます)。

 

開発者の皆さん、言葉を失います。他のオブジェクトから同じメソッドを内部で呼び出した後に、オブジェクトのメソッドでローカル変数が「ワイプ」してしまうという、捕らえにくい問題に直面したことがあります。オブジェクトのネストされた関数呼び出しの最適化に関係しているのかもしれませんが、少なくともログにエラーはなく、メモリリークもありません。大きなコードを引用することはできませんが、原理的には例を見れば意味はわかると思います。

バリアント1

bool operate(CAlgoBlockLogic* s1, CAlgoBlockLogic* s2) {
 bool d1 = s1.process();
 bool d2 = s2.process();
 return (d2 && d1);
}

バリアント2

bool operate(CAlgoBlockLogic* s1, CAlgoBlockLogic* s2) {
 return (s2.process() && s1.process());
}

理論的には、このコードはまったく 同じように 動作するはず です。でも...は、それぞれ異なる動作をします。

このようにバリエーション1が正常に動作しない。デバッグファイルのレコードを実行したところ、operate関数で定義された変数d1が、同じoperate関数の内部呼び出しで、同じ型の別のオブジェクトにある変数d1の値で上書き されることがわかりました。つまり、電話した後に
 bool d2 = s2.process();

変数d1は、s2.process内の内部オペレートコールで発生した値に変更 されます。この動作は、同じ型のオブジェクトのスタティック 変数の値を変更するときと同じです。しかし、ここでは、この変数は明らかにローカルスコープを持って います。

静的変数の問題は、このスレッドで提起され、すべてが明らかになりました。しかし、ローカル変数の値の不確実性をどうするか?

Документация по MQL5: Основы языка / Переменные / Область видимости и время жизни переменных
Документация по MQL5: Основы языка / Переменные / Область видимости и время жизни переменных
  • www.mql5.com
Основы языка / Переменные / Область видимости и время жизни переменных - Документация по MQL5
 

"...operate関数で定義された変数d1が、同じoperate関数の内部呼び出しで、同じ型の別のオブジェクトにある変数d1の値で上書きされる。す なわち、
呼び出した後bool d2 = s2.process();
変数 d1 は s2.process 内の内部オペレート呼び出しで発生した値に変更されます。"

通常の副作用を伴う隠れ再帰か、あるいは......。

 
Vigor:

理論的には、このコードはまったく 同じように 動作するはず です。でも...は、それぞれ異なる動作をします。


いいえ、同一ではありません。

最初のケースでは、s1.processとs2.processは無条件に呼び出されます。

2番目のバリエーションでは、s1.processはs2.processがtrueを返した場合にのみ呼び出されます。これを「短時間条件評価」といいます。

理由: