investment

【第1回】エンベロープを逆張りで用いた検証

みなさん、こんにちは!
omurinです。
今回からfxにおける検証結果を投稿していこうと思います。

fxを初めて約1年がたち、安定して利益を得ることができてきました。
逆に言うとそれまでは利益どころか損失が膨らむばかりでした。

皆さんは利益の出る手法を本やネットで探して日々試行錯誤してトレードをしていると思います。しかし、それでもほとんどの人がうまくトレードをできずに損失が膨らみ、fxをやめていく人は多いです。なぜ、損失が膨らむのでしょうか?実際、omurinも本をたくさん読み、ネットでもいろんな手法を試してきました。しかし、omurin自身もこれといったトレードができずに苦しみました。

ここで一つ皆さんに行っておきたいことがあります。
それは本やネット上の情報を鵜呑みにしてはいけないということです。

本やネットの情報が必ずしも間違っているとは思いません。しかし、ネットや本で負けたトレード手法を見たことがあるでしょうか?まず見かけないと思います。

ここでもう一つ言っておきたいことがあります。
それはfxで100パーセント勝てる手法は存在しないと

勝てる手法をネットや本で調べて試したとしても負けることが必ずあると皆さんには知ってほしいです。
悪く言ってしまえば、本やネットの情報はすべて結果論です。うまくいった部分を切り抜いて皆さんに紹介しているに過ぎないのです。

さてさて、第1回ということもあり、前置きが長くなってしまいましたが本題へ進んで行きたいと思います。
ブログである以上、結果論を紹介することにはなるのですが、omurinは3年間のバックデータを使用して勝てる手法であるのを検証していきたいと思います。

今回は皆さんも一度は聞いたことがあるエンベロープについて紹介していきたいと思います。
エンベロープとボリンジャーバンドは逆張り、それとも順張りなのかという迷う人もいるでしょう。今回はエンベロープの逆張りを検証していきたいと思います。

omurinはエンベロープの計算方法などは詳しく知らないので省略します。

とりあえず、今回使用したソースコードを紹介したいと思います。

//product omurin

//マジックナンバーの定義
#define MAGIC  1111

//パラメーターの設定//
extern double Lots = 0.1;     //取引ロット数
extern int Slip = 10;         //許容スリッページ数
extern string Comments =  ""; //コメント

//変数の設定//
int Ticket_L = 0; //買い注文の結果をキャッチする変数
int Ticket_S = 0; //売り注文の結果をキャッチする変数
int Exit_L = 0;   //買いポジションの決済注文の結果をキャッチする変数
int Exit_S = 0;   //売りポジションの決済注文の結果をキャッチする変数

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//初期化//
//エンベロープ
double High_Envelopes=0;
double Low_Envelopes=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
//エンベロープ
   High_Envelopes=iCustom(NULL,0,"Envelopes",14,0,"Simple","Close",0.1,0,1);
   Low_Envelopes=iCustom(NULL,0,"Envelopes",14,0,"Simple","Close",0.1,1,1);
   
//買いポジションのエグジット
   if((High_Envelopes<Close[1])
      && (Ticket_L != 0 && Ticket_L != -1))
     {
      Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red);
      if(Exit_L ==1)
        {
         Ticket_L = 0;
        }
     }

//売りポジションのエグジット
   if((Low_Envelopes>Close[1])
      && (Ticket_S != 0 && Ticket_S != -1))
     {
      Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Blue);
      if(Exit_S ==1)
        {
         Ticket_S = 0;
        }
     }

//買いエントリー
   if(((Low_Envelopes<Open[1])&&(Low_Envelopes>Close[1]))
      && (Ticket_L == 0 || Ticket_L == -1)
      && (Ticket_S == 0 || Ticket_S == -1))
     {
      Ticket_L = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,0,0,Comments,MAGIC,0,Red);
     }

//売りエントリー
  if(((High_Envelopes<Open[1])&&(High_Envelopes>Close[1]))
      && (Ticket_S == 0 || Ticket_S == -1)
      && (Ticket_L == 0 || Ticket_L == -1))
     {
      Ticket_S = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,0,0,Comments,MAGIC,0,Blue);
     }


   return(0);
  }

詳しい解説は省略したいと思います。また、初心者に優しい解説を別記事で紹介したいとは思っています。

エンベロープで使用した値

  • 期間は14本を使用
    • 理由:スタンダード期間が14本のため
  • シグマの値は0.1を使用
    • 理由:最も一般的であり、トリガーにするため

エントリー・エグジットの条件

  • 買いエントリー
    • 1本前のローソク足の始値が下のエンベロープよりも下
    • 1本前のローソク足の終値が下のエンベロープよりも上
  • 売りエントリー
    • 1本前のローソク足の始値が上のエンベロープよりも上
    • 1本前のローソク足の終値が上のエンベロープよりも下
  • 買いエントリーのエグジット
    • 1本前のローソク足の終値が上のエンベロープよりも上
  • 売りエントリーのエグジット
    • 1本前のローソク足の終値が下のエンベロープよりも下

バックデータによるサンプル例

 

結果はこのようになりました

通貨ペア USD/JPY 1時間足
期間 2017.01.01~2019.12.31
ロット数 0.1(1万通貨)
初期証拠金 10000.00
純益 -1128.20
プロフィットファクタ 0.90
総取引数 813
期待利得 -1.38
勝率 61.61%
勝ちトレード(平均) 20.11
負けトレード(平均) -35.87

 

通貨ペア GBP/JPY 1時間足
期間 2017.01.01~2019.12.31
ロット数 0.1(1万通貨)
初期証拠金 10000.00
純益 -4303.98
プロフィットファクタ 0.81
総取引数 1033
期待利得 -4.17
勝率 64.47%
勝ちトレード(平均) 26.87
負けトレード(平均) -60.49

結果を簡単に説明するとUSD/JPYの場合、3年間1万通貨で取引すると、自分の持っている資金100万円が90万円になります。GBP/JPYの場合、100万円が57万円になってしまいます。

エンベロープを用いた手法だけでは勝てないことが分かります。勝てない理由としては損切の設定ができていないことが原因です。負けトレードの平均が大きいのもそれが原因です。しかし、勝率が6割もあるので改善の余地は十分にあると思います。特にレンジ相場での勝率はさらに高く、負けたとしても損失は大きくならないです。しかし、トレンドが出てるときにはポジション保有期間が長くなり、損失が大きくなる傾向にあります。

まとめ

エンベロープの検証結果
  • 短期戦には良い指標になる(ローソク足24本分ぐらいまで)
  • 長期戦で使うのは危険(損失が大きくなる)
  • 勝率が高いのでトリガーとしては活躍できる
  • エンベロープだけでは勝てない
[第2回]エンベロープとSMAを用いたトレード手法前回検証したエンベロープにフィルタをかけて勝率を上げたいと思います。今回、用いるフィルタはSMA(単純移動平均線)でエンベロープのトレード精度を上げたいと思います。 ゴールデンクロスとデッドクロスをベースにフィルタをかけたいと思います。...