ピンバーでサインを出す

 ピンバー(Pin Bar)とは、以下の図に示すように、足の実体が短いのに対して、ヒゲが長い足のことをいいます。

Explantion of Pin-Bar
ピンバー

 このようなピンバーが、相場が継続的に上昇下降した後に出現すると、そこが相場の転換点になる場合が多くあります。

 そこで、以下では、一定の条件を満たしたピンバーが出現した場合に、チャート上にサインを出すインジケーター(Pin-Bar Sign.mq4)の作成方法について解説します。

  1. 全体像
  2. #property命令の記述
  3. インジケーターバッファーの宣言
  4. 変数の宣言
  5. 関数の定義
  6. 基本設定の記述
  7. 具体的な処理内容
  8. 関連ツール
  9. 関連書籍
Pin-Bar Sign
Pin-Bar Sign

1.全体像

 MT4でインジケーターを作成するには、以下の手順に従ってプログラムを書いていくことになります。

  1. #property命令を記述する。
  2. インジケーターバッファーの宣言を行う。
  3. 変数の宣言を行う。
  4. 関数の定義を行う。
  5. init()関数内にインジケーターの基本的な設定を記述する。
  6. start()関数内に具体的な処理内容を記述する。

 具体的には、以下のようになります。

Download (PDF, 699KB)

>>目次に戻る

2.#property命令の記述

 #property命令とは、インジケーターの色、ラインの太さ、インジケーターを表示する場所などの、プログラム全体にかかわる設定を行うものです。

 #property命令の詳細については「こちら」を参照してください。

 「Pin-Bar Sign.mq4」における、#property命令を記述した部分の解釈を示すと、以下のようになります。

#property
#property命令

⑴ チャートウィンドウに表示させる

 #property indicator_chart_window命令によって、「Pin-Bar Sign.mq4」は、チャートウィンドウに表示されます。

⑵ 2種類のデータを表示させる

 「Pin-Bar Sign.mq4」では、以下の2つのデータを表示させます。

  • 買いのピンバーが出現したことを表す上矢印
  • 売りのピンバーが出現したことを表す下矢印

 したがって、#property indicator_buffers命令には、「」を指定します。

⑶ 色を指定する

 「Pin-Bar Sign.mq4」で表示される2つのデータの表示色を指定します。

  • #property indicator_color1 Magenta
    1番目のインジケーターとして買いのピンバーの出現を示す上矢印を指定する(後述)ので、#property indicator_color命令には「」を指定し、表示色を「Magenta」に指定しています。
  • #property indicator_color2 Aqua
    2番目のインジケーターとして売りのピンバーの出現を示す下矢印を指定する(後述)ので、#property indicator_color命令には「」を指定し、表示色を「Aqua」に指定しています。

>>目次に戻る

3.インジケーターバッファーの宣言

 インジケーターバッファーとは、インジケーターの計算に使用するデータを格納しておく配列のことをいいます。

 インジケーターバッファーの詳細については「こちら」を参照してください。

 「Pin-Bar Sign.mq4」における、インジケーターバッファーを宣言した部分の解釈を示すと、以下のようになります。

Indicator Buffer
インジケーターバッファーの宣言

⑴ double Arrow_Up[];

 上矢印の値を格納していく配列です。

⑵ double Arrow_Down[];

 下矢印の値を格納していく配列です。

⑶ double Real_Body[];

ローソク足の実体の値を格納していく配列です。

⑷ double Upper_Shadow[];

 上ヒゲの値を格納していく配列です。

⑸ double Lower_Shadow[];

 下ヒゲの値を格納していく配列です。

>>目次に戻る

