エラー、バグ、質問 - ページ 1782 1...177517761777177817791780178117821783178417851786178717881789...3185 新しいコメント A100 2017.02.05 20:57 #17811 -Aleks-:どれが効果的か?有効数字をなくし、ランダムな数字で埋めるルールが有効結果は長いですが、doubleの中間計算で、そこで有効桁が失われます(Digits+1)*3-1=17となります。 Aleksey Vyazmikin 2017.02.05 21:42 #17812 A100:有効数字をなくしてランダムで埋めるルールで動作結果は長いですが、doubleの中間計算で、そこで有効桁が失われます(Digits+1)*3-1=17となります。情報をありがとうございました。しかし、情報が把握しにくい。つまり、数値はそうなっても、それで計算ができないのか?以下は、文字列から数値に変換されるコードの例です。long CalcY=StringToDouble("111111111111111111");Print ("CalcY=",CalcY);111111111111111104を表示します。I.e.ここに計算はないのか、それとも私が間違っているのか?この数字を扱うことは可能なのか、それとも言語の制限なのか? A100 2017.02.05 21:55 #17813 -Aleks-:つまり、ここには計算がないのですが、私の勘違いでしょうか? 計算とは、あらゆる操作( この場合は変換)のことです。 指定された数値に対して、StringToDoubleは精度を落として doubleを返すStringToInteger は long を返しますが、NormalizeDouble や MathPow など、double を扱う他の関数は精度を落とさずに計算を行うことができません。 Aleksey Vyazmikin 2017.02.05 22:04 #17814 A100: 計算 - あらゆる操作( この場合、変換)。 StringToDoubleはdoubleを返す -精度の損失が あるStringToInteger は long を返しますが、NormalizeDouble や MathPow など、double を扱う他の関数は精度を落とさずに計算を 行うことができません。 StringToIntegerは 数字を表現するのに有効でしたが、その後が悪く、数学的な演算のために数字を構成要素に分解しなければならないのでしょう......。long CalcZ=StringToInteger("111111111111111111");Print ("CalcZ=",CalcZ);double Test=CalcZ;Print ("Test=",Test);Test=1.111111111111111e+17 Aleksey Vyazmikin 2017.02.05 22:09 #17815 ここでもヘルプデスクに書かれています INT_MAXint型で表現可能な最大値2147483647では、StringToIntegerは どのように変換を行い、許容値より大きな数値の場合はlongに格納したのでしょうか? A100 2017.02.05 22:15 #17816 -Aleks-:では、StringToIntegerでは、許容値より大きい数値 の場合、どのようにlongに変換して保存していたのでしょうか。StringToIntegerはもともとLONG_MINLONG_MAXの 範囲でlongを返す(StringToColobokと呼ぶこともできる) Aleksey Vyazmikin 2017.02.05 22:19 #17817 A100: StringToIntegerはもともとlongを返す(StringToBoobと呼ばれていたかもしれない)。確かにその通りなのですが、Helpファイルがとても巧妙なのです。" int関数は、数値の文字表現を含む文字列を int(整数)値に変換します。"それが、私を惑わせた。情報提供ありがとうございました。上記の数値表現は、グラフィカルバッファに収まらないということですね? A100 2017.02.05 22:25 #17818 -Aleks-:上記の数値は、グラフィカルバッファに収まらないということですね?B'111111111111111111111111と表記される。 Renat Fatkhullin 2017.02.05 22:40 #17819 A100:タイムフレームがM5からM15に変更されたとき、M5 Deinitコマンドは最初のインディケータに(そしてそれだけに-この場合はM5に)送られず、ユーザーがEAを削除するまでチャートからアンロードされないと主張します(そしてチェックするよう提案します)。 グローリーは正しく、アンローディングは正しく動作します。 MT5では、インディケータ計算コアは、それ自身のマネージャに使用量カウンタを持つ共有リソースであることに注意してください。 異なるプログラムまたはウィンドウが同じパラメータでインディケータを使用する場合、使用量カウンタを持つ1つの計算コピーが実際に機能します。これは、トレーダーがチャートとExpert Advisorで同じ指標を使用する場合、多くのお金を節約することができます。 インジケーターマネージャーは、インジケーターを物理的に非同期かつ遅延させて削除するように設計されています。そしてその間に、新しいパラメータで新しい作業コピーが作成され、古いコピーが物理的に削除される前に初期化されることが多い。 A100 2017.02.05 22:58 #17820 Renat Fatkhullin: インジケーターマネージャーは、インジケーターを物理的に非同期かつ遅延させて削除するように設計されています。そして、その間に新しい作業コピーが新しいパラメータで作成され、古いコピーが物理的に削除される前に初期化されることが多い。インジケータを簡略化しよう//Test_i.mq5 //Индикаторvoid Prn( string f, int i = -1 ) { Print( f, "->", StringSubstr( EnumToString( Period()), 7 ), (i == -1 ? "" : ":" + i )); }void OnInit() { Prn( __FUNCTION__ ); }void OnDeinit( const int reason ) { Prn( __FUNCTION__, reason ); }int OnCalculate( const int, const int, const int, const double& [] ) { return 0; }Test.mq5をM5チャートに貼り付けて、チャートの期間を M5->M15に変更してみましょう。結果2017.02.06 00:54:20.897 OnInit->M5 2017.02.06 00:54:25.553 OnInit->M15質問:OnDeinit->M5はいつ呼び出されるのですか?私の答えは、「絶対にしない」です。上記の回答:非同期かつ遅延あり ファイル: Test.mq5 1 kb Errors, bugs, questions New MetaTrader 4 Platform Questions from Beginners MQL5 1...177517761777177817791780178117821783178417851786178717881789...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
どれが効果的か?
有効数字をなくし、ランダムな数字で埋めるルールが有効
結果は長いですが、doubleの中間計算で、そこで有効桁が失われます
(Digits+1)*3-1=17となります。
有効数字をなくしてランダムで埋めるルールで動作
結果は長いですが、doubleの中間計算で、そこで有効桁が失われます
(Digits+1)*3-1=17となります。
情報をありがとうございました。
しかし、情報が把握しにくい。つまり、数値はそうなっても、それで計算ができないのか?
以下は、文字列から数値に変換されるコードの例です。
Print ("CalcY=",CalcY);
111111111111111104を表示します。
I.e.ここに計算はないのか、それとも私が間違っているのか?
この数字を扱うことは可能なのか、それとも言語の制限なのか?
つまり、ここには計算がないのですが、私の勘違いでしょうか?
計算とは、あらゆる操作( この場合は変換)のことです。 指定された数値に対して、StringToDoubleは精度を落として doubleを返す
StringToInteger は long を返しますが、NormalizeDouble や MathPow など、double を扱う他の関数は精度を落とさずに計算を行うことができません。
計算 - あらゆる操作( この場合、変換)。 StringToDoubleはdoubleを返す -精度の損失が ある
StringToInteger は long を返しますが、NormalizeDouble や MathPow など、double を扱う他の関数は精度を落とさずに計算を 行うことができません。
StringToIntegerは 数字を表現するのに有効でしたが、その後が悪く、数学的な演算のために数字を構成要素に分解しなければならないのでしょう......。
Print ("CalcZ=",CalcZ);
double Test=CalcZ;
Print ("Test=",Test);
Test=1.111111111111111e+17
ここでもヘルプデスクに書かれています
INT_MAX
int型で表現可能な最大値
2147483647
では、StringToIntegerは どのように変換を行い、許容値より大きな数値の場合はlongに格納したのでしょうか?
では、StringToIntegerでは、許容値より大きい数値 の場合、どのようにlongに変換して保存していたのでしょうか。
StringToIntegerはもともとLONG_MINLONG_MAXの 範囲でlongを返す(StringToColobokと呼ぶこともできる)
StringToIntegerはもともとlongを返す(StringToBoobと呼ばれていたかもしれない)。
確かにその通りなのですが、Helpファイルがとても巧妙なのです。
"
int関数は、数値の文字表現を含む文字列を int(整数)値に変換します。
"
それが、私を惑わせた。
情報提供ありがとうございました。
上記の数値表現は、グラフィカルバッファに収まらないということですね?
上記の数値は、グラフィカルバッファに収まらないということですね?
B'111111111111111111111111と表記される。
タイムフレームがM5からM15に変更されたとき、M5 Deinitコマンドは最初のインディケータに(そしてそれだけに-この場合はM5に)送られず、ユーザーがEAを削除するまでチャートからアンロードされないと主張します(そしてチェックするよう提案します)。
MT5では、インディケータ計算コアは、それ自身のマネージャに使用量カウンタを持つ共有リソースであることに注意してください。 異なるプログラムまたはウィンドウが同じパラメータでインディケータを使用する場合、使用量カウンタを持つ1つの計算コピーが実際に機能します。これは、トレーダーがチャートとExpert Advisorで同じ指標を使用する場合、多くのお金を節約することができます。
インジケーターマネージャーは、インジケーターを物理的に非同期かつ遅延させて削除するように設計されています。そしてその間に、新しいパラメータで新しい作業コピーが作成され、古いコピーが物理的に削除される前に初期化されることが多い。
インジケーターマネージャーは、インジケーターを物理的に非同期かつ遅延させて削除するように設計されています。そして、その間に新しい作業コピーが新しいパラメータで作成され、古いコピーが物理的に削除される前に初期化されることが多い。
インジケータを簡略化しよう
void Prn( string f, int i = -1 ) { Print( f, "->", StringSubstr( EnumToString( Period()), 7 ), (i == -1 ? "" : ":" + i )); }
void OnInit() { Prn( __FUNCTION__ ); }
void OnDeinit( const int reason ) { Prn( __FUNCTION__, reason ); }
int OnCalculate( const int, const int, const int, const double& [] ) { return 0; }
Test.mq5をM5チャートに貼り付けて、チャートの期間を M5->M15に変更してみましょう。
結果
2017.02.06 00:54:20.897 OnInit->M5
2017.02.06 00:54:25.553 OnInit->M15
質問:OnDeinit->M5はいつ呼び出されるのですか?
私の答えは、「絶対にしない」です。
上記の回答:非同期かつ遅延あり