一方向に動き続ける局面だとダミーのシグナルを出し続けてしまいます。何かしらの別のやつと組み合わせないと大変なことになりそうです^^;ただ、有効に機能している時間帯は有効に機能し続ける傾向にあるようにも感じます。前回シグナルタイミンが正しく判定できていた場合は、今回も有効かも?みたいな感じで使うのもありかも??余談ですが、今日はMacbookで作業中・・。いやー仮想化ツールって便利だなー。MAC上からもMT4使えてます。問題無く動作している雰囲気です。MT4でS/Rオシレータのシグナルを青赤帯でチャートに表示する。その1前回の「相場は重力に縛られるのか?S/Rオシレータを作ってみた。」で作ったS/Rオシレータですが効果がありそうでなさそうなよくわかりません。そこで、検証を目でわかりやすく確認する為、100/0に張り付いている期間をチャート上に帯で表示するようにしてみましょう。いつぞか書いた「MT4のチャート上に矢印を表示する。」を参考にシグナルが出ている期間を帯上に表示したいと思います。矩形を描画する為の関数を作成します。"WSRO"//------------------------------------------------------------------//売買シグナルを矩形で描画する。//背景色){//オブジェクトを作成する。TimeToStr(time);//チャート縦幅いっぱいに表示する。true;}前回の記事では、最新のバーにシグナルを一個だけ表示していましたが、今回は、シグナルが出るたびにチャートに表示したいと思います。そこで、WSRO_OBJECT_NAMEという定数値と描画する時間足の時間を元に名前を生成しました。ObjectCreateの第3引数にはOBJ_RECTANGLEを指定しています。これは矩形を表しています。今回、左上の座標として、シグナル発生時間、現在の価格の4倍としています。チャートの縦幅いっぱいに帯を表示する為、十分大きな値として現在価格の4倍を指定しました。右下の座標は、シグナル発生時間+表示チャートの時間足、0としています。backColor);で背景色を設定しています。背景色は関数の外部から渡せるようにしています。次に、オブジェクトを削除する関数も作成しておきます。これは最新の値を表示する場合、現在価格によってシグナルが発生したりしなかったりすることを考慮して、現在チャートに表示している帯を消せるようにする為です。//------------------------------------------------------------------//オブジェクトを削除する。//表示時間(横軸)){//オブジェクトを作成する。true;}こちらの方も、名前を時間から生成して、オブジェクトを削除しています。存在しないObjectを削除しようとした場合、ObjectDelete関数がfalseを返してきます。OjbectFindで調べてから消してもいいかな?とも思ったのですが、どうせObjectDelete内で同じことやっているんだろうなと思い、あらかじめ調べるコードは省略しました。この2関数で表示する準備は完了です。次回の記事で、これを実際にS/Rオシレータに組み込み表示したいと思います。相場は重力に縛られるのか?S/Rオシレータを作ってみた。インジケータ作ってみたシリーズが思いのほか好評なため、もう一個作ったやつを公開します。その前に、前回のレンジ・エクスパンション・インデックス(REI)を作ってみた。記事を修正しています。私の解釈が間違っていた部分がありました。ソースコードは修正していません。これまた、ぱっとMT4用のコードが見つからなかった為、自作してしまいました。こちらはネットにウィドナー博士の英語論文が落ちてましたので、それを参考にしています。いっても英語なんてこれっぽちもできません。Google先生に頼んでニュアンスで理解したところによると、「どんな勢い良くリンゴを放り投げても引力という抵抗を受けていつかは落ちる。それと同じで相場も勢いをつけて移動しても反対方向に落ちてくるからそのタイミングをとらえましょう。」という考え方のようです。・・・・その意味でいくと重力圏を抜けて宇宙に飛び出してニュー○イプ化してしまった感のあるApple株みたいなこともあるので、そうなの?と思わないでもないですが、とりあえず作ってみました。oscillator」の略です。サポートラインとレジスタンスラインに対する位置を推進力、引力にとらえて算出するようです。上昇基調の時の考え方としてはサポートラインを上回る→推進力がある。レジスタンスラインを上回る→引力を受ける。推進力と引力が釣り合う→落ちてくるタイミングという事みたいです。今回は計算式にちょっと自信がありません。100//バッファーを指定する。2//プロット数を指定する。(INIT_PARAMETERS_INCORRECT);//インジケーターバッファを初期化する。0;//元となる値を計算する。新しいサポートが構築された場合、Period数保持する。新しいレジスタンスが構築された場合、Period数保持する。0);}}//つまりHLPeriodの期間内の中央値-1が高値・安値だった場合サポート・レジストラインとして登録する。//ここで単純に価格で比較すると、最新の値が行ったり来たりすると//過去のサポート・レジスタンスが次々更新される症状が発生してしまう。過去9本のうち4本目が最安値だった場合、サポートラインとします。同様に過去9本のうち4本目が最高値だった場合、レジスタンスラインとします。サポート・レジスタンスともに新しく更新されるまで過去6個分保持します。上記6個と現在価格の位置をカウントして超えている割合を%表示したものがS/Rオシレータとなります。��たぶん・・・汗)水色のラインがサポートラインに対する現在価格の位置、赤色のラインがレジスタンスに対する現在価格の位置となります。両方のラインが100になった場合売り、0になった場合は買いというシグナルです。添付画像で行くと赤丸で囲った部分が0になっていますが、そのあと反転していることが読み取れます。チャートとS/Rオシレータを眺めていて、思った事ですが、やはりこのオシレータ価格が一方方向に動き続けると0/100に張り付きます。相場が凪いでいた状態から動き出すとあっという間に0/100に達して相場が波打つまで、そのままとなります。俗にいう力をためている状態というのは認識できていなさそうです。一度100/0に張り付いた後、それが離れるタイミングでは確かに相場が逆に動き出すことも多そうです。このオシレータを参考にする場合、100/0に達した後、それが崩れるタイミングを見てエントリーというのがよさそうと感じました。ソースコード的な部分では、今回CArrayDoubleを使用しています。これは、MT4についてきている浮動小数点配列クラスで、Include/Arraysフォルダに含まれています。中身を見ると、doubleの配列に対して、AddやInsertなどデータ操作系が行えるようになっており、配列操作を簡単化できます。簡単によく使うメンバ関数を紹介します。size)引数で指定したサイズ分まで配列を確保します。元のサイズより小さい場合は値が削除されます。この値は、要素数の最大値となります。element)配列に要素を追加します。Resizeで指定した値まで追加可能です。pos)posで指定した位置に要素を挿入します。Resizeで指定した値まで追加可能です。index)indexで指定した位置の要素を削除します。constindexで指定した位置の要素を取得します。const現在の要素数を取得します。Resizeで指定した値は最大値で、実際に値の入っている要素数はTotalで取得します。CArrayを継承していますので、CArrayのメンバであるTotalが使用可能です。��しかし、みなさんMT4のインジケータで定番の奴が見つからない時どうしてるんでしょうか??��英語版のサイトをうろつくと見つかることもあるのですが、コードが古い為動かなかったりします・・。��まぁこーやって作っていくと考え方の勉強になるため、とても役には立っているのですが・・。★相互リンク募集中★トレードステーションと株・FX自動売買で暮らす茶トラがFX検証中。人気の投稿[MT4プログラミング]MT4のチャート上に矢印を表示する。MT4でS/Rオシレータのシグナルを青赤帯でチャートに表示する。MT4でS/Rオシレータのシグナルを青赤帯でチャートに表示する。その1相場は重力に縛られるのか?S/Rオシレータを作ってみた。