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

 

こんにちは。

よろしくお願いします。単純な配列の動作確認(値の代入)を行う場合。

a[0][2]=91.49999999993754;

Print("a[0][2]=",a[0][2]);

H= 1/(1+exp(-a[0][2])) となる。

a[0][2]=Hとする。

Print(" 1/(1+exp(-a[0][2]))=",1/(1+exp(-a[0][2])), " H=",H," a[0][2]=",a[0][2]) とする。


結果を得ることができる。

2019.09.21 13:21:44.328 2011.01.03 14:54:20 W EURUSD,H4: a[0][2]=91.4999999999993754

2019.09.21 13:21:44.328 2011.01.03 14:54:18 W EURUSD,H4: 1/(1+exp(-a[0][2]))=0.7310585786300049 H=1.0 a[0][2]=1.0

どうしてですか?

 
im-zvv:

こんにちは。

よろしくお願いします。単純な配列の動作確認(値の代入)を行う場合。

a[0][2]=91.49999999993754;

Print("a[0][2]=",a[0][2]);

H= 1/(1+exp(-a[0][2])) となる。

a[0][2]=Hとする。

Print(" 1/(1+exp(-a[0][2]))=",1/(1+exp(-a[0][2])), " H=",H," a[0][2]=",a[0][2]) とする。


結果を得ることができる。

2019.09.21 13:21:44.328 2011.01.03 14:54:20 W EURUSD,H4: a[0][2]=91.4999999999993754

2019.09.21 13:21:44.328 2011.01.03 14:54:18 W EURUSD,H4: 1/(1+exp(-a[0][2]))=0.7310585786300049 H=1.0 a[0][2]=1.0

どうしてですか?

これは再現が難しい例ですが、型変換をして いるため、期待とは異なる結果が得られるのではないでしょうか。

このコードで実験してみてください。

void OnStart()
{
   double a;
   int b = 2;
   a = b / 5;     //    a = 0.0
   Print("a = ",a);  
}

を、これで。

void OnStart()
{
   double a;
   int b = 2;
   a = b /(double) 5;     //    a = 0.4
   Print("a = ",a);  
}

и

void OnStart()
{
   double a;
   int b = 2;
   a = b / 5.0;     //  a = 0.4
   Print("a = ",a);  
}

をフォーラムで検索してください。要するに、C変換は最初ちょっと混乱します ;)

 

int型 変数を使った例がたくさん紹介されていますね。

私の変数はすべてダブルです。

だから、変数を同じ形式に変換してもうまくいかない。

 
im-zvv:

int型 変数を使った例がたくさん紹介されていますね。

私の変数はすべてダブルです。

だから、同じフォーマットへの変数変換はうまくいかない。

a[0][2]=91.49999999993754;

Print("a[0][2]=",a[0][2]);

H=1/(1+exp(-a[0][2])) となる。

a[0][2]=Hとする。

Print(" 1/(1+exp(-a[0][2]))=",1/(1+exp(-a[0][2])), " H=",H," a[0][2]=",a[0][2]) とする。


結果を得ることができる。

2019.09.21 13:21:44.328 2011.01.03 14:54:20 W EURUSD,H4: a[0][2]=91.4999999999993754

2019.09.21 13:21:44.328 2011.01.03 14:54:18 W EURUSD,H4: 1/(1+exp(-a[0][2]))=0.7310585786300049 H=1.0 a[0][2]=1.0

どうしてですか?

あなたは整数定数を持って いるだけでなく、例自体は再現性がありません - 変数型を持たない、よく一般的に - 私の "例の山 "は、PCなしで計算することができ、あなたの例...e^(-91.49999)は何なのか教えてください。

わかった 忘れてくれ 助けられんよ

 

助けられない」のは残念だが...。

問題は、e^(-91.49999)がいくらかではなく、e^(-91.49999)がいくらかです。問題は、double= H, という型の変数がなぜ間違って書かれているのか、ということです。

は、先ほど計算された double 型の数値 =0.7310585786300049 ですが、1.0 と書かれています(ちなみに double 型)。

テスターで私のコードを使ってみると、あなたのMT4も同じように表示されると思います。

もしそうなら、単純にMQL4を仕事で使うことはできないし、危険です

 
im-zvv:

残念・・・「どうしようもない」・・・。

手伝った、手伝うって言ってもやってくれないとどうせ読まないし、結果も気になるしね〜。

im-zvv

もしそうなら、MQL4は単純に仕事には使えないし、危険です

MQL4 / MQL5の数式計算の動作は、C++と同じです。 C++のフォーラムで質問していただければ、アセットが助けてくれるかもしれません。

あなたの質問は、ヘルプ/説明/教えるから、MTプラットフォームの議論に移動しました、それが好きではない、あなたはそれを無料で受け取ったのですか?

...古代、物理的なプロセスを理解していなかったために、人々はパニックに陥り、雷や地震を恐れていた。最初はパニックと憶測を引き起こし、やがて宗教が生まれた ))))

 

そんなに怒らなくてもいいのに。

もし、あなたの個人的な感情を傷つけてしまったのなら、心からお詫びします。

