post

RSIに移動平均線を適用させる~その2

前回は、RSIに移動平均線を適用させるプログラムの骨格の部分を解説しました。骨格だけでも十分使うことができますが、オシレーター系のインジケーターは、「レベル」とセットで使われる事が多いです。

RSIでは70,30というのが一つの目安になっていますよね。70以上で買われすぎ、30以下で売られ過ぎというように(厳密に言うとこの考え方は良くないらしいですが、ここでは触れません)。RSIを適用するときに70,30のラインを入れて使う人が多いと思いますし、MT5に最初から入っているRSIにも70,30のラインはあらかじめ入っています。

今回は最初から70,30のレベルに線を入れる2つの方法についての内容になります。

1.#propertyで指定する方法。

#property indicator_level1 30
#property indicator_level2 50
#property indicator_level3 70
#property indicator_levelcolor clrOrange
#property indicator_levelwidth 1
#property indicator_levelstyle STYLE_DASHDOT

(1)property indicator_level1 30
赤字はレベル線の数だけ必要。これは1番目のレベルが30ということ

(2)property indicator_levelcolor
レベル線の色、指定しない場合はデフォルトのsilver

(3)property indicator_levelwidth
レベル線の太さ、指定しない場合はデフォルトの1

(4)property indicator_levelstyle
レベル線の形、指定しない場合はデフォルトのSTYLE_DOT(点線)なお、指定しても線の太さが2以上になると自動的にSTYLE_SOLID(実線)になる

なお、(2)(3)(4)はレベル線が何本あっても一括でしか指定できない

#propertyで指定するメリット

・プログラムが簡単
・ユーザーでの変更も容易

この画面から変更も新しいレベル線の追加も容易にできます。

#propertyで指定するデメリット

・色、太さ、形状は一括指定なので、きめ細かい指定はできない

2.IndicatorSetInteger、 IndicatorSetDouble関数で指定

//(1)レベル線の数を指定する
IndicatorSetInteger(INDICATOR_LEVELS,3);

//(2)レベル線の数字を指定する
IndicatorSetDouble(INDICATOR_LEVELVALUE,0,30.0);
IndicatorSetDouble(INDICATOR_LEVELVALUE,1,50.0);
IndicatorSetDouble(INDICATOR_LEVELVALUE,2,70.0);

//(3)レベル線の色を指定する
IndicatorSetInteger(INDICATOR_LEVELCOLOR,0,lclrRed);
IndicatorSetInteger(INDICATOR_LEVELCOLOR,1,clrYellow);
IndicatorSetInteger(INDICATOR_LEVELCOLOR,2,clrLime);

//(4)レベル線の太さを指定する
IndicatorSetInteger(INDICATOR_LEVELWIDTH,0,1);
IndicatorSetInteger(INDICATOR_LEVELWIDTH,1,3);
IndicatorSetInteger(INDICATOR_LEVELWIDTH,2,3);

//(5)レベル線の種類を指定する
IndicatorSetInteger(INDICATOR_LEVELSTYLE,0,STYLE_DOT);
IndicatorSetInteger(INDICATOR_LEVELSTYLE,1,STYLE_SOLID);
IndicatorSetInteger(INDICATOR_LEVELSTYLE,2,STYLE_DASHDOTDOT);

(1)はレベル線を何本指定するかを表します。ここに指定した数以上のものを以下の関数で書いても表示されません。

(2)はレベルの数字の指定です。最初の線の順番は0番目になります。

(3)(4)(5)は省略可能です。省略するとデフォルトのsilver、太さ1,STYLE_DOTが適用されます。

関数で指定するメリット

・レベル線一本ずつ指定できる。

関数で指定するデメリット

・プログラムが複雑になる
・ユーザーが変更できない

レベル線を一本ずつ細かく指定できるので、より直感的にわかりやすいインジケーターになります。一方で、ユーザーがレベル線を増やそうとしても、反映されません。(時間足を変えただけで消えてしまいます)。また、プログラムコードが長くなります。サンプルコードでは、直接数字を関数内に埋め込んでいますが、実際は変数にしてinputで指定するのがプログラムの作法ですが、そうすると、

