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

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

トラップリピートイフダン(トラリピ)でプロに打ち勝つ

2017-07-15 14:01:44 | 投資

 筆者の知人で大手外銀の為替部門トップを務めた人がいる。リタイアした後は、趣味でFXをやっているが、なかなか勝てないと いう。現役の終わりの部分は、為替部門を取り仕切るメネージメントを担っていたから、トレーダーとしての勘が鈍ってしまったのか、それとも実需筋や競合金融筋の動きが見えなくなってしまったからなのか、はたまた自身の資金を動かすことから来る心理的な影響なのかよく分からないという。 

 そんな彼が、MT4では先輩であった筆者に同システムの扱い方について教えてほしいとの依頼をしてきたのである。チャートの基本的な操作方法、各種テクニカル指標の表示及び自動売買プログラム(EA)の稼働方法等を一通り伝授するとともに、参考EAとして、一般に使われているトラリピの自動売買EAも渡しておいた。 

 それから約1年が経過した今月、彼と昼食を共にしたとき「いろいろの手法を試してきたが、勝てるのはトラリピEAだけであった」とのこと。当初は「こんなまだるっこい方法はとても」と歯牙にもかけなかった手法に最大の賛辞を送ってきたのである。長年、趣味の会等で同EAを推奨してきた自分にとっても、やっとプロにも一目置かれることになったことを知り、うれしく感じた次第である。 

一 なぜトラリピで勝てるのか

① プロが真似できない手法であること

 外国為替銀行のディーラーのほとんどは、1日のうちに取引を完結させ、ポジションは翌日に繰り越さないいわゆるデイトレーダーである。彼らの取引は1取引100万ドル単位で、日々の為替レート変動の範囲内で小さな利益を積み重ねていく。そんな彼らには、50ピップス置きに100万ドル単位の注文を20本だすなんて芸当はできない。そのような方法で日中利益を重ねることは不可能であるし、やった途端、銀行の管理規則違反に問われて、即刻首を言い渡されることであろう。

② 1000ドル単位、低レバレッジであること

 買いのトラリピでは、1注文1000~3000(通貨単位)の買い待機注文を20本程度発注することになる。例えば、現値のドル円が113.00でれば、108.00から118円まで、トラップ幅を50銭の待機注文を20本出すといった具合である。利益幅は自由に設定できる。トラップ幅と同じ50銭とすることも自然な戦略である。戦略の裏には、108円まで下げても含み損に耐えられるだけの十分な証拠金を用意しているから大丈夫。「50銭 x リピート回数 > 含み損」は時間を掛ければきっと達成できるとの自信がある。

③ 綿密な相場分析は不要

 ファンダメンタルやテクニカルの難しい分析抜きで、過去の大きな相場の展開を参考にしたシステム・トレードであるから精神的負担が少ない。ドル円でトラップ利益幅が40~50pips程度であれば、1日に2~3度チャートを見ることで済むので、手動ででも取引ができる。

④ トレードチャンスが多い

 プロがしのぎを削っているデイトレで勝つのは容易ではない。週、月単位でゆったりした取引を低レバで行う方が勝てる確率が高い。過去1ケ月(6/1 ~6/30)のドル円の高値・安値の差は4.11円に過ぎないが、日々の高低差の積算は19.17円もあり、トラリピは同じトラップ幅をリピートして利確するので、この積算が全部ではないが,トレードチャンスとなる。

⑤ 間接証拠理由

 トラリピの特許を有する某社での過去のセミナーでは、同社の7割以上が利益を上げているという。その内訳には含み損が含まれていないようであるから、数字をそのまま信じるわけにはいかないが、実際にセミナーに参加している人に訊くと、皆さんそれなりに満足されている様子であった。因みに同社のスプレッドはドル円4銭、豪ドル円8銭という広いもので、スプレッドに加えて手数料まで徴収するシステムとなっている。それでも顧客が集まるという事実は、それなりに評価しなければならない。 

