トレード備忘録 & MT4/MT5インディケータ及びEAの開発

日々のトレード備忘録及びMT4/MT5に関する事項

MT4でのデイトレ適正調査

2018-03-29 23:03:07 | 投資

 MT4採用FX会社での取引の一般的な理解は、ソフト(MT4)のライセンス料がコストの一部となるので、その分スプレッドが広めであるということであった。そのためMT4利用者は高機能のチャートが魅力でデモ口座のみを利用する人と自らプログラムを組んで自動売買に徹するという人とに大きく分けることができた。ところが、最近ではMT4採用業者といえども市場の競争は激しさを増しており、大手の老舗会社でもドル円やユーロドルではスプレッド0.3~0.5というところも多くなっているので、取引環境は一般のFX会社と変わらなくなってきている。 

 また、日本でのレバレッジ規制強化で海外口座を利用する人も多くなってきている。スプレッドもそんなに見劣りがしないので、自動・裁量に拘わらずデイトレを始めてみたい向きもあるかもしれない。そのような人には、事前に調査していただきたいことがある。FXで好結果を収めるには、相場のトレンドに従った取引に徹することが重要といわれるが、そのためには逆指値取引も多用しなければならない。この逆指値が有利に使えるかどうかが、デイトレ適正業者であるか否かの判断材料の一つとなる。 

 日本語のホームページを設けて本邦トレーダーを勧誘している海外業者X社のドル円を例にとると、指値・逆指値は現値から4ピップス以上離れていなくてはならない。現値が105.50であるとすると、逆指値の売りは105.46以下でなければ注文は通らない。短期デイトレで4ピップスは大きい。相場が4銭下げてもそこまでで、反転してしまうかもしれない。損切りの頻度が大きくなってしまう。一方、本邦に本拠を有するO社では、指値・逆指値幅はゼロである。狭い方がよいとは言わないが、X社と比較してその自由度は高い。よくよく事前調査を怠ることなかれということである。 

 調査の方法は簡単だ。MT4にはMarketInfo()という便利な関数が用意されている。この関数では、最小・最大ロット数、スプレッド、スワップ値等10種類以上の業者の情報を知ることができ、問題の指値・逆指値幅の情報も含まれる。これ等全てを一発で知るには、MarketInfo.mq4というスクリプトを使うのがお勧めだ。「FXメタトレーダー実践プログラミング」の著者豊嶋久道教授が開発されたスクリプトであるが、ダウンロードできない人のため、下記のコードをそのまま紹介しておく。コピペでメタディターに取り込めばよい。必ずScriptsファイルに保管すべきこと。またドラッグアンドドロップでチャートに挿入しても何も起こらなかったように見えるが、ターミナルのエキスパートタブを開くと、詳細な情報が書き込まれている。 

//+------------------------------------------------------------------+

//|                                                   MarketInfo.mq4 |

//|                                   Copyright (c) 2009, Toyolab FX |

//|                                         http://forex.toyolab.com |

//+------------------------------------------------------------------+

#property copyright "Copyright (c) 2009, Toyolab FX"

#property link      "http://forex.toyolab.com"

 

// スタート関数

int start()

{

   Print("MODE_MAXLOT : 最大ロット数 = "+MarketInfo(Symbol(), MODE_MAXLOT));

   Print("MODE_LOTSTEP : ロットの最小変化幅 = "+MarketInfo(Symbol(), MODE_LOTSTEP));

   Print("MODE_MINLOT : 最小ロット数 = "+MarketInfo(Symbol(), MODE_MINLOT));

   Print("MODE_SWAPSHORT : 1ロットあたりの売りポジションのスワップ値(口座通貨) = "+MarketInfo(Symbol(), MODE_SWAPSHORT));

   Print("MODE_SWAPLONG : 1ロットあたりの買いポジションのスワップ値(口座通貨) = "+MarketInfo(Symbol(), MODE_SWAPLONG));

   Print("MODE_TICKVALUE : 1ロットあたりの1pipの価格(口座通貨) = "+MarketInfo(Symbol(), MODE_TICKVALUE));

   Print("MODE_LOTSIZE : 1ロットのサイズ(通貨単位) = "+MarketInfo(Symbol(), MODE_LOTSIZE));

   Print("MODE_STOPLEVEL : 指値・逆指値の値幅(pips) = "+MarketInfo(Symbol(), MODE_STOPLEVEL));

   Print("MODE_SPREAD : スプレッド(pips) = "+MarketInfo(Symbol(), MODE_SPREAD));

   Print("MODE_TIME : 最新のtick時刻 = "+TimeToStr(MarketInfo(Symbol(), MODE_TIME), TIME_DATE|TIME_SECONDS));

   Print("MODE_HIGH : 当日の高値 = "+MarketInfo(Symbol(), MODE_HIGH));

   Print("MODE_LOW : 当日の安値 = "+MarketInfo(Symbol(), MODE_LOW));

 

   return(0);

}


