[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 321

 
hoz:

https://www.mql5.com/ru/forum/144705 ここで、別スレッドを立ち上げました。必要なものが詳細に書かれています。


そうですね、フルソースの方が楽しいですね。すぐに見える、どこからどこまでがパスで、一体何回目なのか。さて、そんな中、すぐに目に飛び込んできたのがこれ。

ホズ
int GetStateOfMA()
{
   if (GetMA(1) > GetMA(2))
   {
       pr ("GetStateOfMA() = CROSS_UP");
       return (CROSS_UP);
   }
       
   if (GetMA(1) < GetMA(2))
   {
       pr ("GetStateOfMA() = CROSS_DN");
       return (CROSS_DN);
   }
       
    pr ("GetStateOfMA() = CROSS_NO");
    return (CROSS_NO);
}

実質的に1行で済むように簡略化できる。

int GetStateOfMA(){
   if(GetMa(2)==GetMa(1)) return(0); else return(MathAbs(GetMA(2)-GetMA(1))/(GetMA(2)-GetMA(1)));
}

ここでは、ゼロまたは差の符号(プラスまたはマイナス)を返す。参照:数値のモジュラスを数値自体で割ったものは、実質的に数値を数値で割ったものと同じ、つまり1であり、数値がマイナスだった場合のみ、当然マイナス1が返されるのです。

さらに図にする。

 
gyfto:


そうですね、フルソースの方が楽しいですね。すぐに見える、どこからどこまでがパスで、一体何回目なのか。さて、そんな中、すぐに目に飛び込んできたのがこれ。

は、ほぼ1行にまとめることができます。

ここでは、ゼロまたは値の差の符号(プラスまたはマイナス)を返す。参照:数値のモジュラスを数値自体で割ったものは、数値を数値で割ったものとほぼ同じ、つまり1であり、数値がマイナスだった場合のみ、当然マイナス1が返されます。

さらに図式化する。


2つの実数をいかに簡単に比較するか
 
gyfto:


そうですね、フルソースの方が楽しいですね。どこから何が、一体何回抜かれたのかが一目瞭然です。さて、そんな中、すぐに目に飛び込んできたのがこれ。

は、ほぼ1行にまとめることができます。

ここでは、ゼロまたは値の差の符号(プラスまたはマイナス)を返す。参照:数値のモジュラスを数値自体で割ったものは、数値を数値で割ったものとほぼ同じ、つまり1であり、数値がマイナスだった場合のみ、当然マイナス1が返されます。

さらに調べてみます。

そうですね、理にかなっています。でも、どうしてこんな面倒なことをしなければならないのでしょうか?gyfto さんも、私と同じように何でもかんでも普遍化する傾向があるんですね。もっと言いたい。ここでは、偏差の大きさを表す変数を追加することで、平均の小さな交差をフィルタリングすることができます。なんとなく全部わかるのですが、読みやすさが特に便利というわけではないでしょう。結局、関数値は0と 比較する必要がある。<0とか>0とか。

ヴィン

2つの実数をいかに簡単に比較するか。

まあ、分散に興味がないのであれば、何を止めればいいのでしょう。それはどこに規定されているのですか?
 
Vinin:

2つの実数をいかに簡単に比較するか

doubleをdoubleで割ってもdoubleのままだし、returnはintしか返せないということですか?まあ、ローカルにint temp;を定義して、それに代入してreturn(temp)すればいいんですけどね。
 
gyfto:

doubleがdoubleで割ってもdoubleのままだし、returnはintしか返せないという意味で?まあ、ローカルにint temp;を定義して、それに代入してreturn(temp)すればいいんですけどね。
計算後に得られる2つの浮動小数点数が等しくなることは、ほとんどない。というより、平等であるべきだと思うのに、平等でないことの方が多いでしょう。
 
gyfto:

で、returnはintしか返せないのか?

いや、好きなものを返せばいいんです。必ずしもintとは限りません。結局のところ、関数がdouble型 であれば、どうやってint型を返すのでしょうか?
原理的には何の違いもなく、要はある型の関数から、同じものを返すということです。私はこのように理解しています。

Zhunko:
計算して得られた2つの浮動小数点数は、ほとんど等しくならない。というか、平等であるべきだと思うのに、平等でなくなることの方が多い。

では、比較するマッシュアップの違いを比較するために、常に何らかの変数distを 設定する必要があるのでしょうか?みたいな意味です。

extern dist = 0.1 // Расстояние между сравниваемыми машками.
//---------------------------
GetMA(2) - GetMA(1) >= dist;
 
hoz:

何でもかんでも普遍化する傾向がある。


いや、自分の心理を分析すると、自分のためだけでなく、人のためにプログラムを作りたいという思いの方が強いんです。

ホズ

なぜそんなにひねくれるのか?


信じてもらえないかもしれませんが、学校教育の不足なんです。申し訳ございません。私が下校した時(小学校6年生)、その年頃の子供たちは、まだ子供らしい好奇心、知識欲が鮮明に残っていることです。そして、高校では、学校の制度がそれをすべて殺してしまう。私は今30代ですが、まだその生き生きとした好奇心は残っていて、そういう条件付きの制約を意識することもなく、何が「すずしい」で何が「変態」なのか、私にとってはすべて「すずしい」ですから。すみません...

ホズ
ずん子
計算後に得られる2つの浮動小数点数が等しくなることは、ほとんどない。というより、そうあるべきだと思うのに、そうならないことの方が多い。


では、比較するマッシュアップの差を比較するために、常に何らかの変数distを 設定する必要があるのでしょうか?みたいな意味です。

extern dist = 0.1 // Расстояние между сравниваемыми машками.
//---------------------------
GetMA(2) - GetMA(1) >= dist;
ええ、その通りです、論理的です。
 
gyfto:

信じてもらえないかもしれませんが、学校の勉強不足が露呈しているのです。すみません。実は、私が下校した頃(小学校6年生)、その年代の子どもたちは、まだ子どもらしい好奇心、知識欲が旺盛でした。そして、高校では、学校の制度がそれをすべて殺してしまう。私は今30代ですが、まだその生き生きとした好奇心は残っていて、そういう条件付きの制約を意識することもなく、何が「すずしい」で何が「変態」なのか、私にとってはすべて「すずしい」ですから。すみません...


実は、私は一応教育を受けているのですが、必要なことだけを教え、あとは純粋に無視していました。いろいろなことに興味がないことがわかり、そういうつまらないこと(歴史、地理など)からは目を背けていたのです。私自身はそう思っていません、他の人とは違います。しかし、あなたのやり方は実に独特です。あなたの教育が不足しているのではなく、逆にそういうものなのだとすぐに思いました。なぜなら、上記の分析からすぐに全てを理解できたわけではなかったからです。
 
hoz:
アプローチが独特なんです。


私はずっと独学でやってきたので、あなたがどのようなアプローチをとってきたかはわかりません。私は、何があなたに受け入れられ、何がそうでないかを知りません。

さて、キャンドルの話に戻ります。i_AnyBarsToHistory = 30, i_ѕеqceptBarsConnt = 3があるとします。30本のローソク足のウィンドウで、cntUp == i_ѕеԛceptBarsCount と cntDn == i_ѕеԛceptBarsCount が1回ずつなら、どうなるでしょうか。それとも、常に1パスにつき1つのカウンタしか カウントしないのでしょうか?

はい、そしてなぜClose[1]に到達する前にループを早々に終了してしまうのでしょう。

 

最近のバーを比較して、何本が上昇、何本が下降、何本がピンバーで、誰がどのような価格の終値/始値、高値/安値、出来高を持っているかを計算するインジケータを作るにはどうしたらいいでしょうか?

これを具体的にインジケータで行う必要があります。