2015年9月18日金曜日

[MT4インジケータ]9/17の周期解析

■9/17の周期解析とCycleCancelEMA
Cycle20150918.PNG

FOMCは事前の予想通り?利上げ見送りとなりましたね。
見送りに従いドル安となり、EURUSDは上昇をしました。このようなイベント事には周期解析はあまり役に立ちません。FOMCの内容が伝わり始めて価格が上昇しきった後に買いシグナル、その後売りシグナルを出しています。ただし、その前の気迷い相場の段階では、今回はほぼ100%価格転換点を当てることができました。

なお、周期解析的にはFOMC前に周期の崩れ(クロスを経由せずに方向が転換している)が発生して周期解析が外れ始めていることを示しています。チャートだけみていると、ここで売り追従ですが、さすがにFOMCの結果を見ることなく仕掛けるのは怖いです。

EAではなかなか判断が難しい裁量トレードによる強みかと思います。EAでやるならFOMC前には取引しないフィルターを組み込みますねー。余談ですがFOMC日程は計算で求めることは不可能です。なんとなくは決まっていますが国際会議の都合上などでよくずれます。

価格の行き過ぎ、トレンド、周期を確認して相場を制するセット
予測移動平均ボリンジャーバンド、トレンド強度相関、周期分析セット
予測移動平均ボリンジャーバンド、トレンド強度相関、周期分析セット | fx-on.com


MQL5のページが日本語化している????

あれ?
いつの間にかMQL5のページが日本語化している・・・・?
https://www.mql5.com/ja

調べてみると8月くらいからコミュニティに対して翻訳手伝ってくれない?ってお願いがあったようですね。
現状、まず日本でMQL5をベースとするMT5が全く使われていないため、あまり出番がないかもしれませんが・・・。
MT4の業者さんに対してMT5のライセンス料を引き下げるとか努力しないとはやらないのではないかなぁ・・<MT5

ともあれ、MT4向けのプログラムを作成する際、現状MQL5の仕様を一部取り込んでいる部分があるため、日本語化は歓迎です。

[MT4インジケータ&プログラミング]上位時間足を表示するカラフルなボリンジャーバンド

状況に応じて色が変わるボリンジャーバンド他の時間足ボリンジャーバンドを表示する。まで作成したので、これを合体させた、状況に応じて色が変わる他の時間足のボリンジャーバンドを作成してみます。

colorfulMTBB.PNG

状況に応じて色が変わるボリンジャーバンドと同じく、
移動平均:下げ=赤 上げ=青
ボリンジャーバンド:拡大=紫、縮小=ピンク
で表現しています。

ソースコードは基本的には、上記二つの記事を合成したコードとなります。
ラインの途切れをなくすために+1のフィールドも値を入れていますが、これを今と同じ値を入れるのか、表示している時間足の1本前の値を入れるのかを切り替える必要があります。

次回は、これに、アラートとして音が鳴る機能とメールを送信する機能を追加したいと思います。なお、追加おわりましたらコンパイルが面倒な方向けにFX-ON様にアップいたします。
あ、後細かい所ですが、せっかくですので中心線のデフォルトをEMAにしてみました。SMAだとMT4と同じだしっと思い^^;;

��追記)
こーやってボリンジャーバンドを収束・拡散で色分けすると、移動平均関係のシグナルより価格の収束のほうが先行して始まっていますね・・・。見た目上のイメージですが何かに利用できるような予感がします・・。

//------------------------------------------------------------------
// 色が変わるボリンジャーバンド 上位時間足版
#property copyright "Copyright 2015,  Daisuke"
#property link      "http://mt4program.blogspot.jp/"
#property version   "1.00"
#property strict
#property indicator_chart_window

//バッファーを指定する。
#property indicator_buffers 10

//プロット数を指定する。
#property indicator_plots   10

#property indicator_label1  "CenterUp"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrAqua
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

#property indicator_label2  "HIGH1UP"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrSlateBlue
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

#property indicator_label3  "HIGH2UP"
#property indicator_type3   DRAW_LINE
#property indicator_color3  clrSlateBlue
#property indicator_style3  STYLE_SOLID
#property indicator_width3  1