この部分が増えて面倒くさくなります。ここはインジケーター本体の変数をいれるべきところで、レベル線で複雑にしたくないところです。

ですので、どちらを採用するかは、プログラムの使われ方で判断してください。#propertyで指定するのは、他の人にも使ってもらうインジケーター用、関数で指定するのは自分専用などという感じです。

プログラムはこちらからダウンロードしてください

RSIに移動平均線を追加(#propertyでレベル線を指定)
RSIに移動平均線を追加(関数でレベル線を指定)

post

RSIに移動平均線を適用させる

なれRSIはギザギザしたラインなので意外に見にくかったりしませんか?もし、RSIに移動平均線がついていたら便利ではないでしょうか?

などと書いてみましたが、実際ストキャスティクスではKラインに対してDラインで滑らかにしています。DラインはKラインの移動平均線なんですよね。だからおかしな考え方ではないと思います。まあ、ゴールデンクロス、デッドクロスが売買タイミングになるかどうかはわかりませんが。

同じようにビルWilliamsの%Rオシレーターも同じように移動平均線をつけてみてはいかがでしょう?

RSIに移動平均線をつけた

RSIに移動平均線をつけた(クリックするともとの大きさで見られます)

プログラムはこちらからダウンロードしてください。

RSIに移動平均線を適用(プログラムソース)

ナレーションでSラインとか言ってしまいました(笑)

post

移動平均大循環分析

今日はプログラムの説明は一休みして自作インジケーターの紹介です。

小次郎講師とは

今日は小次郎講師の移動平均大循環分析について簡単に解説いたします。小次郎講師はご存じの方も多いかと思われますが、ラジオNIKKEIでパーソナリティを務められています。また、

このような本も執筆されております。そのなかで、小次郎講師の今一番のウリが移動平均大循環分析というものです。移動平均大循環分析などに詳しい解説がありますが、ざっくりいいますと、3本の移動平均線の並び順で現在のフェーズを把握して、相場状況をとらえるというものです。また、中期移動平均線と長期移動平均線の間を着色して(小次郎講師はこれを【帯】と名付けています)、ローソク足の反転や突破でエントリーや手仕舞いの判断をしているようです。詳しくは上記書籍や小次郎講師のサイトをご覧ください。

移動平均大循環分析のインジケーター

今回はその移動平均大循環分析をMT5のインジケーターにしてみたということです。プログラムの中身自体はそんなに難しくないのですが、今までの説明からは少し飛躍するので、今回はインジケーターの実行ファイルだけダウンロードできるようにしてあります。いずれプログラムの解説もしますのでお楽しみに。

(クリックするともとの大きさで見られます)

これが移動平均大循環分析のインジケーターです。中期移動平均線が長期移動平均線の上にあるとき(上昇トレンド)に帯が赤く、逆のときが青くなっています。また、右下にある数字が現在のフェーズです。『循環』とあるので、本来は前のフェーズから今のフェーズにどのように移ったのかというのも知りたいでしょうから、プログラムの解説のときにはもう少し手を入れる予定ですが、これでも使えるかと思います。移動平均線の期間も色も変えることができます。また、フェーズを顕す文字も移動させたり色を変えたり、フォントの大きさを変えたりできます。ダウンロードは下のリンクからできます。

移動平均大循環分析インジケーター

post

一番カンタンな移動平均線

では、実際のプログラムを作ってみましょう。今回は移動平均線を作る・・・というか、すでにあるテクニカル指標関数の使い方を説明します。既存のインジケーターの改造をするにはこれが一番手っ取り早いです。mq4(MT4)にもありましたが、ちょっと使い方が違うところがあります。

ソースファイルはこちらからダウンロードしてください(右クリックで保存)。

https://1klab.com/mt5/wp-content/uploads/2018/01/MA_Vol1.mq5

ーーーーーーーーーーーーーーーーーーーーーーー

#property indicator_buffers 1                         ・・・指標計算に使用されるバッファ数
#property indicator_plots 1                                     ・・・画面に描画されるものの数
#property indicator_type1 DRAW_LINE  ・・・描画されるものの種類(移動平均線なのでLINE)
#property indicator_color1 clrDeepPink  ・・・描画される線の色
#property indicator_width1 2   ・・・描画される線の太さ

int hMA;  ・・・ハンドル→これがMT5(mql5)のキモ
double buf[];   ・・・バッファ(この値が描画される)

input ENUM_MA_METHOD InpMAMethod=MODE_SMA;  ・・・移動平均線種別
input ENUM_APPLIED_PRICE InpMAApply=PRICE_CLOSE;  ・・・適用価格
input int InpMaPeriod=20;  ・・・期間

ーーーーーーーーーーーーーーーーーーーーーー

mql5で特に変わったのが#property indicator_plotsのところとハンドルの概念です。詳しくは
https://www.mql5.com/ja/docs/basis/preprosessor/compilation
を参照してください

続いてOnInit関数です。OnInit関数は、インジケーターが起動したとき最初に呼ばれる関数です。

ーーーーーーーーーーーーーーーーーーーーーーー

//移動平均線のテクニカル指標関数に接続
hMA=iMA(NULL,0,InpMaPeriod,0,InpMAMethod,InpMAApply);

//正しいインデックス作成と適切な配列とを関連付ける
SetIndexBuffer(0,buf,INDICATOR_DATA);

//データウィンドウに表示する指標グラフィカルシリーズの名称
PlotIndexSetString(0,PLOT_LABEL,”MA Vol.1(“+string(InpMaPeriod)+”)”);

ーーーーーーーーーーーーーーーーーーーーーーー

mql5ではこの方法でテクニカル指標関数に接続します。詳しくは
https://www.mql5.com/ja/docs/indicators
を参照してください。続いてOnCalculateですOnCalculateはローソク足が動くたびに呼ばれる関数です。

ーーーーーーーーーーーーーーーーーーーーーーー

//— データが全て計算されたかをチェックする
if(BarsCalculated(hMA)<rates_total)
return(0);

int to_copy;

//最初はprev_calulated==0なので、すべてのデータがコピーされる
to_copy=rates_total-prev_calculated;

//一度計算されるとrates_total==prev_calculatedになるので、最新のバーだけ計算するようにする
if(to_copy==0)
to_copy++;

// 指標バッファのコピー
if(CopyBuffer(hMA,0,0,to_copy,buf)<=0)
return(0);

ーーーーーーーーーーーーーーーーーーーーーーー

最後にハンドルを開放します。この関数は自動で生成されないので自分で作る必要があります。

void OnDeinit(const int reason)
{
IndicatorRelease(hMA);
}

コンパイルして実際に動かしてみましょう。おそらく最初は

こんな風に変数名がそのままでているかと思います。これだと混乱する可能性もあるので、コメントを入れます。コメントはC++と同じ要領です。そうすると

このようにわかりやすくなります。同じ期間、同じ種別、同じ適用価格でMT5に最初から入っている移動平均線と比べてみてください。当然同じ値になっているはずです。データウィンドウで確認します。

このような要領で、既存のインジケーターの改造から始めましょう。

post

自己紹介(のようなもの)

普段は実業をやりながら、夜空いた時間にプログラム書いたりトレードを少額でやったりしています。MT4でデモ口座を使ってEAで自動売買プログラムを動かして喜んでいたのですが、本格的MT5に取り組んでからは売買もおやすみというところです。

プログラムもトレードも中途半端なアマチュアトレーダーでありアマチュアプログラマーですので、トレード手法など語れませんし、プログラムも自分使い用なので、エラー処理とかいい加減です。ただ、製品として納品するものではないので、流れというかコツを伝えられればと思いこのブログを立ち上げました。

(画像をクリックすると拡大されます)

図はMT5用のインジケーターです。表示されているのは、移動平均線のカラーバージョン、マルチタイムローソク足、RSIに移動平均線をつけたもの、%bオシレーターのカラーバージョンです。

移動平均線は、傾きによって色が変わります。右上がりで赤、右下がりで青です(設定で変えられます)。マルチタイムローソク足は、例えば5分足に上に、一時間足の輪郭を重ねています。RSIはギザギザして判断に迷うことがあります。ローソク足に移動平均線がつけられるなら、RSIに移動平均線をつけてもいいわけです。同じ要領で、Williams  %Rにもつけられます。最後の%bはボリンジャーバンドを使う方が使われるオシレーターで、ストキャスティクスの応用系です。これをカラーバージョンとして0.5を境に上下で色が変わるように作りました。同じ要領でRSIで色を変えるなんてこともできます。

これらを追々説明していきたいと思っています。

post

海外FXも狭スプレッドになった

今日もプログラムとは離れますが、今日FBSで取引をしようと思ってMT5を立ち上げてびっくり。

スプレッドが0.5pipsになっていました(EUR/USD・ユーロ/米ドルとUSD/JPY・米ドル/円)

(図をクリックするともとの大きさで見られます)

0.5pips(0.5銭)といったら、日本の会社とほとんど変わらない狭さです。ここまで狭かったら、1分足~5分足でスキャルピングもできます。海外FX会社のスプレッドが広いというのはもう昔の話なのかもしれません。しかもドル円がここまで狭いのは驚きです。もう、日本の会社を使う必要ないのではないでしょうかね。

ただ、一つだけFBSの難点は、入出金が米ドルかユーロでしかできないというところ(´;ω;`)せっかく取引で儲けても、出金のときにもう一回為替のレートがのるのです(笑)円安だったら損しちゃいますね。

post

ハイレバレッジが危険?

今回は余談になりますが、ハイレバレッジの取引は本当に危険なのか?ということを考えてみたいと思います。もしかしたら私の認識が間違っているかもしれないので、ご教示いただけると嬉しいかも。

海外ハイレバレッジFXブローカー

日本でFXの口座を開くと、レバレッジは個人では25倍、法人も厳しくなって今は50倍程度です。これが、海外FXの口座を開くと888倍(XM)や1000~3000倍(FBS)といった、日本とはかけ離れた大きなレバレッジを使えるブローカーが数多く存在します。

FXの書籍や雑誌を見ると、判で押したように「ハイレバレッジは危険」だという記述があります。しかし、執筆者が本当に理解して書いているのか?単に周囲がそういうから同じことを書いているだけなんじゃないかという疑問がどうしても拭えません。そこで今まで私が理解してる範囲でレバレッジについて書いてみようと思います。

レバレッジについて考える

たとえばUSD/JPY(米ドル/円)で1万通貨のトレードをすることを考えます。現在1ドルが112円台(平成31年1月3日)ですので、ざっくりと1ドル100円だとします。もし、レバレッジをかけないでトレードを行うのであれば、証拠金は100万円必要になります。レバレッジが25倍だと証拠金は4万円、50倍で2万円となります。これが国内FX会社の個人、法人アカウントの一般的なレバレッジになります。では、ハイレバレッジの会社で500倍、888倍、1000倍、3000倍のレバレッジでトレードをするならば、証拠金はいくら必要でしょうか?それぞれ2000円、1126円、1000円、333円!となります。1万通貨トレードをするのに必要な証拠金はわずかに300円ちょっと。吉野家の牛丼の並盛り以下の資金で、1万通貨のトレードができるのです。

ハイレバレッジが危険だという根拠

では実際に333円で10000通貨をトレードしたとしましょう。1万通貨なので、1円円安に向かえばロングポジションを持っていれば1万円の利益、ショートポジションを持っていたら1万円の損失となります。333円では簡単にロスカットです。333円の証拠金で耐えられるのは、わずかに3.3銭の損失です。ほんのちょっと逆行しただけでアウトです。だからハイレバレッジは危険だというのが、ハイレバレッジ危険論者の根拠なのだと思うのですがどうでしょう?

そりゃ、レバレッジの限界までかけて投資したら危険でしょう。でも、必ずレバレッジの限界までポジションをもたなければならないという決まりなんてないんです。

レバレッジは高いほうが安全?

例えば、レバレッジ3000倍で1万通貨のトレードをするとします。ただし、証拠金は4万円用意します。そう、25倍のレバレッジと同じです。そうしたらどうでしょうか?1円の逆行で被る損失が1万円であるのは25倍でも3000倍でも同じなんです。それだけではありません。もし、4万円で1万通貨のドルを買うと証拠金維持率がほぼ100%になります。ここでもし1万円の損失を出したとします。そうすると残りは3万円になります。次、1万円通貨を買おうとするとレバレッジ25倍だと証拠金維持率が75%になります。証拠金維持率75%というとマージンコールにひっかかったり、強制ロスカットになるレベルです。もしかしたらポジションを持てない可能性があります。一方で、3000倍のレバレッジなら3万円残っていれば10000%の証拠金維持率があるわけで、同じようにトレードが続けられるのです。1万円の損失で追加入金が必要なのと、必要ないのと果たしてどちらが安全ですか?

それでもまだハイレバレッジが危険だという人には、こういうのはどうでしょうか?

更に、海外FXブローカーが有利な点

証拠金維持率が規定以上に下がると、マージンコールという警告が出たり、強制ロスカットにされたりと書きましたが、実はそれではすまないことがあります。レートが徐々に動いて損失が少しずつ膨らみ、マージンコール→強制ロスカットと進むならばまだいいのですが、突如としてレートが大きく動くことがあります。近年ではスイスフランショックが記憶に新しいのではないでしょうか?このときは、為替のレートが飛んでしまったために、通常よりはるか離れたところで約定?してしまい、数百、数千万円のマイナスを負った人もいました(儲けた人もいますが)。さてここで、国内のFX会社ですと、強制ロスカットしても足りない分は追証といって、追加の資金求められます。これが数百、数千万円になったということです。そのために自己破産を余儀なくされた人もいます。しかし、海外FXブローカーではこのようなことはありません。損失は証拠金の分だけに抑えられます。ですから、口座にはできるだけ少ない金額を用意しておけば、たとえロスカットで持って行かれたとしても、入金した分に損失は抑えられます。参考

これでもまだ海外FXのハイレバレッジは危険ですか?

海外FXが不利な点

とはいえ、手放しで海外FX会社をおすすめできるわけでもありません。中には危ないところもあるでしょう。時折、出金拒否などのトラブルを聞くこともあります。ですから、信頼できる会社を選ぶ事が必要です。その中では利用者の多いXMや、私の使ってるFBSは今のところ安心です。

海外FXのスプレッド

もう一つ不利な点と言えば、全般的に海外FXのスプレッドは広めです。特に米ドル円はどの日本の会社より広いでしょう。しかしEUR/USD(ユーロドル)やEUR/JPY(ユーロ円)はほとんど変わらないか、ユーロ円に限っては日本の会社より狭いスプレッドのところもあります。米ドル円でガンガンスキャルピングをするのはちょっと苦しいですが、他の通貨ならそんなに差はない印象です。

それどころか、日本の某社は業界最狭スプレッドを謳っていますが、一日の内なんどもスプレッドを広げます。普段は0.3銭と言っていますが、しばしば2銭以上の広いスプレッドになります。むしろ海外より広いくらい。深夜なんて0.3銭の時間帯の方が少ないんじゃないの?って言えるほどです。それってどうなん?と思いますよ。私は何度かEA(自動売買)でスプレッド操作で損をさせられたこともあって、あそこだけは二度と使うまいと思っています。

post

MT5の優位性

MT4とMT5の比較ですが、機能の面からすれば圧倒的にMT5の方が有利です。基本的にソフトウェアというものはバージョンが上がるほど高機能かつバグも少なくなるものですからね。その中でも特に

(1)使える時間足が増えた
(2)多色インジケーターが使える

この2つは大きなメリットです。

時間足が増えた

MT4では1分、5分、15分、30分、60分、1時間、4時間、日足、週足、月足が使えましたが、MT5ではそれに加えて、2,3,4,6,10,12,20分、2,3、6,8、12時間足が使えるようになりました。全部が必要とは思いませんが、2分足10分、20分足は私もよく使っていますし、8時間足12時間足を使うトレーダーも多いと聞きます。機能はなくて困ることがあっても、あって困ることはないので、時間足が増えたのはありがたいことです。

多色インジケーター

もう一つ大きな機能アップが多色インジケーターが使えるということです。

上図では、移動平均線とVolumeインジケーターを表示していますが、移動平均線の傾きがプラス(上昇トレンド)のときは赤、マイナス(下降トレンド)のときは青で描かれています。Volumeインジケーターでは、Volumeの段階によって色が変わっていきます。MT4でも実現できたのかもしれませんが、MT5では簡単に実現することができます。

移動平均線の傾きで色を分ける、RSIの30以下、70以上で色を分けるなどができれば、より直感的にインジケーターの見分けがつくようになります。

私としては一刻も早く、国内の業者もMT5が使えるようになって欲しいと思います。せめてMT4と共存させてほしいです。

post

MT5プログラム

MT5の現実

MT5(MetaTrader 5)とは、メタトレーダー社(https://www.metatrader5.com/ja)のFXやCDFなどの取引ソフトです。このソフトで様々な分析をしたり、実際にトレードをすることができます。しかし、FXをやられている方は、MT4(MetaTrader 4)の方が圧倒的に有名でシェアも5を圧倒していることはご存じでしょう。MT5が登場してもう7年目になります(2011年に登場)。それでも普及が進んでいません。

普及が進まないには理由があり、その主な原因がプログラムに互換性がなく、MT4のインジケーターやエキスパートアドバイザー(EA)がそのまま流用できないということにあります。今日現在、MT4のインジケーターやEAはものすごい数があります。その膨大な資産がそのまま使えないのでは、MT5の普及が進まないのは仕方ないでしょう。

もう一つ、日本人には特に重要ですが、MT5を採用している日本のブローカがないというのもあります。MT5を使うには、海外のブローカーを使うしかないのです。

それでもなぜMT5?

ならば、MT4をそのまま使えばいいのではないか?もちろん、そうです。しかし、MT5にいつでも移れる準備も必要かと思わされることも起きています。

(1)MetaTrader社からはMT4はダウンローできない
(2)MT4のマイナーバージョンアップが止まった

現在、MetaTrader社からダウンロードすると、必ずMT5がダウンロードされます。MT4をダウンロードしたくてもできません。MT4をダウンロードしたい場合は、MT4でトレードできるブローカーからダウンロードするしかありません。ブローカーからダウンロードすると、ブローカー用のカスタマイズがされていたり、ブローカーのアイコンが設定されています。とはいえ、運用には問題はないでしょう。しかし、本家からダウンロードできないということは、いつMT4の終了がアナウンスされるかわからないですね。

もう一つ、マイナーバージョンアップが止まったというのも重要です。本家がもうMT4のメンテナンスは行わないということです。また、MetaTraderは将来的にはMT5へ全面移行するということも言っています。ですからMT5の準備をすることは無駄にはならないはずです。

プログラミングの必要性

現状、MT5の普及が進まず、インジケーターなどもあまり出回っていない現状では、自分で作るしかないという場面がかなり出てきます。多くの方はトレーダーであってプログラマーではないので、このハードルは高いです。しかし、インジケーターの改造など、簡単なものは思った以上に簡単にできますので、それを紹介したいと思います。本ブログはYou Tubeとも連動しようと思っていますので、よりわかりやすく紹介できればと思います。