ea n7s_ao_772012 - ページ 30

 
SHOOTER777 >> :

А

残念ながら、この観察は、残念ながら...また、気づかされました...。

 

SHOOTER 具体的にどのようなパラメータ群を最適化するのか、簡単に教えてください。

  • x
  • y
  • z
  • X
  • Y
  • Z
おそらく、ある程度は理解しているのでしょうが、まだ全体像が頭に入ってこないのです。
 

ここにも奇遇というか、不具合があります。

double BTS() {
	if (( prcptrnz1() > 0 || F==0) && bu< HM_Up_X) {
		if ( prcptx1 > 0 && Delta_G12>0) {
			sl = slx; 
			tp = tpx * slx; 
			mn = mnx1; 
			return (1);
		}
	} 
	if (( prcptrnz1() < 0 || F==0) && sll< HM_Dn_Y) {
		if ( prcpty1 > 0 && Delta_G12<0) {
			sl = sly; 
			tp = tpy * sly; 
			mn = mny1;
			return (-1);
		}
	}
	return (0);
}

今F==0で、オープンポジションが 全くない場合、まず最初のブロックに入り、次に2番目のブロックに入ることができますが、これはその後間違った結果につながることがわかりました。

それとも、何か見落としているのでしょうか?

 

たぶん、ないと思いますけど。入れてくれないので、両方のブロックに同時に入ることはできません。

Delta_G12

が入れてくれません。

 
ShestkoFF писал(а)>>

私は、うまくいっているものを批判するのは好きではありません。コードの批判をするのは

Spsb.批判は批判としてではなく、行動への指針として、つまり、 少なくともMQL ハンドブックを少しは読めよということです。

  • 全部を行で書くと、コードが読めなく なるので嫌なんです。

受け入れられますが、おそらく今後の作品になります。この「手書き文字」は、他のもっとグローバルなプロジェクトの後、私の12インチモニターの浅い解像度のために得たものです。しかし、このままでは、常にリストをスクロールし続けなければなりません。でも、自分のために来たわけではないので、もう一度言いますが、肝に銘じておきます。

  • 変数に意味のある名前を付ける

上記をご覧ください私は自分の名前が好きですが、私たちがGOELRO、OBHSS、IMHOなどの略語に慣れたように、名前にも慣れるしかないのです。よく見ると、いくつかの変数には多少なりとも意味のある名前をつけていますが、母音はすべて省略されています。

  • ローカルな変数をグローバルにしないでください。

まだ、変数を使いこなせていない。ゼロからコードを書いているときは、変数がどこにあるかわからないので、ほとんどすべてがグローバルです。

  • グローバル変数を静的化しないのは意味がない。そうでない場合は、その説明をお願いします。

経験的にそうではない。どこで出会ったか覚えておこう。関数 BuSll () であったと思う。

  • 言語で定義された標準定数を使用する。例えば、時間間隔の指定など。 double iA_C (int pr ){int tmfr=60; return(iAO(Symbol(), tmfr, pr));} と置き換えた方が良いと思います。

そうですね、訂正しましょう、もう一度、 ゼロからブロックを書くときは、まだ関数に渡すパラメータを考えていません。そして、目が「汚れて」 、そんな「ささいなこと」に注意を払わないのです ))。

 
ShestkoFF писал(а)>>

SHOOTER 具体的にどのようなパラメータ群を最適化するのか、簡単に教えてください。

  • x
  • y
  • z
  • X
  • Y
  • Z
おそらく部分的には理解しているのでしょうが、まだ全体像が頭に入ってこないのです。

Expert Advisor の主な駆動力と指導力は、ノートリアス)) 機能 G12() です。この機能では、指標をもとに望ましい売買の方向性を算出します。しかし、一つの方向だけでは不十分で、エントリーポイントが必要です。classics」では、1つのタイムフレームでどちらかのパタロンが検索されるか、 外部パラメータがある場合はインディケータ自体がマッチングされ、2つ以上ある場合はそれらも最適化されます。またまた、私にとっての新しい方法NNを試して みました。

ここで この 関数

double prcptrnAC(int q1,int q2,int q3,int q4,int pr,int at)

{double qw = (q1-50)+((q2-50)*iA_C(pr)+(q3-50)*iA_C(2*pr)+(q4-50)*iA_C(3*pr) )/iA_C(1).

if (MathAbs(qw)>at) return(qw);else return(0);}.

