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

 
ANDREY:

皆さん、ごきげんよう。

mql4からmql5への移行を試みています。

Question: なぜmql5は、現在の価格とHay 変数の値の差ではなく、例えば2.99999999 - (minus) 05のような、私にとって未知の式を計算し表示 するのですか(mql4と 同様)?

mql5でこれらの値の差を正しく計算 させるにはどうしたらよいでしょうか?NormalizeDouble()を使って全ての値を正規化 しましたが、上記の値では

の値は変更されずに表示されます。どちらの値もドブルタイプであるため、これは不思議なことです

皆さん、ありがとうございました。


2.99999999 -(マイナス)05=2.9999999999 / 100000 = 0.000029999999.数学ではそうなっているんです。

-(マイナス)05は、10の5乗で割ること です。

 
IndependentMK:

また、こんにちは。
初心者の質問にご注意ください。
テスターではEAが注文を開けないので、コードの誤りを指摘する必要があるのですが...。
コンパイラではエラーも警告も表示されず、ジャーナルでも同じように、エラーは ありません...。

いずれかの条件が満たされていないため、開かない。

それは、

while(MA_Smoth_B > MA_Smoth_S)

またはこれ

if(MA_Simpl_B_Op < MA_Simpl_S_Op && MA_Simpl_B_Cl > MA_Simpl_S_Cl)

2つのフラッシュをコメントアウト//すると、どちらかわかります。そうすることでエラーを発見することができます。

 
Александр:

2.99999999 -(マイナス)05=2.9999999999 / 100000 = 0.000029999999数学ではそうなっているんです。

-(マイナス)05は、10の5乗で割ること です。

回答ありがとうございます。しかし、なぜプログラムは0.00007であるべき式の代わりに価格1.33671とヘイ1.33664の差を計算せず、代わりに式を出力するのでしょうか?

同時に、変数Hayを定数1.33664に 置き換えると ( SymbolInfoDouble(Symbol(),SYMBOL_BID) -1.33664)、プログラムはこれらの値の実際の差、つまり0.00007を計算する。実際、コード内のHay 変数は、前のティックの注文の始値値を取り、それは1.33664という 二重の値になって います。

よろしくお願いします。

 
ANDREY:

ご返答ありがとうございます。しかし、なぜプログラムは価格値1.33671とHay 1.33664の差を計算せず、0.00007となるべき式を出力してしまうのでしょうか?

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

DoubleToString()を使用します。これはMQL5についてではなく、ログに実測値が誤って出力されることについてです。これは、MQL4でも同様に言えることです。

Документация по MQL5: Преобразование данных / DoubleToString
Документация по MQL5: Преобразование данных / DoubleToString
  • www.mql5.com
[in]  Формат точности. Если значение digits лежит в диапазоне от 0 до 16, то будет получено строковое представление числа с указанным количество знаков после запятой. Если значение digits лежит в диапазоне от -1 до -16, то...
 
Artyom Trishkin:

DoubleToString()を使用します。また、MQL5がどうこうではなく、ログに実数値を誤って出力していることが問題です。これは、MQL4でも同様に言えることです。

了解です。ありがとうございます。このような問題に直面したのは初めてです。今ならわかる。

私のコードとの関係で、precision format の意味がよくわかりません。小数点以下の桁数だと思われます。
しかし、MT4では、全く同じコード(OrderSendを除く)で、私の記憶が正しければ、Print関数は常に2つの価格値の差の実値、すなわち、0から小数点5桁の1未満の数値(0.00000)を出力しています。

 
ANDREY:

了解です。ありがとうございます。今まで出会ったことがない。今ならわかる。

正確なフォーマットが私のコードとの関係でどのような意味を持つのか、まだよく分かっていないのです。小数点以下の桁数だと思われます。
しかし、MT4では、全く同じコード(OrderSendを除く)で、私の記憶が正しければ、Print関数は常に2つの価格値の差の実値、すなわち、0から小数点以下5桁の1未満の数値(0.00000)を出力しています。

実データの値が随所に印刷されている。実数の表現形式が違うだけです。端末が出力形式を指定しない場合、どの形式が便利かを判断する。当然ながら、これは数字の表現形式をすべて知っていることが前提である。

全てはヘルプの中にある。

 
Artyom Trishkin:

実データ値が随所に表示されます。実数を表現するためのフォーマットが違うだけ です。端末が出力形式を指定しない場合、どの形式がより便利かを判断する。当然ながら、これはすべての数値フォーマットを知っていることが前提である。

全てはヘルプに書いてあります。

MT4とMT5では、実数の表現形式が異なるのですね。
この質問に対処するために、mql5ヘルプの何を読めばいいのでしょうか?

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

 
Michail_David:
専門家の皆さん、こんにちは。インジケーターの修正に協力してほしい。指標の本質は以下の通りです。直前のバーに対する価格上昇の大きさを計算する。ゼロにはスターバーが必要です。つまり、始値は終値と同じです。コンパイル時はエラーなし、テスト時は80 20文字の行でエラーになります。また、信号線の 描画にも誤りがあります。しかし、これがメインバッファの計算を誤らせる原因になっていると思うのです。修正できるよう、よろしくお願いします。

なるほど。この辺りでは、一部の人しか助けを得られないようですね。

 
Michail_David:

なるほど。この辺りでは、一部の人しか助けを得られないようですね。

これを試してみてください。

//--- typical price and its moving average
   for(i=0; i<rates_total-1; i++)
     {
      ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2);
 
Vitaly Muzichenko:

これを試してみてください。

Vitalyさん、ありがとうございます。しかし、ExtTempBuffer[i] =NormalizeDouble((close[i]-open[i])/Point(),2); on element [i} の行でエラーが発生します。