int fun(double ch)
{
int i = 0;
double res = 0, ostatok = fmod(ch, 1);
while(ostatok != 0 && i < 16) // число взято от фонаря для прерывания зацикленности
{
res = ostatok * 10;
ostatok = NormalizeDouble(fmod(res, 1), 8); // Вроде 8 максимально
i++;
}
return(i);
}/*******************************************************************/
どこに答えがあるのか理解できない。これは本心です。"エキスパートアドバイザーのストップフラグの状態を0.1秒ごとにチェックする機能を統合"?その場合、どうすればこのフラグを外すことができるのでしょうか?
いや、最後まで読んでいただければ、その答えがわかると思うのですが...。
備考
Sleep()関数はカスタム・インジケータから呼び出すことはできません。なぜなら、インジケータはインタフェース・スレッドで実行され、その速度を低下させてはならないからです。この機能には、エキスパートの停止フラグの状態を0.1秒ごとに確認する機能が組み込まれています。ストラテジーテスターの Sleep()関数では、遅延は 発生しません。
まずはこれをインジケーターの先端に貼り付けます。画面にマークが表示されたら、そこに自分の欲しいものをどう入れるかを考えます。 ここではアドバイスはもらえますが、自分で入れる必要があるのです。
int Number=25。
if(H==H1&&H1==H2)
{if(J == true) {ObjectCreate(Patternext[shift],
OBJ_TEXT, 0, Time[shift1], High[shift1] + Range*5);
ObjectSetText(PatternText[shift], "pattern", 10, "Arial", Red)。
downArrow[shift1] = High[shift1] + Range*0.5;}if(setalert == 0 && Alert == true) {pattern = "pattern";setalert = 1;}} 。
if(ObjectFind(0, "Text")<0) // 出力ラベルをチェックする。
{
ObjectCreate("Text",OBJ_LABEL, 0, 0, 0); // 作成します。
ObjectSet("Text", OBJPROP_CORNER, 1); // 右上隅にある。
ObjectSet("Text", OBJPROP_XDISTANCE, 10); //X
ObjectSet("Text", OBJPROP_YDISTANCE, 10); //Y
}
ObjectSetText("Text", string(number), 14, "Arial",Black); // ラベルに出力する。
}
return(0)です。
}
この問題は、もっとシンプルな方法で解決されます。
StringLen("tickEURUSD")。
確かにあった方が楽なんですけどね...。その時に行方不明になったのか、迷子になってしまったのか...。私の好きなTurboPascalには確実に欠けています。昔は対数の掛け算をやってました。
アップデートされたmql4に切り替えてからしばらくの間、ドキュメントにバグがありました。MathLog10を クリックすると、MathLogのヘルプが表示されます。
servicedeskにそのことを書きましたが、半分を修正し、残りの半分を残しています...
log(10)は本当に1ではないのですが、mqlに10進数の対数がないことに驚きました...。
https://docs.mql4.com/ru/math/mathlog10 文中に間違いがありますが、それでは何でしょう?
問題はもっと簡単です。
前回の記事からすぐにお答えします。
対数って何だろう......あのコードでは何のためにあるのかわからなかったけど、あなたとあの同志のやり取りで、小数点以下の数字を表すものだと理解しましたよ?
他に方法はなかったのでしょうか?なぜコード(int)で必要なのですか?なぜ、あなたの方法が私の提供したラインより優れているのでしょうか?)
どうもありがとうございます)
最後のメッセージからすぐにお答えします。
対数とは何か、あのコードではなぜかわからなかったのですが、あなたとあの同志のやり取りで、小数点以下の桁数を決めるためのものだと理解しましたね。
他に方法はないのでしょうか?なぜコード(int)で必要なのですか?なぜ、あなたの方法が私の提供したラインより優れているのでしょうか?)
どうもありがとうございます)
はい、小数点 以下の桁数を決定するためです。これは、ロットが何らかの計算式で定義され、その結果が許容されるより多くの小数点以下を持つ可能性がある場合に、ロット値を正規化するために必要である。場合によってはデュースを入れるだけで、エラーが発生することもあるので、プログラムで定義した方が良い。
もうひとつの方法があります。この問題を解くには、数値を文字列に変換して文字列の長さを定義し、ドット文字のインデックスを求め、文字列の長さとドット文字のインデックスの差を数値の小数部として評価する方法と、文字列の長さとドット文字のインデックスの差を数値の小数部として評価する方法とがある。また、mql5のフォーラムでは、いくつかのバリエーションが紹介されており、より薄いもの、より簡単なものがあります。
ここで、もうひとつバリエーションをご紹介しましょう。
この関数は、任意の数値の小数点以下の桁数を定義する。
アルゴリズムはとんでもなく単純で、1による除算の残りが何回0より大きくなるかを考える必要があります。
私のやり方が良いとは言っていない。プログラマーはそれぞれ、問題解決のための方法を考えて書いている。
double 型の数値は,たとえ小数部に有効数字がなくても,例えば 2.0 のような形になり,これは全く正しくないので,通常の整数を得るために暗黙のうちに int 型に変換される.
備考
Sleep()関数はカスタム・インジケータから呼び出すことはできません。なぜなら、インジケータはインターフェース・スレッドで実行され、その速度を低下させてはならないからです。この機能には、エキスパートの停止フラグの状態を0.1秒ごとに確認する機能が組み込まれています。ストラテジーテスターの Sleep()関数では、遅延は 発生しません。
みんな頭が良くて、見ていて怖いくらいです。Strategy Testerでスリップが無視されたと書きましたが(これは明らかです)、指定した通り全てのポジションがオープンになっています。しかし、デモのスリップでは動作しませんし、位置は1つだけ開かれ、それはすぐに閉じます。これが、私が解決できない問題なのです。