MT4で自動売買ーこんなに簡単VPS無料体験

2018-03-24 20:46:12 | 投資

 MT4で自動取引をするとなると、外部コンピュータ(VPS)をレンタルしなければならないという考えが頭をよぎる。ついつい、そんな大げさなことまでして自動取引などしたくないという結論となるのが通常である。 

 外国為替取引が活発になるヨーロッパ時間帯からニューヨーク時間帯の数時間にかぎってFX取引を行うデイトレーダーであれば、VPSをレンタルしなくても自分のパソコンで自動取引ソフト(EA)を走らせることができる。パソコンのスイッチを切らなければよいだけのことだから、現実にそのような形で自動取引を楽しんでいる人は多い。彼らにとっても、自分で決めた取引条件を見逃すことなく適格に市場参入するのは神業に近いから、そのような作業を忠実にこなしてくれるEAの存在は大変ありがたいものとなっている。 

 MT4システムを採用する日本のFX業者のほとんどは、外部コンピュータ業者と連携しており、ほぼ2ヶ月間無料でVPSサービスを提供してくれている。FX業者に本口座を開いていれば、ホームページから簡単に申し込むことができるから、食わず嫌いの人も一度デモで試してみられることをお勧めする。VPS上の取引画面には、パソコンから随時アクセスが可能であり必要に応じて自動取引の状況を監視することや制御することができる。自己のパソコン環境と異なるところはない。 

 実は、筆者も上記経過をたどってVPSのお世話になっている一人だ。因みに現在の取引画面を紹介すると、次のようになっている。上図は全体の画面、下図はEURUSDのペインの拡大図

① 全体図

 自己のパソコン上では12個の通過ペア表示にしているが、VPSでのメモリーは1ギガに限定されているので、6ペインの表示にしている。また、インディケータの数も必要最低限に絞っている。右端の2ペインは情報表示やEA操作のために使っている。US30(ダウ)とJP225(日経225)の価格表示だけはされているが、ローソク足は消している。右上のペインはロンドン・ニューヨーク・東京の時間表示(夏冬時間の切り換え可)、右下のペインはEA操作のためであり、EAを日本時間午後3:36から翌日午前4:00まで稼働させ、その他の時間帯では停止させるようにしている。

② 拡大図

 3月23日午後11時過ぎのEURUSD1時間足の画像。前の記事で紹介した西山孝四郎講師の順張りEAがポジションを取った直後のものである。終値ベースでローソク足がBBσ+1を上回り(赤)、ADXと標準偏差(StdDev)がともに上昇中(濃い青)で正確にポジションを取ってくれている。トレイリングストップ(TS)をオンにしているので、ストップラインがエントリー価格を上回ってきており、含み益状態となっている。相場はその後下げに転じBBσ+1を下回ったため、本来ならば手仕舞いシグナルでトレード終了、若干の損失ということであるが、今回はトレイリングストップに助けられ、微益で終わることができた。TSは必ずしも利益の極大化には繋がらないが、この場合はプラスに働いたと云える。 

 せっかくMT4を始めたのであれば、自動取引も一度経験してみる価値がある。食わず嫌いが治まってくると、そのうちプログラムを自分で作りたくなってくるものだ。


西山孝四郎順張り手法のアルゴリズム化(EA)で自動売買