パーセプトロンと呼ばれるもので、何かを得るために設計されています。ここに詳しく、多くの質問に対するいくつかの答えがあり、私が答えるよりも良いものです儲かる売買戦略の見つけ方」 ニューラルネットレシピ 確かに 私自身は斜め読みで、他の人の作品を研究することでより面白くなっていきました(下記参照)。

このEAは、Batohovの MTS "Neural network + MACD", ReshetovのMTS "Сombo", "Combo_Right" & AI, PraVedNiKのPROphet , zerkmaxのRSI_Test,Igor Malcevの auto_optimization.mqhと その他をベースに作られたものである。

 
ShestkoFF писал(а)>>

ここにも奇遇というか、不具合があります。

今F==0で、オープンポジションが全くない場合、まず最初のブロックに入り、次に2番目のブロックに入ることができますが、これはその後間違った結果につながることがわかりました。

それとも、私が何か理解していないのでしょうか?

F == 0 となるのは、最初の2つの最適化段階において、Delta_G12 に加えて、Trd_Up_X と Trd_Dn_Y が存在する場合のみである。

6つのステップをすべて適切に通過し、最適化セットファイルを順次使用した場合、Fは常に1になるはずです。

そして、コードを見直したときに、もう一つの間違いを発見しました。最新のバージョンでは動作が悪くなっているようですね。このエラーはバージョン7と9で発生しました。

どなたかお気づきですか?

 
SHOOTER777 >> :

ここで この 関数

double prcptrnAC(int q1,int q2,int q3,int q4,int pr,int at)

{double qw = (q1-50)+((q2-50)*iA_C(pr)+(q3-50)*iA_C(2*pr)+(q4-50)*iA_C(3*pr) )/iA_C(1).

if (MathAbs(qw)>at) return(qw);else return(0);}.

パーセプトロンのようなもので、何かを得ることを目的としています。

これは今のところ、ちょっと謎です。もちろん、何をするものなのか、何のためにあるのかは理解しています。しかし、この方式自体が少々変わっているのです。
ニューロンの働きの結果は、ニューロンの入力とその重みを掛け合わせた数値になるはずです。
すなわち、論理的には次のようなものであるべきです。

double qw = (q1-50) * iA_C(1) + (q2-50) * iA_C(pr) + (q3-50) * iA_C(2 * pr) + (q4-50) * iA_C(3 * pr)

明らかにどちらも4変数(8変数?)の何らかの関数が最大値(結果のバランス)を求めるのに関与しているのですが、それでも変ですよね :)

 
ShestkoFF писал(а)>>

この機能はまだ謎のままです。もちろん、何をするのか、なぜそうなるのかは理解しています。しかし、この方式自体が少々変わっているのです。
ニューロンの働きの結果は、ニューロンの入力とその重みを掛け合わせた数値になるはずです。
だから、論理的にはこうなるはずだ。

double qw = (q1-50) * iA_C(1) + (q2-50) * iA_C(pr) + (q3-50) * iA_C(2 * pr) + (q4-50) * iA_C(3 * pr)

明らかにどちらも4変数(8変数?)の何らかの関数が最大値(結果のバランス)を求めるのに関与しているのですが、やはり変ですね :)

あなたは、少なくとも私が理解している方法で、関数の簡略版を与えました。

こんなところで議論されています

'MTS「ソンボ」'。

公正を期すために、純粋な形のニューラルネットワークではないのです。まず、閾値がないため、NSの分割能力が非常に小さくなってしまう。第二に、IMHOは、出力活性化閾値を追加する価値があります。どういう意味ですか?起動閾値を超えた場合のみ、シグナルを取引に戻すこと。例えば、こんな感じです。

double res = (w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4 // )/Close[0] - T); // Close[0] で割って 統一
if(MathAbs(res) > ActivityThreshold) return(res); // ActivityThreshold -- 起動閾値

 
gorby777 писал(а)>>

以前のバージョンではパーセプトロンの式z1でClose(0)を使用していましたが、7と9ではClose(1)を使用しています。こういうことなんでしょうか?

いや、そういうことではなくて、やはりフォーミングバーに取り組むというルールがあるのだと思います。

しかし、Flq=false;がBuyとSellに1つずつあることは、この2つの取引方向の分離に大きな影響を与え、その結果、結果が変わってしまうのです。