Wizard In The Market
システムトレードの魔術師

*

High_Low v2 (ZigZag)のバーが出るタイミング

公開日: : 最終更新日:2015/01/13 その他

こんばんは!キリンです。
今ドラマ見てたら良いセリフ聞きました。
単調な仕事をする町工場に社員として働き出した新社会人
先輩社員からこう言われます。
「周り見てて、こういう大人(町工場の大人たち)になるんだなって思ってたんだろう?」
「誰だってそう思うときがあるさ」
「安定した生活が一番さ」
「いや、違うな。ただ身ひとつでチャレンジするのが怖かっただけだ」
その後、もどかしさを感じた主人公は、辞表を提出しました。
「自分にあった仕事やりたくて・・・でも何があってるか分からないんですよね」
帝王ってドラマです・・・。
この主人公は色々あって「ホスト」になるみたいです。
このドラマを見てしまってた理由なのですが、なによりセリフがいいです。
その人のモチーフになった人が書いた本がこちら。
帝王の書/輝咲 翔

¥1,050
Amazon.co.jp
読んでみたいなぁと思った次第。
さっき買ってみました。
何もできなかった主人公が全力でホストの仕事に取り組んで成功していく本だそうです。
「ぜってー負けねぇ。」
なんかドラマ見てしまいそうです。
「帝王」がホストなら、「ミナミの帝王」もホストなんですかね・・・?
前書きが長くなっちゃいましたね。

いつも参考にさせてもらってます。
少し迷っていることがありまして
http://www.abysse.co.jp/mt4/indicators/High_Low%20v2%20(ZigZag)2.mq4
このラインの出るタイミングを解析中なのですがなかなかわかりません、ご指導お願いします。

というコメントを頂いたので、早速確認してみました。
1.バッファの確認
こういうときにまず確認するのが、
実際にグラフに表示される配列が何なのかを調べます。
今回のプログラムで言うと
SetIndexBuffer(0,ExtMapBuffer1);
この部分ですね。
2.バッファの計算をたどる
1でグラフに当てられた配列がExtMapBuffer1であることが分かりました。
その計算を追っていきます。
ExtMapBuffer1[mv]=Uzel[i][2];
こんな計算式が見つかりました。
どうやらこのグラフの計算するときの肝は
Uzel[i][2]
のようです。
次はUzelをたどっていきましょう。
if (Swing!=Swing_n && Swing_n!=0) {
if (Swing==2) {
Swing=-Swing_n;BH = High[shift];BL = Low[shift];
}
uzl=uzl+1;
if (Swing==1) {
Uzel[uzl][1]=zd;
Uzel[uzl][2]=BL;
}
if (Swing==-1) {
Uzel[uzl][1]=zu;
Uzel[uzl][2]=BH;
}
BH = High[shift];
BL = Low[shift];
}
ここでUzelに値が割り当てられてます。
ifの中でSwingという変数が頻出しています。
多分プログラムの肝なのでしょう。
さらにUzel割り当てられているものをたどると、

zd, BL
zu, BH

このあたりが重要なようです。
それに着目してみていきます。

if (Low[shift] < LL && High[shift] > HH){
Swing=2;
if (Swing_n==1) {zu=shift+1;}
if (Swing_n==-1) {zd=shift+1;}
} else {
if (Low[shift] < LL) {Swing=-1;}
if (High[shift]>HH) {Swing=1;}
}

