MT4でレジサポ向け水平線描画
前回、前々回ではトレンドライン描画の記事でしたが、今回は水平線の描画インジケーターを作成しました。
ネット上で割りとメジャーなレジサポ用インジケーターとしてSupport and Resistance.mq4 がありますので参考にさせてもらいました^^;
コードを見てみると、フラクタルを使ってますね。
実際に自分の環境で描画させてみると、こんなカンジ。

(クリックで大きくなります)
値動きが更新されて、新たな山や谷が出来てしまうとそれまでのドットラインは描画をやめて、新たな山や谷をベースに水平線を引き始めてます。
私が求めている水平線とはちょっとイメージが違ったので自分流にアレンジしてみました。
先ほどと同じEURJPY 1Hの同じシーンに描画させてみると・・・

(クリックで大きくなります)
フラクタル(黄色の上下矢印)は分かりやすくするため表示してます。
(通常は水平線だけ描画させてます。)
値動きの山や谷のすべてに水平線を描画してしまうと、大変な数のライン数になってしまうため、少し細工を施してます。
ラインを引く目的は、値動きのレンジになっている部分とトレンドになっている(急に動いている)部分を区別したいという点。
なるべく人間の直観に近いライン描画が出来ないものかと考えて、隣接する3点のフラクタルの位置関係を分類してます。
たとえば、上向きフラクタルが3つ並んでいるとき、
フラクタル値① < フラクタル値② > フラクタル値③
となっていたら、上値ピークなのでライン描画の候補にする。
フラクタル値① = フラクタル値② = フラクタル値③
(※ニアリーイコールだと思ってください。誤差はある閾値で丸めてます)
となっていたら、上値を抑えられている場面なので①~③の誤差を含まない最大値をライン描画の候補にする。
・・・などなど。
うーん、エントリー&エグジット関数を作るのはまだ遠そうですね^^;
ネット上で割りとメジャーなレジサポ用インジケーターとしてSupport and Resistance.mq4 がありますので参考にさせてもらいました^^;
コードを見てみると、フラクタルを使ってますね。
実際に自分の環境で描画させてみると、こんなカンジ。

(クリックで大きくなります)
値動きが更新されて、新たな山や谷が出来てしまうとそれまでのドットラインは描画をやめて、新たな山や谷をベースに水平線を引き始めてます。
私が求めている水平線とはちょっとイメージが違ったので自分流にアレンジしてみました。
先ほどと同じEURJPY 1Hの同じシーンに描画させてみると・・・

(クリックで大きくなります)
フラクタル(黄色の上下矢印)は分かりやすくするため表示してます。
(通常は水平線だけ描画させてます。)
値動きの山や谷のすべてに水平線を描画してしまうと、大変な数のライン数になってしまうため、少し細工を施してます。
ラインを引く目的は、値動きのレンジになっている部分とトレンドになっている(急に動いている)部分を区別したいという点。
なるべく人間の直観に近いライン描画が出来ないものかと考えて、隣接する3点のフラクタルの位置関係を分類してます。
たとえば、上向きフラクタルが3つ並んでいるとき、
フラクタル値① < フラクタル値② > フラクタル値③
となっていたら、上値ピークなのでライン描画の候補にする。
フラクタル値① = フラクタル値② = フラクタル値③
(※ニアリーイコールだと思ってください。誤差はある閾値で丸めてます)
となっていたら、上値を抑えられている場面なので①~③の誤差を含まない最大値をライン描画の候補にする。
・・・などなど。
うーん、エントリー&エグジット関数を作るのはまだ遠そうですね^^;
MT4でトレンドライン描画part2 線形回帰編
前回のフラクタルとは別のアプローチでトレンドラインを描画したのが、今回の線形回帰編になります。
・・・線形回帰っていう言葉で逃げ腰になってません?
大丈夫ですか?^^;
エクセルで書いた図ですが、↓こういうヤツですね。

散布図に一定の傾向があるかを一次式で判断できます。
こちらは、傾向が顕著な例ですね。(手入力したデータですが^^;)

で、これらの点がローソク足の終値だったらどうなるか?
トレンドが出ているときなら傾向が出るハズですよね?
そういうアプローチでトレンドラインを描画したのがこちら

(クリックで大きくなります)
決定係数が0.8以上の場合に強いトレンド性があると判断して描画しています。
0.8未満の場合は描画されません。
黄色の線が線形回帰の一次式。
青線①がフィボナッチ数から求めたチャネル。
青線②が一次式を求めた時間軸範囲内のMax/Minを使ったチャネル。
・・・となってます。
ただ、線形回帰の一次式は、ローソク足の本数を固定してしまうと適切に描画されないことが多いため、参照する本数を可変にするロジックも加えて決定係数が0.8以上になる最適値を選んでます。
ロジック作成にあたっては、こんな本で少しお勉強しました^^;
統計学にとっつきにくい方でしたら、こんな本もありましたので良いかもしれません。
シストレ開発する上で統計学はすっごく大切だと思うので、気になったら参考にしてみてくださいね(^-^)/
・・・線形回帰っていう言葉で逃げ腰になってません?
大丈夫ですか?^^;
エクセルで書いた図ですが、↓こういうヤツですね。