MT4の議論や判断は全くしていません。私は単にあなたが実行することを提案しました。

MT4のテスターでお送りしたコードを実行して、もしすべての変数(H、a[0][2])を実行するように申し入れただけです。

がdoubleで定義されていて、結果は私と同じなのですが、疑問があります。

何が問題なのか?あなた宛のものです。

改めて : すみません...「助けられない」...。

さようなら。

 
im-zvv:

すべての変数(H,a[0][2])が

はダブルで定義されます。

もう一度言いますが、数式に定数は入っていますか?- 私の例でも、定数5 ...そして、整数の定数5を明示的にdouble型に持ってきました。


あなたの質問は、私はあなたの質問が何であるか表示されない場合がありますが、フォーラムで定期的に繰り返されている - あなたは "重い式 "と明らかではない変数を持っている - 例から不要な削除 - 配列と指数 - あなたはすべての不要な削除した場合、あなたはおそらくあなたが期待したものではない得た場所を見つけるだろうが、問題は何かわかります - 私は通常行う;)。


HH:とマイナス91.49乗に指数 - 非常に小さな数字ではありませんか? タイプダブルは、偉大な精度を持っていますが、百乗とアカウントにマイナス記号を取る - 私の意見では、この式は、精度が失われます、私はGoogleにしたくないが、最初のものは、 私はこのWikiを介してスクロール します。

 

お待たせしました。

これを試してみた。

A=91.49999999993754;//a[0][2]=91.49999999993754;

Print("A=",A)。

H= 1/(1+exp(-A))とする。

//A=H;

Print("1/(1+exp(-A))=",1/(1+exp(-A)), " H=",H," a[0][2]=", a[0][2]).

結果

2019.09.21 16:14:17.691 2011.01.04 22:29:51 w eurusd,h4: a=91.4999999999993754

2019.09.21 16:14:17.690 2011.01.04 22:29:50 w EURUSD,H4: 1/(1+exp(-A))=1.0 H=1.0 a[0][2]=0.0

!!!!!これは、1/(1+exp(-91.499999993754))=1.0を表していますが、A=Hのコードのままだと、Printコマンドで計算が続いてしまうので、(

なぜ1/(1+exp(-91.499999993754))=1.0なのか、その理由を探ってみることにします。

ご理解をお願いします。今はニューラルネットワークのチューニングとトレーニングに追われています。 コード自体が粗いので、私自身でも混乱しています... :)

ネットワークがエラーを繰り返していることに気がついた。そして、主な間違いはシグモイドの計算です。にはならないはずです。


 
im-zvv:

お待たせしました。

これを試してみた。

A=91.49999999993754;//a[0][2]=91.49999999993754;

Print("A=",A)。

H= 1/(1+exp(-A))とする。

//A=H;

Print("1/(1+exp(-A))=",1/(1+exp(-A)), " H=",H," a[0][2]=", a[0][2]).

結果

2019.09.21 16:14:17.691 2011.01.04 22:29:51 w eurusd,h4: a=91.4999999999993754

2019.09.21 16:14:17.690 2011.01.04 22:29:50 w EURUSD,H4: 1/(1+exp(-A))=1.0 H=1.0 a[0][2]=0.0

!!!!!これは、1/(1+exp(-91.499999993754))=1.0を表していますが、A=Hのコードのままだと、Printコマンドで計算が続いてしまいます(

なぜ1/(1+exp(-91.499999993754))=1.0なのか、その理由を探ってみることにします。

ご理解をお願いします。今はニューラルネットワークのチューニングとトレーニングに追われています。 コード自体が粗いので、私自身でも混乱しています... :)

ネットワークがエラーを繰り返していることに気がついた。そして、主な間違いはシグモイドの計算です。は、=1であってはならない。


だから何も見つからない、そう思ってチェックすることにしたのですが、コードのバグや不正確な部分がどこにあるのかを探さなければなりません。

void OnStart()
  {
      double a=91.49999999993754;
      Print("1. a = ",a);
      double H= 1/(1+exp(-a));
      a=H;
      Print("2. a = ",a);
      Print("3. H = ",H);
      double e = exp(-91.49999999993754);
      Print("4. e = ",e);
  }

2019.09.21 16:53:01.516 tst_template EURUSD,H1: 4. e = 1.828331349163451e-40

2019.09.21 16:53:01.516 tst_template EURUSD,H1: 3.H = 1.0

2019.09.21 16:53:01.516 tst_template EURUSD,H1: 2. a = 1.0

2019.09.21 16:53:01.516 tst_template EURUSD,H1: 1. a = 91.49999999993754

で、ステップごとに計算して結果をプリントアウトするのですが、私見では、ステップ#4ですでに精度が落ちると思います、私の結果は次の通りです。82 × 10^(-40) - これは非常に小さな数であり、将来的にこのような小さな数字で任意の操作は、さらに多くの精度を失うことになる、これは実数で作業するときに、いわゆる "マジック" - 整数またはダブルで計算をしようとするような小さな数で精度を失わない ために、仮数番号を失うことなく - あなたは10^40で掛ける必要がある... - その後、一般的にはカウントする必要があるので、先に私は助けないでしょう行く