二 MT4を使おう、何も自動取引をすることはない

 ここまで読んでいただいた方には、トラリピは素人にも勝ちやすい手法であることをおおよそ理解していただいたことであろう。MT4を使えば、広いスプレッドや手数料を支払う必要がない。また、逆指値方式(順張り)を使えば、相場が逆行した場合でも、ナンピン買い下がりや売り上がりが激減するので、その分含み損も極少化する。またMT4採用会社のほとんどは、IFD等の待機注文には証拠金を要求しないので、資金管理に余裕が出てくる。 

 ここから先は、トラリピに関する過去のブログ「トラリピは半自動(半手動)がお勧め」と「トラリピは逆指値がお得」でVPS(外部コンピュータレンタル)不要且つ順張り(トレンドフォロー)の逆指値手法を自らのパソコンから発注する方法をマスターしていただきたい。また、「トラリピの仕掛けどころ」も参考にされたい。 

 MetaGenic社開発のEA、TrapTradeSystemは詳しい説明書付です。順張り専用の逆指値注文が可能であるほか、個々のトラップに損切り注文も入れることもできます。また、VPSご利用の方向けに、希望の多いトレーリングストップを追加したTrapTradeSystem_TSも公開しております。

トラリピ関連EAは、こちらで公開中

ご質問、ご照会は上記URLの「Contact」タブからお願いします。

(追記)

 TarapTradeSystem最新更新版については、当ブログ「MT5版TrapRepeatIFD EAを開発しました」を参照ください。MT4版EAにMT5版EAを無償添付しております。

 

 

 

 


MT4外貨口座で日本円によるバックテストができる

2017-07-11 10:40:51 | 投資

 長い間MT4を使っていながら、知らなかったことだが、USDやEURでしか口座が開設できない海外口座にあっても、バックテストは日本円でも行うことができる。金・商品・株式指数等の気配値をリアルタイムで知ることができる海外口座にデモ口座を作成している人は多いが、そのような口座でも日本円によるバックテストが可能だったのである。 

 豊嶋久道氏お勧めのAlpari社での口座取り扱い通貨はUSD,EUR,GLDの3通貨となっている。一方、バックテストが可能となっている通貨も下記のように限定されているかに見える。そこでの通貨はUSD,EUR,GBP,CHFとなっている。

 

 日本円でもバックテストがしたい場合は、初期証拠金を1000000に通貨をJPYに変えるだけでよい。Alpariでは過去20年間のデータが蓄積されているので、バックテスト専用デモ口座としても重宝である。 

 Alpariについては、過去ブログ「どっこいアルパリは生きていた!」を参照されたい。


新MT4ライブラリー <LibEA4.mqh>

2017-07-05 14:19:02 | 投資

 豊嶋久道著Kindle版「EA実践プログラミング」ライブラリーの優れた点については既述の通りであるが、先日来、少し厄介な状況に直面してきた。トラブルの元はFX業者側にあるが、ライブラリーではそのような想定外の事態には対応していなかったのである。 

 LibEA4.mqhを利用したEA例で説明してみよう。仕掛けシグナルをsig_entry、手仕舞いシグナルをsig_exit、ストップロスをSLpipsとすると、そのEAは次のように簡便なものとなる。(本体部分のみ)

//ティック時実行関数

void OnTick()

{

   //損切りオーダーの付加

   if(MyOrderStopLoss() == 0) MyOrderModify(0, MyOrderShiftPrice(-SLpips), 0);

   //成行売買

   MyOrderSendMarket(sig_entry, sig_exit, Lots);

}

 このEAを4時間足以上の時間足で稼働させると、損切り決済に遭遇することが多くなる。その場合、仕掛けシグナルが有効であると、再エントリーとなり、ボラティリティが高い場合、二度三度と損切りを繰り返してしまうことがある。そこで同一時間足(バー)内では、注文を繰り返さないよう、MyMarketSendMarket()に次の条件を付加してみた。

   //成行売買

     static datetime time = Time[0];

     if(Time[0] != time){

     MyOrderSendMarket(sig_filter, sig_exit, Lots);

     time = Time[0];}

 これで一安心と就寝したものの、翌朝チャートを開いてみると、6時に仕掛けシグナルが出ているのにエントリーがないのである。不審に思って、ターミナルのエキスパートタブを開いてみると、休日でもないのに132 Market is closedなるエラーメッセージが出ている。 

 エラーとなった原因は二つあった。

