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

関連記事

no image

Mysqlの外部からの接続

mysqlは、ポート開放、ユーザ権限の拡張以外に、skip-networking, bind-addressを無効に

記事を読む

no image

EAで取得したポジションの手動決済の際の注意

こんばんは。キリンです。 私どものEAに限らず、EAによるポジションを手動で決済すると 即別の注文が入ってしまうことが多

記事を読む

no image

最小二乗法を用いたトレンドラインのアレンジ版の作成

自分でいうのもなんですが、かなり使えると思います。 私の知っているトレンドラインを自動で引くものの中では 一番精度がいい

記事を読む

no image

Bluetoothデバイスの設定で画面が真っ白、白画面になり設定できない

komadoとかair displayのandroidへのデスクトップ延長アプリが悪さをしている可能性大・・

記事を読む

no image

成功を収めた社長のセミナー

皆さん、お疲れ様です。 FX関連のブログとして停滞気味ですね。 「こういうの書いて!」とか 「この方向性は嫌だ!」みたい

記事を読む

no image

MT4でtemplatesを利用して定型チャートを保存する

こんばんは。キリンです。 Yahoo!知恵袋の質問にあったので取り上げさせていただきました。 いまさら感はありますがせっ

記事を読む

no image

今日は門出の日!

こんばんは。キリンです。 まず、非常に個人的な日記になることをお詫びさせていただきます。 今日は僕にとって区切りの日なん

記事を読む

no image

【日記】ブログの方向性

こんばんは。キリンです。 超直感!プログラミング口座も、気づいたらEA製作までこぎつけて来れまして、 それほど初心者向け

記事を読む

no image

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

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

記事を読む

no image

Add Alert and SendMailの改造

おはようございます。キリンです。 最近22時に寝ているので朝が早いです。 では、本題。先日公開した、 任意のインジ

記事を読む

Message

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

Adsense

JupyterでボタンからJavascriptを実行して追加のアウトプットをさせない方法

Javascriptを実行するとアウトプットセルの行が増える これがとても面倒だった。上の

まだBokehで消耗してるの?これからはPandas-Bokehを使おうぜ

タイトルはあまり気にしないでください。全然、Bokehで消耗する価値があるとは思っています。ただ

SQLAlchemy のマイグレーションライブラリ Alembic を使ってみる。

SQLAlchemyの作者が作ったデータベースマイグレーションツール。個人的には、SQLAlch

Avoiding the problem of connect to outside of LAN with L2TP/IPSec on Ubuntu 18.04.

とても困って、原因の特定に2日かかった。疲れた。確定申告したいのに。 The IPSEC tu

Wine 上の MT4から ZeroMQ を使って Linux の pyzmq の通信をさせる

こんにちは。キリンです。 最近、年に数度のMQLを書くときがきたのですが、Pythonに慣れま

→もっと見る

PAGE TOP ↑