2018-03-17 16:00:00 | 投資

 西山孝四郎氏のセミナーのユニークなところは、彼が現役投資家としてヘッジファンドという特殊投資(投機)集団に身を置いていることに起因しているようだ。毎回、一般の投資情報メディアでは知りえない内外のプロ投資家たちの動向に目を向けさせてくれている。ファンダメンタルとは一種異なる投機資金の流れや投資行動を知ることにより、FXその他の値動きもより深く理解できるようになる。 

 一方、実際の取引においては投資情報を含むファンダメンタルで行動を起こすことはないという。トリガーとなるのは、あくまでテクニカル分析であり、テクニカルがファンダメンタルと合致した時に限り市場に参入するということである。そのテクニカル分析手法とは、ほぼ毎回のセミナーで説明される順張り手法だ。 

 テクニカルのセットアップはよく知られている3個のテクニカル指標、それらは、ボリンジャーバンド、標準偏差(Standard Deviation)そしてADXの3個である。いずれも、メタトレーダー(MT4)に標準搭載されているものだが、このうちADXはMT4の計算方式と異なる修正移動平均によるADXを採用されている。講師の手法に忠実に従うには、この点注意しておく必要がある。 

 3個のテクニカルの使いかたはいたって単純だ。まず、ボリンジャーバンド(BB期間21)であるが、終値ベースでローソク足が±σ1の外にあることが、相場がトレンド状態にあることを計る基準の一つとなる。次に標準偏差StdDev(期間26)とADX(期間14)がともに右肩上がりに上昇途上にあることが第二の条件である。それまでローソク足がBB±1の内側にあったものが、終値ベースでBB±1の外に飛び出し、且つStdDevとADXが右肩上がりであれば、買いまたは売り参入ということだ。 

 手法はいたって簡単だから、彼の周りの人達(ラジオ番組やセミナーのアシスタント等)もこの手法に従って好成績を残しているという。中には講師の成績を上回る人もいるというふれこみである。日足ではトレンドのない昨今では、4時間足以下の短期取引が多いということであった。 

 この手法、裁量だけでなくアルゴリズム化をして、自動取引をも行っているそうだ。ロジックはとても単純なので、MT4にて自動売買プログラム(EA)を作成することは難しくない。MetaGenicFXにて「西山孝四郎順張り・逆張りキット」を購入された方から、ぜひEAもという希望があるようなので、トライしてみることにした。裁量取引のサブとして使用していただく他、ストラテジーテスターで複雑なバックテストができるよう次のように種々工夫してみた。 このEA、裁量で時間を限って取引するデイトレにも有効に利用できる。例えば、トレンドの発生しやすいロンドンからニューヨーク時間帯にかけてのみ市場参入するデイトレーダーにとっては、その間このEAを作動させておけば、パソコンの前に常駐する必要はない。シグナルが出れば間髪を入れずに自動売買を行ってくれるからである。

仕掛けのシグナルはローソク足が終値ベースでBB+σ1の外に飛び出したら、次の足の始値で買いのシグナル、ローソク足が終値ベースで-σ1の外に飛び出したら、次の足で売りのシグナルとする。このシグナルをベースに次の8個の条件をフィルターとして設け、それぞれの条件での取引及びバックテストが行えるようにしている。(⑤以下は4時間足以下で取引を行う場合にのみ利用する、主にバックテスト用)

① 仕掛けシグナルに加えて、ADXのみが上昇していれば取引参入

② 仕掛けシグナルに加えて、StdDevのみが上昇していれば取引参入

③ 仕掛けシグナルに加えて、ADX又はStdDevの一方が上昇していれば取引参入

④ 仕掛けシグナルに加えて、ADXとStdDevの両方が上昇していれば取引参入

⑤ 仕掛けシグナルに加えて、日足のローソク足がBBσ±1の外にあれば取引参入。

⑥ 仕掛けシグナルに加えて、週足のローソク足がBBσ±1の外にあれば取引参入。 

⑦ 仕掛けシグナルに加えて、日足のローソク足が陽線で買い、陰線で売り取引参入。

⑧ 仕掛けシグナルに加えて、週足のローソク足が陽線で買い、陰線で売り取引参入。 

 あくまで西山方式の原則はADXとStdDevの両方が上昇していなければならないから、デフォルトは④になっているが、通貨ペア等によっては原則通りにはいかない場合もあるので、多彩な分析ができるように配慮した。(プログラム上はゼロが先頭なので上記④はEAでは3として選択することになる) 

手仕舞いシグナル

手仕舞いは上記いずれの場合も、ローソク足が終値ベースでBBσ±1内に戻った時にポジション決済(西山氏の原則通り) 