#property indicator_label4  "LOW1UP"
#property indicator_type4   DRAW_LINE
#property indicator_color4  clrSlateBlue
#property indicator_style4  STYLE_SOLID
#property indicator_width4  1

#property indicator_label5  "LOW2UP"
#property indicator_type5   DRAW_LINE
#property indicator_color5  clrSlateBlue
#property indicator_style5  STYLE_SOLID
#property indicator_width5  1

#property indicator_label6  "CenterDown"
#property indicator_type6   DRAW_LINE
#property indicator_color6  clrIndianRed
#property indicator_style6  STYLE_SOLID
#property indicator_width6  1

#property indicator_label7  "HIGH1DOWN"
#property indicator_type7   DRAW_LINE
#property indicator_color7  clrWheat
#property indicator_style7  STYLE_SOLID
#property indicator_width7  1

#property indicator_label8  "HIGH2DOWN"
#property indicator_type8   DRAW_LINE
#property indicator_color8  clrWheat
#property indicator_style8  STYLE_SOLID
#property indicator_width8  1

#property indicator_label9  "LOW1DOWN"
#property indicator_type9   DRAW_LINE
#property indicator_color9  clrWheat
#property indicator_style9  STYLE_SOLID
#property indicator_width9  1

#property indicator_label10  "LOW2DOWN"
#property indicator_type10   DRAW_LINE
#property indicator_color10  clrWheat
#property indicator_style10  STYLE_SOLID
#property indicator_width10  1

// 対象タイムフレーム
extern ENUM_TIMEFRAMES TargetPeriod = PERIOD_H4;

// 入力パラメータ 移動平均期間
extern int MaPeriod = 21;

//入力パラメータ 表示移動
extern int   MaShift = 0;

//入力パラメータ 移動平均種別
extern ENUM_MA_METHOD MaMethod = MODE_EMA;

//入力パラメータ 適用価格
extern ENUM_APPLIED_PRICE MaPrice = PRICE_MEDIAN;

//標準偏差期間
extern int StdPeriod = 21;

//標準偏差算出方法
extern ENUM_MA_METHOD StdMethod = MODE_SMA;

//σ1
extern double Sigma1 = 1;

//σ2
extern double Sigma2 = 2;

double centerUp[];
double high1Up[];
double high2Up[];
double low1Up[];
double low2Up[];

double centerDown[];
double high1Down[];
double high2Down[];
double low1Down[];
double low2Down[];

//------------------------------------------------------------------
//初期化
int OnInit()
{
//インジケーターバッファを初期化する。
SetIndexBuffer(0,centerUp);
SetIndexBuffer(1,high1Up);
SetIndexBuffer(2,high2Up);
SetIndexBuffer(3,low1Up);
SetIndexBuffer(4,low2Up);
SetIndexBuffer(5,centerDown);
SetIndexBuffer(6,high1Down);
SetIndexBuffer(7,high2Down);
SetIndexBuffer(8,low1Down);
SetIndexBuffer(9,low2Down);
SetIndexDrawBegin(0, MaPeriod);
SetIndexDrawBegin(1, MaPeriod);
SetIndexDrawBegin(2, MaPeriod);
SetIndexDrawBegin(3, MaPeriod);
SetIndexDrawBegin(4, MaPeriod);
SetIndexDrawBegin(5, MaPeriod);
SetIndexDrawBegin(6, MaPeriod);
SetIndexDrawBegin(7, MaPeriod);
SetIndexDrawBegin(8, MaPeriod);
SetIndexDrawBegin(9, MaPeriod);

string short_name = "ClBB(" + IntegerToString(MaPeriod) + ")";
IndicatorShortName(short_name);

return(INIT_SUCCEEDED);
}