ここ重要です。
この部分が主要ロジック部ですね
for (i=shift+Length;i > =shift+1;i–) {
if (Low[i]< LL) {LL=Low[i];}
if (High[i]>HH) {HH=High[i];}
}
LLとHHというのはここの計算で、Lengthの期間の最安値最高値を求めたその結果です。
さらに、LLやHHが更新されなければそのままの値をキープします。
それを踏まえたうえで見ていきましょう。
if (Low[shift] < LL && High[shift]>HH){
Swing=2;
if (Swing_n==1) {zu=shift+1;}
if (Swing_n==-1) {zd=shift+1;}
} else {
if (Low[shift]<ll) {Swing=-1;}
if (High[shift]>HH) {Swing=1;}
}
この部分で安値・高値の更新があったかを確認しています。
高値の更新があった場合は、Swingの値を1, -1, 2にして、
Swing_nの値によって、zuとzdの値を定め、
if (Swing!=Swing_n && Swing_n!=0) {
if (Swing==2) {
Swing=-Swing_n;BH = High[shift];BL = Low[shift];
}
uzl=uzl+1;
if (Swing==1) {
Uzel[uzl][1]=zd;
Uzel[uzl][2]=BL;
}
if (Swing==-1) {
Uzel[uzl][1]=zu;
Uzel[uzl][2]=BH;
}
BH = High[shift];
BL = Low[shift];
}
この条件文でBLとBHに値を割り振ります。
(Swing==2のif分の中でのBLとBHの計算いらないと思うんだよなぁ…)
これが実際にグラフを描写しているところ。
さて、次。
高値・安値が更新されたSwing==1,-1,2のときにBHやBLの値が変わるのは分かりました。
ここで気をつけていただきたいのが、Swing!=Swing_nのときのみ、
Uzelに値が割り振られているという点です。
Swing_nというのは、ひとつ前のローソク足でのSwingなので、
Swingの向きが変わったときのみ描写するということですね。
これが質問してくださった方への回答となります。
さらに続けます。
このプログラムの分かりにくいところは、
for文の中でそれぞれのローソク足のグラフの値を計算している点ではないところですね。
Uzel[uzl][1]=zd;
Uzel[uzl][2]=BL;
zdがローソク足の場所を表し、BLがそのローソク足のグラフの値をあらわします。
if (Low[shift] < LL && High[shift]>HH){
Swing=2;
if (Swing_n==1) {zu=shift+1;}
if (Swing_n==-1) {zd=shift+1;}
} else {
if (Low[shift]<ll) {Swing=-1;}
if (High[shift]>HH) {Swing=1;}
}
ここのelse分でSwingの値が割り振られ、Swingの値によって計算を進めていきます。
なんかここも分かりにくい・・・
if (Swing==1) {
if (High[shift]>=BH) {BH=High[shift];zu=shift;}}
if (Swing==-1) {
if (Low[shift] < =BL) {BL=Low[shift]; zd=shift;}}
Swing_n=Swing;
}
ここの文章なんですけど、分かりやすく書くと
if (Swing==1) {
  if (High[shift]>=BH) {
    BH=High[shift];zu=shift;
  }
}
if (Swing==-1) {
  if (Low[shift] < =BL) {
    BL=Low[shift]; zd=shift;
  }
}
こうですね。
ここでSwingの値によってBHとBLの値が割り振られます。
Swing_n=Swingという式がfor文の最後にあることから、
Swingの値をフィードバックさせているみたいですね。
そして、
if (Swing!=Swing_n && Swing_n!=0) {
ここで、Swingの値に変化があったときにだけ、グラフを書くようにする・・・
すっごく要約します。
読むのここだけでいいかもしれません。

Lengthの期間の間で高値・安値の更新が確認されたときに、
Swing!=Swing_nになっていれば新しい線を引きます。
同一方向への更新のみ(Swing==Swing_n)であれば、
ひとつ前の点を削除し上書きさせ、Swing!=Swing_nになるまで待ちます。
最後までお読みくださりありがとうございます。
頑張って書いてきましたが、かなり難しい内容に仕上がってしまいました。
精進します・・・。

にほんブログ村 為替ブログへ 
Fx-Kirin

About Fx-Kirin

2009年10月にFXを開始、翌年2010年5月から脱サラをしてFX業界に専念。 2012年10月頃から本格的に勝ち始め、一月で資産を倍にする、2年半月間負けなし等、安定した収支で2013年11月に生涯FX収支が1億を超える。 投資スタイルはシステムトレード。プログラミングの知識がほぼない状態から、独学で自分がしたいと思うことであればほぼ実現することが可能なレベルまで成長。好きな言語はRuby, Python。必要となればC++からVBA、Pascal等なんでも行う。MT4/MT5のプログラミングも得意。 2011年にはFXで稼いだ資金をもとにシンガポールに移住し、留学も兼ねて起業をチャレンジするほど、ビジネスを興すことに熱意がある。国内の業者を主に使い始めたことから、2012年に帰国。零細株式会社経営中。

Adsense

  • このエントリーをはてなブックマークに追加
  • Pocket
  • 63 follow us in feedly

関連記事

no image

【ブレイク対策完了】1年で資産5倍に。

ちょっと前にアップロードしたEAですが、 改良を加え、ブレイク対策をほどこしたところ ロット数1で、 資産5倍にすること

記事を読む

no image

ねっとさーふいん中に見つけたMT4プログラミングセミナー

おはようございます。キリンです。 MT4プログラミングで検索して僕のサイトに来てくれる人が多いです。 嬉しい限りです。

記事を読む

no image

メタトレーダー4

今回は、自動取引プログラム(通称EA)を作成可能な無料ソフト 「メタトレーダー4」 の紹介です。 メタトレーダーとは、

記事を読む

no image

初記事

さくらでVPSを契約したので、ついでにサーバを構築してみた。案外快適?まだまだ使い勝手わからないので頑張ってみる。に

記事を読む

no image

Sakura VPS Ubuntu 12.04 に Ruby on rails と PHP、 メールサーバ構築までまとめてみる。 その6

結構長くなっちゃう。あとはRuby on Railsのインストールぐらいだね。頑張っていこー。 Rubyのインストール

記事を読む

no image

11/11, 11/12 運用履歴

<colgroup> </colgroup>バイナリオプション日付曜日取引

記事を読む

no image

【作業メモ】C++ Win32 DLL を Ruby から呼ぶ

参考にしたサイトはここhttp://infosc.blog104.fc2.com/blog-entry-3.html

記事を読む

no image

プログラミング講座用 ネタ募集

おはようございます!キリンです。 といっても寝てないんですが、そのあたりは気にしない(w さて、プログラミング講座なんで

記事を読む

no image

安値ベース下位線・高値ベース上位線のボリンジャーバンド作成

お久しぶりです。キリンです。 新しく作成したインジケータのご紹介です。 ボリンジャーバンドの上位線はすべて高値ベースで算

記事を読む

no image

【コラム】良いEAを見つけるには?

お久しぶりです!キリンです。 超直感プログラミング講座も、 当初の目的であるEA作成にまで何とかこぎつけることができまし

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Adsense

Python 2, Python 3 で更新したファイルを調べてreloadするパッケージを作った。

pdbでのデバッグにはreload機能がない IPythonには優秀なautorelaod機能

Python での Log 収集

プロジェクトが大きくなるにつれて、プログラムの不備を見つけるのにログの構成、ログデザインを考える

Flast-Sockets + redis-py で簡単 Websocket サーバー実装

参考にしたサイト Using WebSockets on Heroku with Python

Rust で Python の拡張ライブラリ作成 と numpy との性能比較

この記事は Python Advent Calendar 5日目の記事です。遅れてすみません。

システムトレードを始める前に知っておきたかったこと

今日の勉強会で発表してきました。nbviewer に共有しておきます。 システムトレードを始め

→もっと見る

PAGE TOP ↑