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
  • 68 follow us in feedly

関連記事

no image

11/10 運用結果

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

記事を読む

no image

メンターとかメンターとか・・・・・

正直、メンターって 「あなたが私のメンターです!」 っていうの間違ってると思うんですよね。 メンターっていうのは結果論の

記事を読む

no image

【default.tpl】劇的☆Before After ・・・MT4チャートの初期設定を保存

おはようございます。キリンです。 今日は匠の技を紹介したいと思います。 MT4の標準状態でのチャートって、 蛍光色の緑と

記事を読む

no image

初記事

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

記事を読む

no image

チャートの有用性

ちょっと内容が複雑になってきて、 短文ではまとめられなくなってきました。 んー、それでも頑張って書いてみます。 今回のお

記事を読む

no image

Android Widget の開発にてEclipseでデバッグするには・・・

How To Debug Android Widgets通常のAndroid Appではeclipseの虫ボタンを押

記事を読む

no image

7bit氏作成 MQLライブラリー解析 part13

こんばんは。キリンです。 今日ご紹介するのは、予約注文の変更を簡単にするものです。 moveStopのみ、stop

記事を読む

no image

スワップをイスラミックを使って儲けようと考えている方へ。

今気づいたけど、為替ブログ語りながらFXタグがなかった・・・。話は代わり、本題。さっき見つけたんですが、これは読んで

記事を読む

no image

Ruby で エクセル用のCSVを作るには・・・。

各要素の文字コードをShift-Jisにする。require 'kconv'で、.tosjisを使う。賢い方法ではない

記事を読む

no image

Windows環境ではRuby1.9.3にはruby-debug19が入らない?

Ruby1.9.2でやればすんなりと出来ました。RadRails上でのデバッグもバッチリ。1.DevKitを入れる2

記事を読む

Message

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

Adsense

joblib によって謎のバグが起こる

joblib 0.14.1 にて確認.0.13.2 だと起こらない.import joblib を消

Fixing kernel error AMD-Vi: Event logged IO_PAGE_FAULT on Ryzen Machine

My pc was periodically shut down on 7:40 am JS

Ubuntu で仮想ディスプレイを使う

雑多な備忘録ですが、せっかくなので残しておきます。 Ubuntu 18.04 の resolv.c

PYPIへの登録を10秒でできるようになる方法

pip 使ってますよね Pythonを使っている人であれば、pip installでライブラリ

The art of debugging with GDB, DDD, and Eclipse の読書メモ

GDBの勉強がしたくて、下の本を原著で読んでみました。10年前の本だけど全然現役でした。

→もっと見る

PAGE TOP ↑