//------------------------------------------------------------------
//計算イベント
int OnCalculate(const int rates_total,          //各レート要素数
const int prev_calculated,      //計算済み要素数
const datetime &time[],         //要素ごとの時間配列
const double &open[],           //オープン価格配列
const double &high[],           //高値配列
const double &low[],            //安値配列
const double &close[],          //クローズ価格配列
const long &tick_volume[],      //ティック数(要素の更新回数)
const long &volume[],           //実ボリューム(?)
const int &spread[])            //スプレット
{
if( Period() > TargetPeriod ) return rates_total ;

for( int i = (rates_total - prev_calculated - 1); i >= 0 && !IsStopped(); i-- )
{
if( i >= rates_total - 2 ) continue;

int shift1 = iBarShift(NULL, TargetPeriod, time[i], false);
int shift2 = iBarShift(NULL, TargetPeriod, time[i + 1], false);

double ma1 = iMA(NULL, TargetPeriod, MaPeriod, 0, MaMethod, MaPrice, shift1);
double ma2 = iMA(NULL, TargetPeriod, MaPeriod, 0, MaMethod, MaPrice, shift1 + 1);

//ひとつ前の値は、表示している時間足の切り替えが発生したかどうかで変わる。
double minus1Center = shift1 == shift2 ? ma1 : ma2;

// 移動平均の方向によって値を設定するバッファーを変更する。
if( ma1 < ma2 )
{
centerDown[i] = ma1;
centerDown[i + 1] = minus1Center;
}
else
{
centerUp[i] = ma1;
centerUp[i + 1] =  minus1Center;
}

double std1 = iStdDev(NULL, TargetPeriod, StdPeriod, 0, StdMethod, MaPrice, shift1);
double std2 = iStdDev(NULL, TargetPeriod, StdPeriod, 0, StdMethod, MaPrice, shift1 + 1);

//ひとつ前の値は、表示している時間足の切り替えが発生したかどうかで変わる。
double minus1Std = shift1 == shift2 ? std1 : std2;


// 標準偏差の大きさによって値を入れるバッファを切り替える。
if( std1 < std2 )
{
high1Down[i] = ma1 + std1 * Sigma1;
high2Down[i] = ma1 + std1 * Sigma2;

low1Down[i] = ma1 - std1 * Sigma1;
low2Down[i] = ma1 - std1 * Sigma2;

high1Down[i + 1] = minus1Center + minus1Std * Sigma1;
high2Down[i + 1] = minus1Center + minus1Std * Sigma2;

low1Down[i + 1] = minus1Center - minus1Std * Sigma1;
low2Down[i + 1] = minus1Center - minus1Std * Sigma2;
}
else
{
high1Up[i] = ma1 + std1 * Sigma1;
high2Up[i] = ma1 + std1 * Sigma2;

low1Up[i] = ma1 - std1 * Sigma1;
low2Up[i] = ma1 - std1 * Sigma2;

high1Up[i + 1] = minus1Center + minus1Std * Sigma1;
high2Up[i + 1] = minus1Center + minus1Std * Sigma2;

low1Up[i + 1] = minus1Center - minus1Std * Sigma1;
low2Up[i + 1] = minus1Center - minus1Std * Sigma2;
}

}
return(rates_total - 1);
}


2015年9月17日木曜日

[MT4インジケータ]9/16の周期解析とCycleCancelEMA

■9/15~9/17の周期解析とCycleCancelEMA EURUSD 15分足
Cycle20150917.PNG

FOMC前の気迷い相場が周期解析にも表れています。このように周期解析通りに動いている場合、トレンド相場ではないため、トレンド見ての取引は有効ではありません。
周期解析の結果をみると実際の値動きが始まる前にシグナルを出していることが分かるかと思います。
このように値動きが始まる前に取引のタイミングが近い事を予想するのが周期解析の特徴となっています。

■9/2 EURUSD 15分足
Cycle20150917_TREND.PNG
トレンドが発生したときの周期解析です。
このように周期解析が全く役に立っていない状態になります。
特に青○と赤○の部分に着目します。青○は買いシグナルですが、そのあとクロスを経由せずに周期グラフが反転を始めます。そのあと周期解析は全くシグナルを出さない状態となります。
また、そのタイミングで、CycleCancelEMAも売りシグナルを出しています。

9/16のグラフと見比べて見てください。トレンド状態として手を出すべき時間と逆張りを狙う時間が明確にわかるかと思います。