オプショとして;

① 手仕舞いシグナルの他にStopLossをピップスで設定

② トレイリングストップを設定

することが可能となっている。 

採用するインディケータの確認

ボリンジャーバンド、ADX、標準偏差(StdDev)の各パラメータはそれぞれ、21、14、26と西山講師の仕様通りをデフォルトとしているが、自由に変更することも可能、またADXも講師の勧める修正移動平均方式を採用している。 

バックテスト

 Strategy Testerを使って年初からのUSDJPYのバックテストを行ってみた。StdDevをフィルターとするテスト結果であるが、西山式戦略の原則である④によるテスト結果($179.72)を上回っていた。詳細下記参照

注)EAにご興味のある方は下記MT Studio21.comまで

https://mtstudio21.com/

 

注)このオリジナルEAは、全面改訂されTrendBlazer_MT4EA.ex4としてMT Studio21社にて再公開されています。

 

 

 


MT4とMT5では バーの数え方が異なる

2018-03-06 13:48:37 | 投資

 現行のMT4のプログラム言語(MQL4)は新MQL4と称されるほど、旧MQL4とは趣を異にしている。MT4のチャートを見ただけでは、新旧の区別は全く感じないが、新しくインディケータ作成のためにエディタを開くと、フォーマット自体が旧版とは似ても似つかぬものに入れ替わっていることに気付く。幸い旧エディタとも互換性は保たれているので、多くの人は旧エディタのフォーマットを今も使い続けているのが現実である。一言で言えば、現在のMT4のメタエディタはMT5のエディタが採用されていると云えば、事態がはっきりする。 

 では、MT4の新エディタでインディケータを作成した場合、そのインディケータはそのままMT5で作動するかというと、ことはそう簡単ではない。2~3注意しなければならないところがあるが、その一つにローソク足を特定するために振られる足番号がある。 

 MT4ではチャート上の最も新しいバー(ローソク足)を0(ゼロ)として、過去に向かって1、2、3・・・と順に番号を振っていく。仮に足の数が100本だとすると、現在の足番号は0、そして最も旧い足番号は99となる。一般に、バー全体の数をlimit本とすると、現在の足は0、最も旧い足番号はlimit-1と表現される。 

 インディケータによっては1本前のバーにおける数値が確定してから次のバーの数値が計算されるもの(例えばEMA)が存在するので、各バーの計算は過去から現在に向かって計算されることが多い。これをプログラム上で表現すると:

for(int i=limit-1; i>=0; i--)

{  計算式;  } ということである。

ところが、MT5ではこれと正反対が原則になっている。即ちMT5では最も旧い足を0として数える。バー全体の数をlimitとするとMT5では現在の足がlimit-1ということになる。先の例の計算式は:

for(int i=0; i<limit; i++)

{  計算式;  } ということになる。 

 前者のバーの数え方(MT4)は「時系列配列」と呼ばれるのに対して、後者(MT5)は「通常の配列」と呼ばれている。メタトレーダーは柔軟な言語なので、上記の原則にも拘わらず、MT4で「通常の配列」を、また、MT5で「時系列配列」を選択することが可能となっている。それではどちらの配列でプログラムするのがよいのかと訊かれれば、それは個人の好みで選択すればよいと答えるしかない。MT4で「通常の配列」を採用したい場合は、プログラム中でArraySetAsSeries()関数でfalseを選択、反対にMT5で「時系列配列」を採用する場合には、同関数でtrueを選択することになる。原則通りであれば、何も書く必要はない。 

 MT4で標準搭載されている諸関数を観察すると、それらの採用する配列は「通常の配列」が主流であり、原則を曲げてわざわざArraySetAsSeries()をfalseとしてプログラムされていることに気付く。ここでもメタトレのMT5化が着々と準備されているのが分かる。例えば、Custom Moving Averages. mq4の該当部分は次のようになっている。

//--- check for bars count

   if(rates_total<InpMAPeriod-1 || InpMAPeriod<2)

      return(0);

//--- counting from 0 to rates_total

   ArraySetAsSeries(ExtLineBuffer,false);

   ArraySetAsSeries(close,false);

 筆者としては、IndicatorもEAもできるだけMT4/5で共通化させたいと考えており、そのためMT4でも標準搭載インディケータが採用する「通常の配列」に拠ることにしている。