① 海外業者の中には、平日の日付変更時(夏時間では日本時間の午前6時)には、ロールオーバーのため1~2分間トレードできない仕様にしているところがある。当然この間は休日同様の扱いとなり、オーダーが出されても市場は休場(Market is closed)とのエラーとなってしまう。豪州系業者にはこのような仕様のところが多く,Pepperstone社では、その警告を正式に発している。https://pepperstone.com/en/support/about-trading/market-opening-hours 

② MyOrderSendMarket()に条件を付加したこと

 新ライブラリーでは、エラーが発生した場合にはエラーの原因が消滅して正常に復帰した際には、自動的に再注文が出される仕組みになっている。ところが、この関数はvoidで定義されているため、たとえエラーであっても、「同じ時間足では再注文を出さない」との付加条件が働いて、サーバーが正常に復帰しても同一時間足内(同一バー内)では再注文が出せなくなっていた。 

解決策

① voidで定義されていたMyOrderSendMarket()をbool関数に変更し、正常に発注が終了した時に限り、「同じ時間足内では再注文を出さない」ことにした。

//シグナルによる成行注文

bool MyOrderSendMarket(int sig_entry, int sig_exit, double lots, int pos_id=0)

{

   //ポジション決済

   MyOrderCloseMarket(sig_entry, sig_exit, pos_id);

   //買い注文

   if(sig_entry > 0) MyOrderSend(OP_BUY, lots, 0, pos_id);

   //売り注文

   if(sig_entry < 0) MyOrderSend(OP_SELL, lots, 0, pos_id);

  

   //エラーの場合

   int err = GetLastError();

   if(err > 0)

   {

     return false;

   }

   return true; //正常終了

}

② MyOrderSend()を変更

 MyOrderSendMarket()では、エラーの有無は毎チックで行われる。そのため、一旦エラーが発生すると、この関数の裏側で働くMyOrderSend()もエラーが解消するまで毎チックで再注文が繰り返されることになる。事例のように、毎朝1~2分間EAが稼働できない状況では、その間夥しい数の再注文が出し続けられる。4時間足以上の長い時間足でトレードする場合では、10秒間に一度再注文が出されれば十分なので、MyOrderSend()関数を次のように変更した。

//注文の送信

bool MyOrderSend(int type, double lots, double price=0, int pos_id=0)

{

   color ArrowColor[6] = {clrBlue, clrRed, clrBlue, clrRed, clrBlue, clrRed}; //矢印の色データ

 

   CheckPosID(pos_id);  //ポジション番号のチェック

   if(MyOrderType(pos_id) != OP_NONE) return true; //注文済み

 

   price = NormalizeDouble(price, _Digits); //価格の正規化

 

   //RefreshRates();

   if(type == OP_BUY) price = Ask;  //成行注文の買値

   if(type == OP_SELL) price = Bid; //成行注文の売値

 

   //注文送信

   while(true)

   {

      if(IsTradeAllowed() == true)

      {

         RefreshRates();

         int ret = OrderSend(_Symbol, type, lots, price, Slippage, 0, 0,

                       IntegerToString(MagicNumber[pos_id]),

                       MagicNumber[pos_id], 0, ArrowColor[type]);

         if(ret != -1) return true;

  

         int err = GetLastError();

         Print("MyOrderSend : ", err, " " , ErrorDescription(err));

         //return false;

       }

       //return true; //正常終了

       Sleep (10000);

   }

}

③ 結果検証

 本日の朝6時にもたまたま買いシグナルが出ており、EAは正常に作動したようで、シグナル通りのポジションが形成されていた。ターミナルのエキスパートには、企図した通り132 Market is closedが10秒間隔で6回出ていて、6:01には正常発注がなされている。このことからサーバーは、ロールオーバーのため毎朝1分間注文を受け付けないことも確認された。利用している業者は、Pepperstone同様豪州系である。 

 結果として、著者開発のライブラリーに変更を加えてしまったので、著者に迷惑が掛からぬよう変更後のライブラリーは別名にして使用している。