4.変数の宣言

 「変数」の詳細については「こちら」を参照してください。

 「Pin-Bar Sign.mq4」においては、以下の項目をパラメーターとして指定します。

  • 現在の足の高値が、過去の一定期間における最高値より上にブレイクしたかどうか
  • 現在の足の安値が、過去の一定期間における最安値より下にブレイクしたかどうか
  • 上(下)ヒゲが、ローソク足の実体の何倍以上あることを要するか
  • 上(下)ヒゲが、何pips以上あることを要するか

 上記の項目は、インジケーターをチャートに適用した際に任意の値に設定することができるようにするため、以下に示すように「外部変数」(詳細については「こちら」を参照してください。)として宣言します。

  • extern int Highest_Period
    現在の足の高値が、高値ブレイクしたかどうかの判定期間
  • extern int Lowest_Period
    現在の足の安値が、安値ブレイクしたかどうかの判定期間
  • extern int Magnification
    ピンバーと認められる上(下)ヒゲの長さを判定するための、ローソク足の実体の長さに対する掛け率
  • extern int Minimum_Length
    上(下)ヒゲの最低限の長さ(単位:pips)

>>目次に戻る

5.関数の定義

 「Pin-Bar Sign.mq4」では、ピンバーと認められるかどうかを判定するために、上(下)ヒゲの最低限の長さをpips単位でパラメーターとして設定できるようにしています。

 そこで、「Pin-Bar Sign.mq4」では、AdjustPoint()関数を定義しています。

 AdjustPoint()関数の詳細については「こちら」を参照してください。

>>目次に戻る

6.基本設定の記述

 「Pin-Bar Sign.mq4」におけるinit()関数内に記述したコードについて解説します。

init function
基本設定の記述

⑴ IndicatorBuffers()とは

 IndicatorBuffers()は、MQL4であらかじめ定義されている関数で、インジケーターの計算に使用するバッファーの個数を指定するものです。

 IndicatorBuffers()関数の詳細については「こちら」を参照してください。

⑵ SetIndexBuffer()とは

 setIndexBuffer()とは、MQL4であらかじめ定義されている関数で、各インジケーターバッファーを、インジケーターバッファー領域(データを一時的に蓄えるデータ領域)に割り当てるものです。

 SetIndexBuffer()関数の詳細については「こちら」を参照してください。

⑶ SetIndexLabel()とは

 SetIndexLabel()とは、MQL4であらかじめ定義されている関数で、データウィンドウにインジケーターの描画線の説明を表示させるものです。

 SetIndexLabel()関数の詳細については「こちら」を参照してください。

⑷ SetIndexStyle()及びSetIndexArrow()とは

 SetIndexStyle()とは、MQL4であらかじめ定義されている関数で、インジケーターの描画スタイル(線orヒストグラム、色など)を設定するものです。

 SetIndexStyle()関数の詳細については「こちら」を参照してください。

 SetIndexArrow()とは、MQL4であらかじめ定義されている関数で、インジケーターに記号を表示させるものです。

 SetIndexArrow()関数の詳細については「こちら」を参照してください。

⑸ PointとPipsの調整とは

 「Pin-Bar Sign.mq4」は、一定の条件を満たしたピンバーの安(高)値の1pips下(上)に上(下)矢印を描画させます。

 また、ピンバーと認められるための、最低限の上(下)ヒゲの長さをpips単位で設定します。

 そこで、提示レートの小数点以下の桁数が「3」又は「5」桁の業者においても、定義済み変数「Point」(詳細は「こちら」を参照してください。)で取得される値に「10」を掛けるという処理を行うことなく、pips単位で矢印の描画位置や最低限のヒゲの長さを指定できるように、AdjustPoint()関数(詳細は「こちら」を参照してください。)を用いています。

>>目次に戻る

7.具体的な処理内容

 「Pin-Bar Sign.mq4」のstart()関数内に記述したコードについて解説します。

Download (PDF, 304KB)

⑴ int limit=……について

 「limit」という変数を、「Bars-IndicatorCounted()」を初期値として宣言しています。

 当該コードの詳細については「こちら」を参照してください。

⑵ 最低計算期間の設定

 「Pin-Bar Sign.mq4」は、現在の足の高(安)値が、一定期間の最高(安)値をブレイクしたかどうかどうかを判定して矢印を表示させるようにしているので、一定期間分のバーがチャートウィンドウ上に存在しない場合には、インジケーターを稼働させる意味がありません

 そこで、チャートウィンドウ上のバーの本数が、パラメーターとして設定したHighest_Period若しくはLowest_Periodの数値よりも少ない場合には、以降の計算が行われないようにしています。

  • Barsの詳細については「こちら」を参照してください。