散布図に一定の傾向があるかを一次式で判断できます。
こちらは、傾向が顕著な例ですね。(手入力したデータですが^^;)

で、これらの点がローソク足の終値だったらどうなるか?
トレンドが出ているときなら傾向が出るハズですよね?
そういうアプローチでトレンドラインを描画したのがこちら

(クリックで大きくなります)
決定係数が0.8以上の場合に強いトレンド性があると判断して描画しています。
0.8未満の場合は描画されません。
黄色の線が線形回帰の一次式。
青線①がフィボナッチ数から求めたチャネル。
青線②が一次式を求めた時間軸範囲内のMax/Minを使ったチャネル。
・・・となってます。
ただ、線形回帰の一次式は、ローソク足の本数を固定してしまうと適切に描画されないことが多いため、参照する本数を可変にするロジックも加えて決定係数が0.8以上になる最適値を選んでます。
ロジック作成にあたっては、こんな本で少しお勉強しました^^;
はじめての統計学 |
統計学にとっつきにくい方でしたら、こんな本もありましたので良いかもしれません。
マンガでわかる統計学(回帰分析編) |
シストレ開発する上で統計学はすっごく大切だと思うので、気になったら参考にしてみてくださいね(^-^)/
MT4でトレンドライン描画part1 フラクタル編
久々の更新になってしまいました^^;
シストレ開発に専念したいところですが、やはり自分がやってきたことを
アウトプットしていかないと、何をやっているのか分からなくなりそうなので
これまでの遍歴を数記事に分けて書いてみます。
まず、最初に取り組んだのは、トレンドラインの描画。
これまでのスキャルピング練習ではトレンドラインと水平線が
モノを言う手法だったため、これらを描画させることを第一の
目標としました。
一つ目の作品はこちら。

(クリックで大きくなります)
ネット上に存在するいくつかのインジケーターを参考にしました。
(というか、ほぼそのまま使わせてもらいました^^;)
ロジックの基本は、フラクタル(図中の黄色い矢印)を使ってます。
フラクタルはMT4のメニューから「挿入」→「罫線分析ツール」
→「Bill Williams」→「Fractals」で表示できます。
code的に書くと、以下のような記述で値を取得できますね。
val1=iFractals(NULL, 0, MODE_UPPER,i);
val2=iFractals(NULL, 0, MODE_LOWER,i);
※実際にはFractalsのパラメータをいじりたかったので、iFlactalsを
使わずに同等のロジックを自作してるので、微妙にラインが異なりますが^^;
最新の値から過去側に遡って、直近で見つけた以下の二つをラインとして
描画しています。
①ダウントレンドを引く場合
上向きフラクタル2つを参照。
最新のフラクタル値 < 過去のフラクタル値 となっている場面で
2点を結んで描画。
②アップトレンドを引く場合
下向きフラクタル2つを参照。
最新のフラクタル値 > 過去のフラクタル値 となっている場面で
2点を結んで描画。
ちなみに、これを応用するとチャネルラインも引けます。
クロス円で発生しやすい「上昇トレンド割れからのショート」という場面では
割と使えるラインかもしれません。
シストレ開発に専念したいところですが、やはり自分がやってきたことを
アウトプットしていかないと、何をやっているのか分からなくなりそうなので
これまでの遍歴を数記事に分けて書いてみます。
まず、最初に取り組んだのは、トレンドラインの描画。
これまでのスキャルピング練習ではトレンドラインと水平線が
モノを言う手法だったため、これらを描画させることを第一の
目標としました。
一つ目の作品はこちら。

(クリックで大きくなります)
ネット上に存在するいくつかのインジケーターを参考にしました。
(というか、ほぼそのまま使わせてもらいました^^;)
ロジックの基本は、フラクタル(図中の黄色い矢印)を使ってます。
フラクタルはMT4のメニューから「挿入」→「罫線分析ツール」
→「Bill Williams」→「Fractals」で表示できます。
code的に書くと、以下のような記述で値を取得できますね。
val1=iFractals(NULL, 0, MODE_UPPER,i);
val2=iFractals(NULL, 0, MODE_LOWER,i);
※実際にはFractalsのパラメータをいじりたかったので、iFlactalsを
使わずに同等のロジックを自作してるので、微妙にラインが異なりますが^^;
最新の値から過去側に遡って、直近で見つけた以下の二つをラインとして
描画しています。
①ダウントレンドを引く場合
上向きフラクタル2つを参照。
最新のフラクタル値 < 過去のフラクタル値 となっている場面で
2点を結んで描画。
②アップトレンドを引く場合
下向きフラクタル2つを参照。
最新のフラクタル値 > 過去のフラクタル値 となっている場面で
2点を結んで描画。
ちなみに、これを応用するとチャネルラインも引けます。
クロス円で発生しやすい「上昇トレンド割れからのショート」という場面では
割と使えるラインかもしれません。