MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 561

 
Ihor Herasko:

シンプルに。

エラーになる

 
Aleksandr Lishchenko:

エラーメッセージ

どこにエラーがあるのか?どのようなエラーですか?

 

こんにちは。ユーザーから指定された入力 取引量パラメータが 正しいかどうか、つまり指定されたロットがロット変更ステップの倍数であるかどうかをチェック するタスクがあります。そのためには、割り算の実余りを求め、それをゼロまたはゼロに非常に近い値(例えば、0.000000001)と比較します。

void OnStart()
{
   double volume = 0.03;
   Alert("Результат деления ", volume/MarketInfo(Symbol(), MODE_LOTSTEP));
   Alert("Шаг изменения лота ", MarketInfo(Symbol(), MODE_LOTSTEP));
   Alert("Вешественный остаток ", fmod(volume, MarketInfo(Symbol(), MODE_LOTSTEP)));
}

結果

/*
   Вещественный остаток 0,009999999999999998
   Шаг изменения лота 0,01
   Результат деления 3,0
*/

また、スクリーンショットを添付します。

余りは0かごく小さな数字になるはずなのですが、結果はなぜかほぼ0.01に?では、例えばユーザーが間違って0.001を設定してしまった場合、どのように入力パラメータを確認すればよいのでしょうか。

ファイル:
4npm6qh.png  8 kb
 
Aleksandr Teleguz:

こんにちは。ユーザーから指定された入力 取引量パラメータが 正しいかどうか、つまり指定されたロットがロット変更ステップの倍数であるかどうかをチェック するタスクがあります。そのためには、割り算の実余りを求め、それをゼロまたはゼロに非常に近い値(例えば、0.000000001)と比較します。

結果

また、スクリーンショットを添付します。

余りは0かごく小さな数字になるはずなのですが、結果はなぜかほぼ0.01に?では、例えばユーザーが間違って0.001を設定してしまった場合、どのように入力パラメータを確認すればよいのでしょうか。

ちょっと間違っていますね。まず、(設定値から)最も近い正しい値を計算し、得られた値の差を確認します。それがゼロに等しい(またはDBL_EPSILONより大きくない)場合、すべてがOKです。

void OnStart()
{
   double volume = 0.03;

   double fVolumeMin = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MIN);   
   double fVolumeMax = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MAX);   
   double fVolumeStep = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_STEP); 

   double fNearestCorrectVolume = VolumeCast(volume, fVolumeMin, fVolumeMax, fVolumeStep);
   if (fabs(fNearestCorrectVolume - volume) > DBL_EPSILON)
      Alert("Ошибка");
   else
      Alert("Все ОК");
}

VolumeCastの機能は、ここから 取り出せます。

 
Ihor Herasko:

どこが悪いのか?どのようなエラーが出るのでしょうか?

1 エラー(s), 0 警告(s) 2 1
'if' - 式は、グローバルでは使用できません。

 

こんにちは!!!

みんな、EAを1つのアカウントにリンクする方法のコードを教えてください(最新のMT4アップデートのため)。

ありがとうございました。

 
Aleksandr Lishchenko:

アフタヌーン!!!

みんな、EAを1つのアカウントにリンクする方法のコードを教えてください(最新のMT4アップデートのため)。

ありがとうございました。

コードはすでにお渡ししています。

エラーの説明には、OnTick()やOnInit()の内部ではなく、グローバル変数の 領域にコードを入力したことが書かれています。

'if' - expressions are not allowed on a global scope

そのような知識がありながら、まだ自分のコードを誰かから守ろうとしているのですか?
 
Artyom Trishkin:

コードはすでにお伝えしています。

OnTick()やOnInit()の内部ではなく、グローバル 変数の領域にコードを入力したことが、エラーの説明で書かれています。

'if' - expressions are not allowed on a global scope

その知識を持ってしてもなお、自分のコードを誰かから守ろうとするのですか?

勉強中なんです!

判断しないでください;)

 
Aleksandr Lishchenko:

1 エラー(s), 0 警告(s) 2 1
'if' - 式は、グローバルでは使用できません。

コードをどのように適用したかを教えてください。私が書いたものをそのままコピーしたのですか?

 
Ihor Herasko:

コードをどのように適用したかを教えてください。私が書いたものをそのままコピーしたのですか?

しました :)))