⑶ 実体の計算

ア 始値と終値の差を算出する

 ローソク足の実体とは、以下の部分を指します。

Real Body
ローソク足の実体

 したがって、ローソク足の実体の長さは、「始値と終値の差」として算出されます。

 ただし、単純にローソク足の長さを「始値-終値」としてコードを記述してしまうと、バーが陰線であれば当該値はの値となりますが、バーが陽線であれば当該値はの値となります

 そして、バーがピンバーかどうかを判定する際に問題とするローソク足の実体の長さの値は、正負は問題となりません

 そこで、「Pin-Bar Sign.mq4」においては、MathAbs()関数(詳細は「こちら」を参照してください。)を使用して、「始値と終値の差の絶対値を算出し、ローソク足の実体の長さを取得するようにしています。

イ 十字線等の場合の対応

 ローソク足の実体の長さは、「始値と終値の差の絶対値」として算出されますが、始値と終値の値が等しい十字線や同時線の場合は、当該値はとして算出されます。

 しかし、「Pin-Bar Sign.mq4」においては、バーがピンバーかどうかを判定する際に、上ヒゲがローソク足の実体の何倍以上あるかを条件として設定しています。

 そうすると、上記アの部分のコードのみであれば、バーが十字線や同時線の場合には、上(下)ヒゲが十分に長く形成されていたとしても、当該バーはピンバーとは判定されないということになります。

 そこで、「Pin-Bar Sign.mq4」においては、「始値と終値の差の絶対値であった場合には、ローソク足の実体が1pipsあるものと設定しています。

⑷ 上ヒゲの計算

 ローソク足の上ヒゲとは、以下の部分を指します。

Upper-Shadow
ローソク足の上ヒゲ

 したがって、ローソク足の上ヒゲの長さは、以下のようにして算出されます。

  • 陽線の場合
    高値-終値
    (この値は「高値-始値」よりも小さい(上図参照)。)
  • 陰線の場合
    高値-始値
    (この値は「高値-終値」よりも小さい(上図参照)。)

 つまり、ローソク足の上ヒゲの長さは、陽線・陰線を問わず、

高値-始値の値と高値-終値の値の小さい方

ということになります。

 そこで、「Pin-Bar Sign.mq4」においては、MathMin()関数(詳細は「こちら」を参照してください。)を使用して、「高値-始値の値と高値-終値の値を比較し、小さい方の値をローソク足の上ヒゲの長さとして取得するようにしています。

⑸ 下ヒゲの計算

 ローソク足の下ヒゲとは、以下の部分を指します。

Lower-Shadow
ローソク足の下ヒゲ

 したがって、ローソク足の下ヒゲの長さは、以下のようにして算出されます。

  • 陽線の場合
    始値-安値
    (この値は「終値-安値」よりも小さい(上図参照)。)
  • 陰線の場合
    終値-安値
    (この値は「始値-安値」よりも小さい(上図参照)。)

 つまり、ローソク足の下ヒゲの長さは、陽線・陰線を問わず、

始値-安値の値と終値-安値の値の小さい方

ということになります。

 そこで、「Pin-Bar Sign.mq4」においては、MathMin()関数(詳細は「こちら」を参照してください。)を使用して、「始値-安値の値と終値-安値の値を比較し、小さい方の値をローソク足の下ヒゲの長さとして取得するようにしています。

⑹ 矢印の設定

ア 上矢印の設定

 買いのピンバーが出現した場合に上矢印を表示させる部分のコードの解釈を、以下に示します。


