記事"初心者のためのMQL5のカスタムインディケーター"についてのディスカッション - ページ 2 123 新しいコメント Artyom Trishkin 2014.07.31 21:50 #11 serg7771959:ニコラスです! Mass[ i ]= Mass[ i+1]+A; (Aは変数です)という式を使ってループの中でインジケータ配列を埋めようとしたとき、コンパイルはエラーなしで進みますが、ウィンドウに参加するとarray out of range (配列が範囲外)というメッセージが表示されるのはなぜですか? ループは最後の入力が行われるセルを考慮して作成する必要があるからです。Mass[]配列のサイズが仮に10だとすると、0から9(これは配列の最後のセルのインデックスです)までループし、i==9でインデックス9+1のセルに書き込もうとします。配列にはセル10がない。そのため、配列の 外側に出力されます。 nicolasxu 2015.01.18 09:06 #12 このようなチュートリアルがもっと必要だ! igorsds 2016.06.26 02:16 #13 ニコライ、ありがとう。素晴らしいチュートリアルだよ! でも、その変数const int beginは常にゼロ値になると思います。それは計算上重要なのでしょうか? apirakkamjan 2018.06.08 12:14 #14 igorsds:ニコライ、ありがとう。素晴らしいチュートリアルだよ! でも、その変数は常にゼロ値だと思います。計算する上で意味があるのでしょうか? begin "の値 は、どのインディケータに 適用するかによって異なります。例えば、RSIに適用した場合、"begin " は14になります。 Arthur Albano 2018.08.17 14:14 #15 初めてコンパイルしようとすると、バッファエラーが出るかもしれません。そこで、バッファの量を変更してください: #プロパティ indicator_buffers 2 後で1バッファに戻すこともできます: #プロパティ indicator_buffers 1 Epril Purwandi 2021.02.20 09:24 #16 フィボ・ジグザグと組み合わせるには? LRDPRDX 2021.12.02 19:03 #17 理解できない。仮に rate_total == MA_Period - 1 で、これは関数の最初の呼び出しなので prev_calculated == 0 で、begin == 0 とすると、最初の if(rates_total < MA_Period - 1 + begin) の条件は false と評価されます。 ならば first = MA_Period - 1 が実行される。 が実行されますが、最初のforループの条件がfalseと評価されるため、計算は行われません。 最初のif条件は次のようにすべきだと思います。 if( rates_total < MA_Period + begin ) です。 私はここで何かを見逃しているのでしょうか? LRDPRDX 2021.12.02 19:16 #18 そしてもう一つ。すでにprev_calculated 回計算したインジケータを、なぜ(prev_calculated - 1) の数値のバーから計算しなければならないのでしょうか? 例えば、0,1,2,3,4のバーで5回計算しました。バー4で再度計算する必要はありません。5小節目から続ける必要があります。 LRDPRDX 2021.12.03 14:43 #19 LRDPRDX #:そしてもう一つ。すでにprev_calculatedという インジケーターを何度も計算しているのに、なぜ(prev_calculated - 1) という数値のバーから計算を始めなければならないのでしょうか?例えば、0,1,2,3,4のバーで5回計算しました。バー4で再度計算する必要はありません。5小節目から続ける必要があります。 わかりました。なぜなら、前回の計算から4番目のバーが変更された可能性があるからです。ということは、(prev_calculated - 1) が正しいようだ。 Marilena Oliva 2021.12.09 12:37 #20 詐欺が日常茶飯事ブラビ 123 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ニコラスです!
Mass[ i ]= Mass[ i+1]+A; (Aは変数です)という式を使ってループの中でインジケータ配列を埋めようとしたとき、コンパイルはエラーなしで進みますが、ウィンドウに参加するとarray out of range (配列が範囲外)というメッセージが表示されるのはなぜですか?
ニコライ、ありがとう。素晴らしいチュートリアルだよ!
でも、その変数
は常にゼロ値になると思います。それは計算上重要なのでしょうか?
ニコライ、ありがとう。素晴らしいチュートリアルだよ!
でも、その変数
は常にゼロ値だと思います。計算する上で意味があるのでしょうか?
begin "の値 は、どのインディケータに 適用するかによって異なります。例えば、RSIに適用した場合、"begin " は14になります。
初めてコンパイルしようとすると、バッファエラーが出るかもしれません。そこで、バッファの量を変更してください:
#プロパティ indicator_buffers 2
後で1バッファに戻すこともできます:
#プロパティ indicator_buffers 1
理解できない。仮に
rate_total == MA_Period - 1
で、これは関数の最初の呼び出しなので
prev_calculated == 0
で、begin == 0
とすると、最初の if(rates_total < MA_Period - 1 + begin) の条件は false と評価されます。
ならば
first = MA_Period - 1 が実行される。
が実行されますが、最初のforループの条件がfalseと評価されるため、計算は行われません。
最初のif条件は次のようにすべきだと思います。
if( rates_total < MA_Period + begin ) です。
私はここで何かを見逃しているのでしょうか?
そしてもう一つ。すでにprev_calculated 回計算したインジケータを、なぜ(prev_calculated - 1) の数値のバーから計算しなければならないのでしょうか?
例えば、0,1,2,3,4のバーで5回計算しました。バー4で再度計算する必要はありません。5小節目から続ける必要があります。
そしてもう一つ。すでにprev_calculatedという インジケーターを何度も計算しているのに、なぜ(prev_calculated - 1) という数値のバーから計算を始めなければならないのでしょうか?
例えば、0,1,2,3,4のバーで5回計算しました。バー4で再度計算する必要はありません。5小節目から続ける必要があります。