指標となる質問 - ページ 3 12345678 新しいコメント Ian Venner 2011.10.02 14:27 #21 Agent86: . とにかく、iMACDのクロス、EMAのクロス、その他の指標のクロスなど、別の条件が発生したときにのみ、高いフラクタルが形成されるようにしようとしていたのです。 そうすれば、すべての条件が満たされたときにのみ、フラクタルがインジケータに表示されるようになります。 何をしようとしているのか正確にはわからないのですが、外部入力に注目して試してみてください。 #property indicator_chart_window extern bool condition1 = true; #property indicator_buffers 3 extern bool condition2 = true; #property indicator_color1 Red #property indicator_color2 Blue #property indicator_color3 White //---- buffers double v1[]; double v2[]; double v3[]; double val1; double val2; double val3; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { //---- IndicatorBuffers(3); SetIndexArrow(0, 111); SetIndexStyle(0,DRAW_ARROW,STYLE_DOT,1,Blue); SetIndexBuffer(0, v1); SetIndexLabel(0,"Resistance"); SetIndexArrow(1, 111); SetIndexStyle(1,DRAW_ARROW,STYLE_DOT,1,Red); SetIndexBuffer(1, v2); SetIndexLabel(1,"Support"); SetIndexArrow(2, 111); SetIndexStyle(2,DRAW_ARROW,STYLE_DOT,1,White); SetIndexBuffer(2, v3); SetIndexLabel(2,"High A"); //---- return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { double faster = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1), //MODE_MAIN slower = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); //MODE_SIGNAL int bars = Bars; //---- for(int i=bars; i>=0; i--) { if(condition1) { val1=iFractals(NULL, 0, MODE_UPPER,i); if (val1 > 0) v1[i]=High[i]; } if(condition2) { val2=iFractals(NULL, 0, MODE_LOWER,i); if (val2 > 0) v2[i]=Low[i]; } } //---- return(0); } //+------------------------------------------------------------------+ blackmore 2011.10.02 14:49 #22 WHRoeder: その結論に至った経緯と、機能的な違いは何でしょうか? そうですね、MQL4の場合はそうではないような気がします。 でも、いい練習になるかもしれませんね。 Ian Venner 2011.10.02 14:58 #23 あるいは、このようなものでしょうか? このようにすると、あなたのインジケータは、すべてのオブジェクトを一度に描画し、新しいバーが形成されたときに新しいオブジェクトを追加するのではなく、新しいティックごとにすべてのオブジェクトを再描画しているため、本当にIndicatorCounted()を使用 しなければならない。 #property indicator_chart_window #property indicator_buffers 3 #property indicator_color1 Red #property indicator_color2 Blue #property indicator_color3 White //---- buffers double v1[]; double v2[]; double v3[]; double val1; double val2; double val3; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { //---- IndicatorBuffers(3); SetIndexArrow(0, 111); SetIndexStyle(0,DRAW_ARROW,STYLE_DOT,1,Blue); SetIndexBuffer(0, v1); SetIndexLabel(0,"Resistance"); SetIndexArrow(1, 111); SetIndexStyle(1,DRAW_ARROW,STYLE_DOT,1,Red); SetIndexBuffer(1, v2); SetIndexLabel(1,"Support"); SetIndexArrow(2, 111); SetIndexStyle(2,DRAW_ARROW,STYLE_DOT,1,White); SetIndexBuffer(2, v3); SetIndexLabel(2,"High A"); //---- return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { double faster=0; double slower=0; int bars = Bars; //---- for(int i=bars; i>=0; i--) { faster = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i); //MODE_MAIN slower = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i); //MODE_SIGNAL val1=iFractals(NULL, 0, MODE_UPPER,i); val2=iFractals(NULL, 0, MODE_LOWER,i); if(faster > 0) { if (val1 > 0) v1[i]=High[i]; } if(faster < 0) { if (val2 > 0) v2[i]=Low[i]; } } //---- return(0); } //+------------------------------------------------------------------+ William Roeder 2011.10.02 16:20 #24 diostar: この結論に至ったのは、おそらく私がOOPの観点から見ていたからでしょう。 しかし、これは良い練習になるのではないでしょうか?スコープを限定することは常にグッドプラクティスであり、変数やオブジェクトを使う場所で定義し、その時点で初期化することは常にグッドプラクティスです。 ループの外側でオブジェクトを定義すると、デフォルトのコンストラクションに加え、N個の代入が行われます。ループの内側で定義した場合は、N個のコンストラクションに値が割り当てられ、通常はより速くなります。 最適化については、その変更が有効であることが証明されるまで、決して心配しないでください。 blackmore 2011.10.02 16:26 #25 WHRoeder: スコープを限定するのは常に良い習慣だ。変数やオブジェクトを使う場所で定義し、その時点で初期化するのは常に良い習慣だ。 ループの外側でオブジェクトを定義すると、デフォルトのコンストラクションに加え、N個の代入が行われます。ループの内側で定義すると、N個の構文と値が生成される - 通常はもっと速い。 最適化については、その違いが証明できるまで気にしないこと。 これは、そのイテレータにも適用されるはずです。 William Roeder 2011.10.02 16:36 #26 diostar: これは、そのイテレータにも適用されるはずです。 私は同意するが、このコードを書いたのは私ではない。 Agent86 2011.10.03 00:48 #27 OK、私は今、作業コードのいくつかのバリエーションを持っているようだありがとうございます。 しかし、私はなぜループの外側の変数の宣言(より速く、より遅い)がダメで、ループの内側ではOKなのか、少し混乱しています。 そして、まだint i = Barsは、ループの外側または内側で動作するのでしょうか? とにかく、私が取り組んでいたアイデアのいくつかがすでにこのスレッドに投稿されているのを見るのは良いことです。これは、私がいつか自分で何かをコーディングできるように少し近づいていることを意味します。だから、少しの進歩は、ないよりはましです。ありがとうございます。 それで、今私はいくつかの指標時間を比較することに取り組むことができます、私は今これを把握しようとします。 こんな感じ。 このような比較は、「v1[i]とv2[i]の現在形成されている指標時間 && / || if(v1[i] time is > v2[i] time) 」と他の比較のようなものですね。 皆さん、たくさんのヒントをありがとうございました。 Agent86 2011.10.03 00:53 #28 WHRoeder: スコープを限定するのは常に良い習慣だ。変数やオブジェクトを使う場所で定義し、その時点で初期化するのは常に良い習慣だ。 ループの外側でオブジェクトを定義すると、デフォルトのコンストラクションに加え、N個の代入が行われます。ループの内側で定義すると、N個の構文と値が生成される - 通常はもっと速い。 最適化については、その違いが証明できるまで気にしないこと。 これは、インジケータやカスタムインジケータだけ でなく、すべてに当てはまると思うのですが? Ian Venner 2011.10.03 00:57 #29 Agent86: OK、私は今、作業コードのいくつかのバリエーションを持っているようだありがとうございます。しかし、ループの内側では大丈夫なのに、なぜループの外側で変数(fasterとslower)を宣言するとダメなのか、少し混乱しています また、int i = Barsは、ループの外でも内でも動作するのでしょうか? インジケータを作成する場合、チャート上の各バーにコードを適用することになります。元のコードではそうなっています。double faster = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1), 最後のパラメータ1は、チャートのバー1(バー0としてインデックスされた現在のバーの前のバー)にあったmacdの値です 明らかに、ヒストリカルチャート全体の条件演算子で、その単一のmacdの値を使用したいわけではありません。macdのインデックスを各バーと同じバーインデックスにする必要があり、例えば500バーでは次のようになります。faster = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,500) この最後のパラメータは、インジケータがアルゴリズムを適用しているバーの番号に合わせて変更する必要があります。そのため、ループの中でそれを行う必要があり、最後のパラメータにループサイクル・イテレータ(i)を使用することで、ヒストリカルチャートの各バーにあったmacd値を取得することができるのです。faster = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i), これで少しはすっきりしたでしょうか。 Agent86 2011.10.03 00:58 #30 WHRoeder: この変更を試してください なぜfor(int i = Bars-1 ?なのですか? また、なぜfor(int i = Bars ?)よりも良いのでしょうか? アドバイスお願いします。 12345678 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
.
とにかく、iMACDのクロス、EMAのクロス、その他の指標のクロスなど、別の条件が発生したときにのみ、高いフラクタルが形成されるようにしようとしていたのです。
そうすれば、すべての条件が満たされたときにのみ、フラクタルがインジケータに表示されるようになります。
何をしようとしているのか正確にはわからないのですが、外部入力に注目して試してみてください。
その結論に至った経緯と、機能的な違いは何でしょうか?
そうですね、MQL4の場合はそうではないような気がします。 でも、いい練習になるかもしれませんね。
あるいは、このようなものでしょうか?
このようにすると、あなたのインジケータは、すべてのオブジェクトを一度に描画し、新しいバーが形成されたときに新しいオブジェクトを追加するのではなく、新しいティックごとにすべてのオブジェクトを再描画しているため、本当にIndicatorCounted()を使用 しなければならない。
この結論に至ったのは、おそらく私がOOPの観点から見ていたからでしょう。 しかし、これは良い練習になるのではないでしょうか?
スコープを限定することは常にグッドプラクティスであり、変数やオブジェクトを使う場所で定義し、その時点で初期化することは常にグッドプラクティスです。
ループの外側でオブジェクトを定義すると、デフォルトのコンストラクションに加え、N個の代入が行われます。ループの内側で定義した場合は、N個のコンストラクションに値が割り当てられ、通常はより速くなります。
最適化については、その変更が有効であることが証明されるまで、決して心配しないでください。
スコープを限定するのは常に良い習慣だ。変数やオブジェクトを使う場所で定義し、その時点で初期化するのは常に良い習慣だ。
ループの外側でオブジェクトを定義すると、デフォルトのコンストラクションに加え、N個の代入が行われます。ループの内側で定義すると、N個の構文と値が生成される - 通常はもっと速い。
最適化については、その違いが証明できるまで気にしないこと。
これは、そのイテレータにも適用されるはずです。
しかし、私はなぜループの外側の変数の宣言(より速く、より遅い)がダメで、ループの内側ではOKなのか、少し混乱しています。
そして、まだint i = Barsは、ループの外側または内側で動作するのでしょうか?
とにかく、私が取り組んでいたアイデアのいくつかがすでにこのスレッドに投稿されているのを見るのは良いことです。これは、私がいつか自分で何かをコーディングできるように少し近づいていることを意味します。だから、少しの進歩は、ないよりはましです。ありがとうございます。
それで、今私はいくつかの指標時間を比較することに取り組むことができます、私は今これを把握しようとします。
こんな感じ。
このような比較は、「v1[i]とv2[i]の現在形成されている指標時間 && / || if(v1[i] time is > v2[i] time) 」と他の比較のようなものですね。
皆さん、たくさんのヒントをありがとうございました。
スコープを限定するのは常に良い習慣だ。変数やオブジェクトを使う場所で定義し、その時点で初期化するのは常に良い習慣だ。
ループの外側でオブジェクトを定義すると、デフォルトのコンストラクションに加え、N個の代入が行われます。ループの内側で定義すると、N個の構文と値が生成される - 通常はもっと速い。
最適化については、その違いが証明できるまで気にしないこと。
OK、私は今、作業コードのいくつかのバリエーションを持っているようだありがとうございます。しかし、ループの内側では大丈夫なのに、なぜループの外側で変数(fasterとslower)を宣言するとダメなのか、少し混乱しています
また、int i = Barsは、ループの外でも内でも動作するのでしょうか?
インジケータを作成する場合、チャート上の各バーにコードを適用することになります。
元のコードではそうなっています。
最後のパラメータ1は、チャートのバー1(バー0としてインデックスされた現在のバーの前のバー)にあったmacdの値です明らかに、ヒストリカルチャート全体の条件演算子で、その単一のmacdの値を使用したいわけではありません。
macdのインデックスを各バーと同じバーインデックスにする必要があり、例えば500バーでは次のようになります。
この最後のパラメータは、インジケータがアルゴリズムを適用しているバーの番号に合わせて変更する必要があります。
そのため、ループの中でそれを行う必要があり、最後のパラメータにループサイクル・イテレータ(i)を使用することで、ヒストリカルチャートの各バーにあったmacd値を取得することができるのです。
これで少しはすっきりしたでしょうか。
この変更を試してください
また、なぜfor(int i = Bars ?)よりも良いのでしょうか?
アドバイスお願いします。