[ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 3. - ページ 82

 
wolf05632:

ありがとうございます、でも私には使えません。オフセットは必要ない。上記で私はこう書きました。最初のキャンドルは buffer[1]=Hight[1] で、3番目の buffer[3]=Hight[3] 、2番目のキャンドルは buffer[2]=MathAbs(Higth[1]-Hight[3])/2 と計算すれば、図のようになるとします。
そして、私の変種が嫌いなのか?:))よりシンプルで、より複雑ではありません。それとも、バッファに各バーの値が残っていることが必要なのでしょうか?
 

wolf05632:

SZY: どうしたら特定のタイムフレーム(H1)のみでインジケータを機能させる、つまり計算をする(目に見えないが機能する)ことができますか?

計算を現在のタイムフレームにではなく、H1にバインドする必要があります:))例えば、Open[], Close[], High[], Low[], Time[]という配列ではなく、iOpen(), iClose(), iHigh(), iLow(), iTime()関数と 関連パラメータを使用します...。
 
MaxZ:
なぜ、私のバージョンは気に入らなかったのですか?:))ずっとシンプルで、計算も少ない。それとも、各バーでバッファに値を保持したいですか? 。

試してみました、ありがとうございました、でもうまくいきませんでした。チャートに表示させることができませんでした。何か勘違いしているのかもしれません。私が理解した唯一のことは、バッファ内の要素は順次(1,2,3...)、すなわち隙間なく(1,3,5...)移動しなければならず、バッファ内の要素には必ず値が割り当てられて いなければならない、ということです。:-)
 

Romanさん、返信ありがとうございます...。残念ながら、まだひとつわからないことがあります。教科書では、https://book.mql4.com/ru/basics/expressions、「タイプアプローチ」の下にあります。オプション 4.1. 整数型の結果を計算する

バリエーション4. 実数型の値として結果を求める場合も同様である "とあり、同じ式が与えられているが、あるケースでは、変数Fの型がintと指定されている

   double A = 2.0;                      // Количество карандашей у Васи
   int    Y = 3;                        // Количество ответов Пети
   int    F = A + Y;                    // Общее количество

で、2番目の例では、変数がdouble

   double A = 2.0;                   // Количество карандашей у Васи
   int    Y = 3;                     // Количество ответов Пети
   double F = A + Y;                 // Общее количество

残念ながら、変換のロジックはまだ理解できていません。最初の変形で、なぜ int が変数 F に代入されるのか(すなわち暗黙の型変換の規則に 従って)が明らかであれば、2番目の変形ではなぜ double....が代入されるのかという感じです。

ここでの説明で見落としていることがあれば、明らかにしてください。

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

 
wolf05632:

試してみました、ありがとうございました、でもうまくいきませんでした。チャートには何も表示されなかった。もしかして、何か勘違いしている?

コード全体をコピーしたのですか、それともstart()関数の中だけをコピーしたのですか?大事なことなんです!

wolf05632 です。

ただひとつ、重要なことを理解しました。バッファの中の要素は、次々に(1,2,3...)、つまり隙間なく(1,3,5...)移動しなければならず、バッファ内のすべての要素に値が割り当てられていなければなりません。:-)
間違っている!:))例えば、ジグザグはバッファの全要素が埋まっていない。また、アイコンのためにすべてのバッファ要素を埋める必要はありません。
 
Geowind64:

Romanさん、返信ありがとうございます...。残念ながら、まだひとつわからないことがあります。 教科書では、https://book.mql4.com/ru/basics/expressions、「Type Adduction」の下にあります。オプション 4.1. 整数型の結果を計算する

バリエーション4. 実数型の値として結果を求める場合にも同様の状況が発生する",同じ式が与えられるが,ある場合には,変数Fの型はintと表記される

であり、2番目の例では、変数はすでにdoubleである

残念ながら、変換のロジックはまだ理解できていません。最初の変形で,なぜintが変数Fに代入されるのか(つまり暗黙の型変換のルールに従って)明らかなら,2番目の変形ではなぜdoubleを代入したのか....は、完全に私を混乱させる。

私の説明で見落としていることがあれば、ご教示ください。

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



n


interanger型はduble型であり、duble型の変数型は範囲が広いので、式中の変数が異なる型である「可能性がある」ことはあり得ず、結果として受け入れられる値の範囲が狭い変数、この場合interanger型となる。つまり、式の中の少なくとも1つの変数がduble型であれば、結果はdubleの範囲になければならないし、またあることができる。さもなければ、コンパイル時にエラー - 型の不一致 - が発生する。

詳しくはこちらを ご覧ください。

 
Roman.:


Integerはduble型であり、duble型の変数は範囲が広いため、式中の変数が異なる型である「可能性を持つ」ことはできず、結果として受け入れられる値の範囲が狭い変数、この場合はinteger型になります。つまり、式の中の少なくとも一つの変数がduble型であれば、結果はdubleの範囲でなければならず、また、そうでなければ、コンパイル時にエラーとなる - type mismatch。

詳しくはこちらを ご覧ください。


暗黙の型変換を使うことが多いですね。でも、不要な括弧を使わないといけないんです。
 

皆さん、#INFとは どういう意味でしょうか?TWR変数で取得したTHOSE値の正しいカウント方法は?

 
Geowind64:

教科書のこの部分をよく読むと、まず課題「=」の左側にある式に注目する必要があることがわかると思います。

   A + Y

ルールによると

  • もし、代入記号の右側の式の型が代入記号の左側の変数の型と同じでない場合、式の値は代入記号の左側の変数の型にキャストされます;これはターゲット型変換と呼ばれます。

Aは左のdouble型の変数なので、A+Yの値はdouble型の数値になります。

次に、式が代入される変数の種類に注目する。

最初のケースで"まず式A+Yの型がint型に変換され(整数の計算ルールに従って)、この結果が整数型変数Fの値となる"。

2つ目のケース"変数Fのターゲット型(代入演算記号の左側)、この場合double型は式A+Yのdouble型と同じなので、ターゲット型の変換は発生しない "とあります。

Verstehen?:)))

 
Roman.:

これはダブルTWRの積を数えるもので、つまり前の値に次の値を掛けるものです。TWR変数が取るTHOSE値を正しくカウントするには?

一般的にINFINITY (略してINF )は無限大!?:))そう、ダブルではそんな膨大な数を記憶するパワー(メモリ)が不足していることがわかったのだ。

そして、正しい計算方法は、推測するしかないのですが...。条件付きでOwn型を作成:追加の変数digitに格納し、10^n(nは桁数)で2倍乗算する。でも、この場合、精度が落ちてしまうので、どんどん精度が落ちていくんですね......。

でも、計算のロジックを変える方がシンプルかも?:)))それともどこかに間違いがあるのでしょうか。