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

 
TheXpert:

タ・マァー...

転送前のロングからダブルを入れる必要があります。グローバル 変数の場合。対数ビットなので、1.34*e-307にも4.29*e+120にもなり、ゼロではない、ただのランダムダブルです。

ダブからロングに解凍して転送後。

それだけです。

OK、あなたはそれを得た;)

 
artmedia70:

OK、あなたはそれを得た;)

まあ......何が不明瞭なのか理解できないんですけどね。

doubleはデータを切り捨てるので、longからdoubleに直接転送することはできません。しかし、どちらも8バイトずつなので、例でやったようにdoubleをコンテナとして使うだけでロスレス転送が可能です。

 
TheXpert:

まあ何が不明なのか理解できないだけなんですけどね。

doubleはデータを切り捨てるので、longからdoubleに直接転送することはできません。しかし、どちらも8バイトずつなので、例でやったようにdoubleをコンテナとして使うだけでロスレス転送が可能です。

Andreyさん、端末のGVに保存して表示する形式がよくわかりませんでした。グラフIDが表示されていたようですが、0と表示されています。
 
artmedia70:
Andreyさん、端末のGVでの保存と表示の形式が分かりませんでした。グラフIDが表示されていたようですが、0と表示されています。

GVでは見た目はゴミのようなものが表示されますが、この「ゴミ」は逆変換後にチャートIDになります。

デュブルは独自のデータフォーマットを持っていて、ロングをタックするときはデュブルフォーマットをつけて、ちょうど8バイトのメモリとして使っています。

 
TheXpert:

GVは見た目はゴミのようなものが表示されますが、この「ゴミ」は逆変換後にグラフIDになります。

デュブルは独自のデータフォーマットを持っており、デュブルをタックする際にはデュブルフォーマットを付けて、単純に8バイトのメモリとして使用します。

はい、もうわかりました、ありがとうございます。
 
私が気づいたことは、他のスクリプト(インジケーター)に差し込まれたライブラリやリソースを更新すると、それ(インジケーター)が再コンパイルされ、ターミナルが再読み込みされることです。需要なし!バグなのか機能なのか?P.S. MT4についてです。
 
artmedia70:

どちらかというと、質問です。

名前から端末の既存のGVを探す。これを通じて、EAが動作しているチャートのIDがインジケータに渡されます。インジケータは別の記号にぶら下がっている。つまり、Expert Advisorが動作しているチャートのIDをインジケータに渡したいのです。こんな風に探しています。

これは、端末が教えてくれる。


変数を読み取ろうとした。文字列に直接入れたり、ジャーナルに入れたり、違う種類の変数に入れたり......全部同じです。違いは2つあります。

何がいけないんですか?

https://www.mql5.com/ru/docs/basis/types/casting「単純構造体のデータ変換」段落はこちら。

まさにあなたのケースですね。ダブレットはロングに比べ、文字数の精度が非常に低くなります。だから、単純な割り当てでこのような結果になるのです。

しかし、グローバル変数の64ビットをフルに使って、64ビット長のどんな情報も格納できます(8バイト長の短い文字列のようなもの。 長さは言うまでもありません)。

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
次のような問題が発生しました。ターミナルを再起動した後、EAから呼び出されたインジケータが別のタイムフレームの「奇妙な」値を返します。
Expert AdvisorはM2、インジケーターデータはM3から取得します。
1) 14:40に端末の再起動があります。
PE 0 14:39:50.524 端末
MD 0 14:40:06.009 Terminal MetaTrader 5 Alfa-Forex x64 build 930 を起動しました。
II 0 14:40:06.586 Terminal OpenCL が見つかりません、パフォーマンスを上げるために最新の OpenCL ドライバをインストールしてください。
JO 0 14:40:07.257 専門家 専門家 FX_Money_Flow_v1_06 (EURUSD,M2) 正常にロードされました。
Expert Advisorは、最後のバーと最後から2番目のバーでインジケータの値を書き出します。
OF 0 14:40:11.540 FX_Money_Flow_v1_06 (EURUSD,M2) 指標TF1の値: -1.#QNAN -1.#QNAN
は、次のバーですでにデータが正しくなっています。
NJ 0 14:41:46.622 FX_Money_Flow_v1_07 (EURUSD,M2) 指標TF1の値: -0.02798411604597126 -0.04893498839583753
2)19:55に2回目のリスタート。
CO 0 19:55:06.918 端末
RO 0 19:55:28.399 Terminal MetaTrader 5 Alfa-Forex x64 build 930 を起動しました。
OP 0 19:55:28.992 Terminal OpenCL が見つかりません、最新の OpenCL ドライバをインストールしてください。
RD 0 19:55:29.507 専門家 専門家 FX_Money_Flow_v1_07 (EURUSD,M2) ロードに成功しました。
またしても同じ曲。
PQ 0 19:55:38.168 FX_Money_Flow_v1_07 (EURUSD,M2) 指標値 TF1: -1.#QNAN -1.#QNAN

しかし、常に正常に動作するわけではありません。

KF 0 23:59:51.987 FX_Money_Flow_v1_07 (EURUSD,M2) ファクター値 TF1指標: -1.#QNAN -1.#QNAN


この時、M3チャートは開いていて、そこには全てを正しく表示するインジケーターがあります。
(端末とログの時差は5時間、スクリーンショットは2回目の再起動のものです。)
ファイル:
 
OBJ_LABELは、MT4ではUNICODEに対応していないようですが?プログラム上とラベルのプロパティダイアログの両方で値を変更しました。ダイアログ上では記号が挿入され正しく表示されていますが、チャート上では疑問符(?)として表示されます。フォントはunicodeで、ラベルのプロパティのダイアログで、フォントを含むドロップダウンリストで正しく選択されています。
 
stringo:

https://www.mql5.com/ru/docs/basis/types/casting「単純構造型のデータ変換」段落はこちら。

これはまさにあなたのケースですね。ダブレットはロングに比べ、文字数の精度が非常に低くなります。だから、単純な割り当てでこのような結果になるのです。

しかし、グローバル変数の64ビットをフルに使って、64ビット長の情報(8バイト長の短い文字列など。 長さは言うに及ばず)を格納することができます。

はい、読ませていただきました、ありがとうございます。