価格の行き過ぎ、トレンド、周期を確認して相場を制するセット
予測移動平均ボリンジャーバンド、トレンド強度相関、周期分析セット
予測移動平均ボリンジャーバンド、トレンド強度相関、周期分析セット | fx-on.com


FX-ONブログランキングにご協力よろしくお願いいたしますm(_ _ )m

2015年9月16日水曜日

[MT4インジケータ]周期解析にCycleCancelEMAの追加


EMAのα値を状況に応じて可変させると何かが分かる?で紹介しました、周期解析によるα値が変化するEMAを「周期解析で価格変化を予想するオシレータ」の中にセットとして含めました。周期解析だけだと取引方向を決定できないので・・・。
こちらは私が今最も当てにしている移動平均です。これと周期解析を組み合わせることで取引方向も合わせて検討可能です。

■EURUSD 15M 2015.09.15 の周期解析とCycleCancelEMA
Cycle20150916.PNG
ちなみに昨日のEURUSD 15Mでのチャートはこんな感じです。指標発表前の気迷い相場時には周期解析が威力を発揮してます。私もバイナリオプションで少しだけおこずかい稼ぎをしていました。昨日は米小売売上高発表後に下げましたので、周期解析通りの値動きとなりました。このあたりは偶然です。周期解析はサプライズなイベントには弱い為です。ただし指標発表前にはみんなの期待が現れるため、取引シグナルを出すことが多いです。指標発表の結果を見てポジションを持ってって言っているのかと(^^;

価格の行き過ぎ、トレンド、周期を確認して相場を制するセット
予測移動平均ボリンジャーバンド、トレンド強度相関、周期分析セット
予測移動平均ボリンジャーバンド、トレンド強度相関、周期分析セット | fx-on.com

2015年9月15日火曜日

[MT4インジケータ]周期解析の考え方


■周期解析での理想的な取引ポイント
waveletcycle2.PNG

周期解析ではチャートの動きの中に隠された正弦波を検出して、それを描画しています。
Wavelet版では、Wavelet解析により16本未満の周期を除外して、16本から64本までの間で発生している周期を抽出しています。

考え方としては、周期の頂点でポジションを持って再度頂点で手じまうという形ですが、これでは利益を上げることが出来ません。周期解析では最後の頂点は必ず外れるためです。そして外れた時はトレンドのことが多く、そのまま大きな損を抱えることになります。

■トレンドが発生したときは必ず外れる。
waveletcycle3.PNG

周期解析で発生したシグナルは取引ポイントとなりますが、シグナル通りではないという事になります。これを利用すると周期解析と逆方向に移動した場合トレンドの発生と判断可能です。そのため、シグナル発生時の考え方は、次の図のようになります。

■周期解析を使った取引のイメージ
waveletcycle4.PNG

��.シグナル発生後の値動きを確認する。(最低4本)
��.値動きの方向に合わせてポジションをとる。
��.次のシグナル発生時には手じまいの準備をするが、さらに上に行くようなら追撃して、再度次のシグナルを待つ。

上記のように波のタイミングをとらえて取引するのを目標にしています。相場に呼吸を合わせるというのを数理解析でチャレンジしているのが周期解析インジケータです。

価格の行き過ぎ、トレンド、周期を確認して相場を制するセット
予測移動平均ボリンジャーバンド、トレンド強度相関、周期分析セット
予測移動平均ボリンジャーバンド、トレンド強度相関、周期分析セット | fx-on.com

2015年9月14日月曜日

[MT4インジケータ]Waveletによるデトレンド後周期解析を周期解析に同梱しました。

waveletcycle1.PNG

価格の行き過ぎ、トレンド、周期を確認して相場を制するセット
予測移動平均ボリンジャーバンド、トレンド強度相関、周期分析セット
予測移動平均ボリンジャーバンド、トレンド強度相関、周期分析セット | fx-on.com

周期解析に、Waveletベースのインジケータを追加しました。
ダウンロードファイルに同梱しております。

インジケータの見方は明日より順次ブログに記載していく予定です。

いままでの周期解析と異なり、クロスの方向と取引の方向が一致しません。トレンドの出だしと終了をとらえるインジケータと思ってご利用ください。



[MT4インジケータ&プログラミング]状況に応じて色が変わるボリンジャーバンド

MT4プログラムの小ネタ 時間別に横線を引く。/線の途中で色を変える。で書きましたが、MT4の描画バッファを複数用意すると一本の線に対して色を分けることができます。

これを応用すると、移動平均が上昇しているときは青、下降時は赤や、ボリンジャーバンドが狭まっている時とそうではないときで色を変えるといったプログラムが可能です。

さて、この特徴を生かし、色が変わるボリンジャーバンドを実装してみたいともいます。
こんな感じで、移動平均の上げ下げと、ボリンジャーバンドの拡大縮小によって線の色が変わります。

colorfulBB.PNG

移動平均はさておき、ボリンジャーバンドだと、膨らんでいるように見えて実は収束を始めていたりします。色を変えるとこーいうところが分かりやすくなります。

プログラムは定義部分が長くなってしまいましたが、実際のコードは長くありません。状況に応じてバッファを切り替えています。
i+1にも値を設定しにいっているのは、バッファが切り替わる際(たとえば移動平均が上げから下げに変わるとき)線が途切れてしまうのを防止する為です。本当は切り替わり時しか必要ないのですが、ちょっと横着しました^^;;
//------------------------------------------------------------------
// 色が変わるボリンジャーバンド
#property copyright "Copyright 2015,  Daisuke"
#property link      "http://mt4program.blogspot.jp/"
#property version   "1.00"
#property strict
#property indicator_chart_window

//バッファーを指定する。
#property indicator_buffers 10

//プロット数を指定する。
#property indicator_plots   10

#property indicator_label1  "CenterUp"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrAqua
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

#property indicator_label2  "HIGH1UP"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrSlateBlue
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

#property indicator_label3  "HIGH2UP"
#property indicator_type3   DRAW_LINE
#property indicator_color3  clrSlateBlue
#property indicator_style3  STYLE_SOLID
#property indicator_width3  1

#property indicator_label4  "LOW1UP"
#property indicator_type4   DRAW_LINE
#property indicator_color4  clrSlateBlue
#property indicator_style4  STYLE_SOLID
#property indicator_width4  1

#property indicator_label5  "LOW2UP"
#property indicator_type5   DRAW_LINE
#property indicator_color5  clrSlateBlue
#property indicator_style5  STYLE_SOLID
#property indicator_width5  1

#property indicator_label6  "CenterDown"
#property indicator_type6   DRAW_LINE
#property indicator_color6  clrIndianRed
#property indicator_style6  STYLE_SOLID
#property indicator_width6  1

#property indicator_label7  "HIGH1DOWN"
#property indicator_type7   DRAW_LINE
#property indicator_color7  clrWheat
#property indicator_style7  STYLE_SOLID
#property indicator_width7  1

#property indicator_label8  "HIGH2DOWN"
#property indicator_type8   DRAW_LINE
#property indicator_color8  clrWheat
#property indicator_style8  STYLE_SOLID
#property indicator_width8  1

#property indicator_label9  "LOW1DOWN"
#property indicator_type9   DRAW_LINE
#property indicator_color9  clrWheat
#property indicator_style9  STYLE_SOLID
#property indicator_width9  1

#property indicator_label10  "LOW2DOWN"
#property indicator_type10   DRAW_LINE
#property indicator_color10  clrWheat
#property indicator_style10  STYLE_SOLID
#property indicator_width10  1



// 入力パラメータ 移動平均期間
extern int MaPeriod = 21;

//入力パラメータ 表示移動
extern int   MaShift = 0;

//入力パラメータ 移動平均種別
extern ENUM_MA_METHOD MaMethod = MODE_SMA;

//入力パラメータ 適用価格
extern ENUM_APPLIED_PRICE MaPrice = PRICE_MEDIAN;

//標準偏差期間
extern int StdPeriod = 21;

//標準偏差算出方法
extern ENUM_MA_METHOD StdMethod = MODE_SMA;

//σ1
extern double Sigma1 = 1;

//σ2
extern double Sigma2 = 2;

double centerUp[];
double high1Up[];
double high2Up[];
double low1Up[];
double low2Up[];

double centerDown[];
double high1Down[];
double high2Down[];
double low1Down[];
double low2Down[];

//------------------------------------------------------------------
//初期化
int OnInit()
{
//インジケーターバッファを初期化する。
SetIndexBuffer(0,centerUp);
SetIndexBuffer(1,high1Up);
SetIndexBuffer(2,high2Up);
SetIndexBuffer(3,low1Up);
SetIndexBuffer(4,low2Up);
SetIndexBuffer(5,centerDown);
SetIndexBuffer(6,high1Down);
SetIndexBuffer(7,high2Down);
SetIndexBuffer(8,low1Down);
SetIndexBuffer(9,low2Down);
SetIndexDrawBegin(0, MaPeriod);
SetIndexDrawBegin(1, MaPeriod);
SetIndexDrawBegin(2, MaPeriod);
SetIndexDrawBegin(3, MaPeriod);
SetIndexDrawBegin(4, MaPeriod);
SetIndexDrawBegin(5, MaPeriod);
SetIndexDrawBegin(6, MaPeriod);
SetIndexDrawBegin(7, MaPeriod);
SetIndexDrawBegin(8, MaPeriod);
SetIndexDrawBegin(9, MaPeriod);

string short_name = "ClBB(" + IntegerToString(MaPeriod) + ")";
IndicatorShortName(short_name);

return(INIT_SUCCEEDED);
}


//------------------------------------------------------------------
//計算イベント
int OnCalculate(const int rates_total,          //各レート要素数
const int prev_calculated,      //計算済み要素数
const datetime &time[],         //要素ごとの時間配列
const double &open[],           //オープン価格配列
const double &high[],           //高値配列
const double &low[],            //安値配列
const double &close[],          //クローズ価格配列
const long &tick_volume[],      //ティック数(要素の更新回数)
const long &volume[],           //実ボリューム(?)
const int &spread[])            //スプレット
{
for( int i = (rates_total - prev_calculated - 1); i >= 0 && !IsStopped(); i-- )
{
if( i >= rates_total - MaPeriod ) continue;

double ma1 = iMA(NULL, PERIOD_CURRENT, MaPeriod, 0, MaMethod, MaPrice, i);
double ma2 = iMA(NULL, PERIOD_CURRENT, MaPeriod, 0, MaMethod, MaPrice, i + 1);

// 移動平均の方向によって値を設定するバッファーを変更する。
if( ma1 < ma2 )
{
centerDown[i] = ma1;
centerDown[i + 1] = ma2;
}
else
{
centerUp[i] = ma1;
centerUp[i + 1] = ma2;
}

double std1 = iStdDev(NULL, PERIOD_CURRENT, StdPeriod, 0, StdMethod, MaPrice, i);
double std2 = iStdDev(NULL, PERIOD_CURRENT, StdPeriod, 0, StdMethod, MaPrice, i + 1);


// 標準偏差の大きさによって値を入れるバッファを切り替える。
if( std1 < std2 )
{
high1Down[i] = ma1 + std1 * Sigma1;
high2Down[i] = ma1 + std1 * Sigma2;

low1Down[i] = ma1 - std1 * Sigma1;
low2Down[i] = ma1 - std1 * Sigma2;

high1Down[i + 1] = ma2 + std2 * Sigma1;
high2Down[i + 1] = ma2 + std2 * Sigma2;

low1Down[i + 1] = ma2 - std2 * Sigma1;
low2Down[i + 1] = ma2 - std2 * Sigma2;
}
else
{
high1Up[i] = ma1 + std1 * Sigma1;
high2Up[i] = ma1 + std1 * Sigma2;

low1Up[i] = ma1 - std1 * Sigma1;
low2Up[i] = ma1 - std1 * Sigma2;

high1Up[i + 1] = ma2 + std2 * Sigma1;
high2Up[i + 1] = ma2 + std2 * Sigma2;

low1Up[i + 1] = ma2 - std2 * Sigma1;
low2Up[i + 1] = ma2 - std2 * Sigma2;
}

}
//元となる値を計算する。
return(rates_total - 1);
}