if(
//もし、

Real_Body[i] * Magnification <= Lower_Shadow[i] &&
//下ヒゲの長さが「実体×掛け率」以上で、かつ、

Minimum_Length * Adjusted_Point <= Lower_Shadow[i] &&
/*下ヒゲの長さがピンバーと認められる最低限の長さ以上で、かつ、*/

Low[i] < Low[iLowest(NULL,0,MODE_LOW,Lowest_Period,i+1)])
/*安値が「Lowest_Period」で設定した期間の最安値よりも安かったら*/

{
 Arrow_Up[i] = Low[i] – Adjusted_Point;
 //上矢印を安値よりも1Pips下に表示させる
}
  • iLowest()関数の詳細については「こちら」を参照してください。
イ 下矢印の設定

 売りのピンバーが出現した場合に下矢印を表示させる部分のコードの解釈を、以下に示します。


if(
//もし、

Real_Body[i] * Magnification <= Lower_Shadow[i] &&
//下ヒゲの長さが「実体×掛け率」以上で、かつ、

Minimum_Length * Adjusted_Point <= Lower_Shadow[i] &&
/*下ヒゲの長さがピンバーと認められる最低限の長さ以上で、かつ、*/

Low[i] < Low[iLowest(NULL,0,MODE_LOW,Lowest_Period,i+1)])
/*安値が「Lowest_Period」で設定した期間の最安値よりも安かったら*/

{
 Arrow_Up[i] = Low[i] – Adjusted_Point;
 //上矢印を安値よりも1Pips下に表示させる
}
  • iHighest()関数の詳細については「こちら」を参照してください。

>>目次に戻る

8.関連ツール

プライスアクション(ローソク足)を利用した発注サポートツール。利益確保後のトレーリング。
プライスアクション発注くん
プライスアクション発注くん | fx-on.com

プライスアクション発注くん
プライスアクション発注くん | fx-on.com

 上記EA(プライスアクション発注くんプライスアクション発注くん | fx-on.com)の詳細については「こちらプライスアクション発注くん | fx-on.com」を参照してください。

>>目次に戻る

9.関連書籍

プライスアクション完全制覇 18のチャートパターンの方程式
プライスアクション完全制覇 18のチャートパターンの方程式
プライスアクション完全制覇 18のチャートパターンの方程式 | fx-on.com

プライスアクション完全制覇 18のチャートパターンの方程式
プライスアクション完全制覇 18のチャートパターンの方程式 | fx-on.com

 上記書籍(プライスアクション完全制覇 18のチャートパターンの方程式プライスアクション完全制覇 18のチャートパターンの方程式 | fx-on.com)の詳細については「こちらプライスアクション完全制覇 18のチャートパターンの方程式 | fx-on.com」を参照してください。

FXで勝ち続ける為の本物の技術をあなたに
Dealing FX ~プライスアクショントレードマニュアル~
Dealing FX ~プライスアクショントレードマニュアル~ | fx-on.com

Dealing FX ~プライスアクショントレードマニュアル~
Dealing FX ~プライスアクショントレードマニュアル~ | fx-on.com

 上記書籍(Dealing FX ~プライスアクショントレードマニュアル~Dealing FX ~プライスアクショントレードマニュアル~ | fx-on.com)の詳細については「こちらDealing FX ~プライスアクショントレードマニュアル~ | fx-on.com」を参照してください。

プライスアクションにはワケがあります。
プライスアクション・マスター
プライスアクション・マスター | fx-on.com

プライスアクション・マスター
プライスアクション・マスター | fx-on.com

 上記書籍(プライスアクション・マスタープライスアクション・マスター | fx-on.com)の詳細については「こちらプライスアクション・マスター | fx-on.com」を参照してください。

遂に完結!驚くほど簡単シリーズ最高傑作 簡単さの先にある更なる簡単さ しかも超パワフル
不動のプライスアクション
不動のプライスアクション | fx-on.com

不動のプライスアクション
不動のプライスアクション | fx-on.com

 上記書籍(不動のプライスアクション不動のプライスアクション | fx-on.com)の詳細については「こちら不動のプライスアクション | fx-on.com」を参照してください。

>>Amazonで購入する

>>Amazonで購入する

>>目次に戻る


MT4の使い方からプログラミングまで、わかりやすく解説