サポートレジスタンス、プライスアクションからトレードセットアップをおこなうには

16 10月 2015, 14:46
MICHAEL JANUS
0
3 441

コンテンツ


はじめに

本稿の内容は、MQL4のコード例がこのトレード手法をに基づいたエキスパートアドバイザーに利用できるように、為替取引や株式、先物商品にも利用できるトレード手法を包括しています。

プライスアクションとサポート・レジスタンスラインの設定はシステムの鍵となる構成要素です。市場へのエントリーはおおむねこの二つの構成要素に基づいています。参考値幅はこれらを参考にして説明されることが多々あります。MQL4のコード例にはリスクを最小限に抑えるパラメーターがあります。これは市場のイグジット参考値を維持し、比較的エントリー値に近い所でそれを止めることによってできます。

口座残高によらず、大きなロットでのトレードができるという利点があります。様々な状況の中でも利益確定できるMQL4コードを用いる事によって、獲得利益目標を決定することについても述べられています。


1. サポート・レジスタンスについて

どの時間軸、どのマーケットのチャートを見ても、ある一定の特徴が現れることから観察される二つの事実があります。一つは、市場の値は長いあいだ同じ値はしめさないことです。十分な時間が経つと、市場の値は目に見えて変化します。チャートのどの時点での値も参考値として利用されます。

ある市場の値は、他のそれよりも良い参考値になることがあります。。それは後で直ぐ述べます二つ目の確固たる事実は、どのチャートも市場のトレンドが反転する特定の値を持っていると言うことです。しばしば、市場は何度もこれらの参考値に到達するとまもなくトレンドを転換することがあります。これらがサポート・レジスタンスレベルであって、どのトレーダーも聞いことがあるものです。サポートとは市場がそれ以下にはならないであろうプライスレベルです。レジスタンスとはそれ以上にはならないであろうプライスレベルのことです。

サポート・レジスタンスはトップ・ボトムという言葉でもしられており、これらのプライスレベルは、このマーケットはいずれそのレベルまで到達するだろうし、そのレベルあたりで反転するだろうというメッセージを届けてくれます。サポート・レジスタンスレベルは参考値として利用できる値であり、高い確率で新しいトレンドが始まるポイントを示してくれると言えるでしょう。サポート・レジスタンスレベルのだいたい中間にある値もまた、よい参考値になります。これを中間値と言うことにします。

どのチャートの一部を切り取ってみても、参考値として利用できるサポート・レジスタンスレベルや中間値の水平線を引くことができます。下の図1の例を見て下さい。

図1.サポート・レジスタンスレベル・中間値

図1. サポート・レジスタンスレベル・中間値

下の紫色のラインは1.09838のサポートレベルを示しています下の紫色のラインは1.09838のサポートレベルを示しています。

二つのラインのおおむね真ん中が中間値で、1.10048です。的確なサポート・レジスタンスの決め方は、主観的なものであり、マーケットのエントリ―・エグジットにおけるトレーダーの選択によって変わり得るものです。ポジションを緻密に決めた値やその近くでポジションを取りたいと思うかもしれません。あるいは、特定のエントリー値など決めないし、値幅が大きければ良いと思うかもしれません。全てはトレーダーのトレードスタイルや獲得利益目標に左右されるものです。

つまり、サポート・レジスタンスの値幅は大きく変わます。適切なトレード条件を見いだせる場合のみ、それらは良い参考になります。

Fig.2. サポート・レジスタンス・プライスレンジ

図2サポート・レジスタンス・プライスレンジ

図2は1分足チャートで4つのサポート・レジスタンス・プライスレンジが描かれています。

あるレンジは大きく、あるものは狭くなっています。言った通り、値幅は主観的なものですが、明らかに短トレンドの天井と底(と中間値)が現れいるのが分かります。

図3から図6は、1分足チャートにおける比較的長めの時間間隔と短めの時間間隔にサポート・レジスタンス・プライスレンジを描いた例になります。

図3・図4は強気市場(上昇トレンド)、図5・図6は弱気市場(下降トレンド)のものです。

図3広い強気市場

図3広い強気市場

図4狭い強気市場

図4狭い強気市場

図5広い弱気市場

図5広い弱気市場

図6狭い弱気市場

図6狭い弱気市場

これらの参考値レベルはプライスアクションのパターンが見て取れるエリアを示してくれます。トレードのセットアップはこれらのプライスアクションのパターンがチャートで見られた時にできるのです。


2. プライスアクションから高確率なセットアップを見つけるには

高確率なトレードセットアップに繋がる、多種多様な2連続のローソク足パターンがあります。3つの例をここで紹介します。これらのパターンの発生は、エントリーの参考値として使われるサポート・レジスタンスレベルで見られます。これからあげる例はどれも1分足のローソク足です。タイトなストップロスオーダーのレンジを決めるように、正確なエントリーポイントを決めるためこの時間軸が頻繁に使われます。

以下の3つのパターンはどれも2本の1分足のローソク足から成っています。参考値レベル(サポート・レジスタンスまたは中間値)の近くでこれらのうち1つのパターンが見られた場合、次の(3本目の)1分足のローソク足の始値がエントリー機会になります。この例は3つのパターンの後に見られます。

最初のパターン、パターン1は、 長い「ヒゲ」をもつものと、次のローソク足の終値が1本目のローソク足のヒゲが伸びている方向と逆方向であることから成っています。ヒゲとは真っすぐ垂直に伸びた線で、上値と始値/終値までのレンジ幅、または下値と始値/終値までのレンジ幅をしめしています。「同時」ローソク足のパターンも最初のローソク足に含まれるでしょう。

図7強気パターン1

図7強気パターン1

図8弱気パターン1

図8弱気パターン1

図7は強気パターンを、図8は弱きパターンをあらわしています。

これらのパターンは「トンカチ」ローソク足のパターンと似ていますが、同時ローソク足のパターンが上向きか下向きらのローソク足の組み合わせと同じように組み込まれているほど、特徴的なものではありません。

図9はこのパターンのタイプが現れた上昇トレンドをあらわしています。

図9上昇トレンド

図9上昇トレンド

2つ目のパターン、パターン2は、2番目のローソク足が最初のローソク足とほぼ同じ長さの実体(始値~終値)をもっているものから成り立っています。

両方のローソク足の実体は始値と終値がほぼ同じです。両方の実体の長さと、対応する始値と終値は、正確に合致するものではありません。弱気パターンを図10に、強気パターンを図11にしめします

これらのパターンは「毛抜き」として知られています. 図12は毛抜きパターンで始まる上昇トレンドが見て取れます。

図10弱気パターン2

図10弱気パターン2

図11強気パターン2

図11強気パターン2

図12下降トレンド

図12下降トレンド

最後のパターン、パターン3は、最初のローソク足のタイプがどんなものでも、それに続く2本目のローソク足の終値が完全に最初のローソク足より上/下にあるもので、ごく一般的なものです。. 図13は強気パターン、図14は弱気パターンを示しています。

図15からはこのパターンから始まる上昇トレンドを見て取れます。

図13強気パターン3

図13強気パターン3

図14弱気パターン3

図14弱気パターン3

Fig.15. 上昇トレンド

図15上昇トレンド

これらのパターンのうち一つを形成する1分足のローソク足のペアを見つけたなら、このポイントで市場にエントリーするかどうか決める別の要素を考えましょう。

それは、潜在的なエントリー値と直近のサポート・レジスタンス参考値との差異です。エントリー値がレジスタンスレベルより遠すぎる場合、プライスアクションのパターンによらず、ポジションを取りたくはないでしょう。

前に述べたように、実際のマーケットエントリーは次の1分足のローソク足が始まったその瞬間に起こります。言い換えれば、パターンの一つを2本のローソク足が形作り、3本目が始まった時です。オーダーを始値に置くの正解です。これはセットアップに利用するMQL4コードが書かれた次のセクションで図示していきます。明らかに、プライスアクションがこれらトレードセットアップの鍵となっていることから、マーケットのオーダーはいつもエントリーのために使われていますエントリーのための待機注文は使っていません。


3. プライスアクション・セットアップのMQL4コード

トレーディングシステムエントリーにおける手法について述べました。ここからそれを実行するコードについて説明していきます。

以下のコードブロックは、プライスアクションとサポート・レジスタンスレベルに基づいたEAに利用されています。。最初に変数を定義します。変数のいくつかは付近の1分足のローソク足の始値、高値、安値、終値から成っています。これら4つの値は現在の1分ローソク足と前2本のローソク足から見つけられます。これはiOpen(), iHigh(), iLow(), and iClose()を使ってなされます。

きちんと形成された2本のローソク足パターンを探すため、現在のローソク足から2分前のローソク足がパターンの1本目になります。(図7の例で言えば左側のローソク足です。)そのローソク足はCandle1と識別されます。1分後に形成される次のローソク足はCandle2と識別されます(図7の右側のローソク足)。

現在のローソク足はCandle3と識別され、Candle2の右側に形成されていきます。リアルタイムのプライスアクションがモニターされるので、エキスパート・アドバイザーが計算する現在と前2本ローソク足のデータがフォームになります。

double O1=NormalizeDouble(iOpen(Symbol(),PERIOD_M1,2),4);

上記のコードはCandle1の始値を定義します。

変数の値は少数になることから、2桁のデータタイプが使われます。「O1」はパターンにおける最初のローソク足の始値をあらわします。iOpen() はこのデータを最初のパラメーターとしてSymbol() に渡します。そのためEAが機能しているチャートのどのシンボルとも一緒に運用できます。

「PRION_M1」は1分の時間軸と前のパラメーターを挙げ、ここでは2の値を与えて現在のローソク足とのシフトと定義しています。0のシフトは現在、1は1本前、2は2本前のローソク足をあらわしています。

同様に、O1、H1、 L1 、C1はCandle1の始値、高値、安値、終値をそれぞれあらわします。O2、 H2、 L2、 C2、そしてO3、H3、L3、C3はCandles 2 と3のそれをあらわします。

以下のコードブロックはこれらの変数を定義した例です。

//---- ローソク足1 OHLC
double O1=NormalizeDouble(iOpen(Symbol(),PERIOD_M1,2),4);
double H1=NormalizeDouble(iHigh(Symbol(),PERIOD_M1,2),4);
double L1=NormalizeDouble(iLow(Symbol(),PERIOD_M1,2),4);
double C1=NormalizeDouble(iClose(Symbol(),PERIOD_M1,2),4);
//---- ローソク足2 OHLC
double O2=NormalizeDouble(iOpen(Symbol(),PERIOD_M1,1),4);
double H2=NormalizeDouble(iHigh(Symbol(),PERIOD_M1,1),4);
double L2=NormalizeDouble(iLow(Symbol(),PERIOD_M1,1),4);
double C2=NormalizeDouble(iClose(Symbol(),PERIOD_M1,1),4);
//---- ローソク足3 OHLC
double O3=NormalizeDouble(iOpen(Symbol(),PERIOD_M1,0),4);
double H3=NormalizeDouble(iHigh(Symbol(),PERIOD_M1,0),4);
double L3=NormalizeDouble(iLow(Symbol(),PERIOD_M1,0),4);
double C3=NormalizeDouble(iClose(Symbol(),PERIOD_M1,0),4);

条件宣言文を次に示します。ここでは3つの主な2本のローソク足パターンの内、1つの実行を定義する条件文を示します。

パターン1の例は、前の章の図7で示されたもので、以下の宣言文がtrueならば実行します。

if(C1 >= O1 && L1 < O1 && ((O1-L1)>(C1-O1)) && C2 >= O2 && C2 > H1 && L2 > L1)

このパターンは6つの条件があります。最初はC1>=O1で、Candle1が上方向か、その始値が終値と同じかを定義します。L1<O1はCandle1が始値より小さいことを定義します。その次はCandle1の始値と安値の差異が終値と始値とのそれより大きいことを定義します。これはCandle1は実体より長い下向きのヒゲを持っていなければならないことを意味します。

4番目の条件はCandles2について定義しており、終値は始値以上でなければなりません。C2>H1はCandle2がCandle1の高値より大きくなければならないことを必要としています。最後にCandle2の安値はCandle1の安値より大きくなければいけません。

これらうすべての条件がパターン1の実行において満たされたならば。以下のコードが買いオーダーを発注します。

このオーダーは0.1ロット、スリッページは5、ストップロスは呼値から10ピップス、利益確定は50ピップスです。

//---- パターン 1 - 上昇 
 if(C1 >= O1 && L1 < O1 && ((O1-L1)>(C1-O1)) && C2 >= O2 && C2 > H1 && L2 > L1)
  { 
   OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-10*Point,Bid+50*Point);
   return;
  }

反対に、売りオーダーを発注するには、条件を図8のような弱気パターンに適応するように変えましょう。また、OrderSend() 関数のパラメーターもそれに応じて変えましょう。

以下のコードは上記と同じように、反対の方向の時にオーダーを発注します。:

//---- パターン 1 - 下降
 if(C1 <= O1 && H1 > O1 && ((H1-O1)>(O1-C1)) && C2 <= O2 && C2 < L1 && H2 < H1)
  { 
   OrderSend(Symbol(),OP_SELL,0.1,Bid,5,Ask+10*Point,Ask-50*Point);
   return;
  }

類似のコードはパターン2やパターン3が発生する場合でもオーダーを発注します。

強気パターン2(毛抜き)は以下の条件文です。:

//---- パターン 2 - 上昇
 if(C1 < O1 && C2 > O2 && ((O1-C1)>(H1-O1)) && ((O1-C1)>(C1-L1)) && ((C2-O2)>(H2-C2)) && ((C2-O2)>(O2-L2)) && O2 <= C1 && O2 >= L1 && C2 >= O1 && C2 <= H1)
  { 
   OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-10*Point,Bid+50*Point);
   return;
  }

弱気パターンは以下のコードです。:

//---- パターン 2 - 下降
 if(C1 > O1 && C2 < O2 && ((C1-O1)>(H1-C1)) && ((C1-O1)>(O1-L1)) && ((O2-C2)>(H2-O2)) && ((O2-C2)>(C2-L2)) && O2 >= C1 && O2 <= H1 && C2 <= O1 && C2 >= L1)
  { 
   OrderSend(Symbol(),OP_SELL,0.1,Bid,5,Ask+10*Point,Ask-50*Point)
   return;
  }

最後に、パターン3は強気と弱気両方のセットアップ条件を持っています。:

//---- パターン 3 - 上昇
 if(C1 > O1 && ((C2-O2)>=(H2-C2)) && C2 > O2 && C2 > C1)
  { 
   OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-10*Point,Bid+50*Point);
   return;
  }

 //---- パターン 3 - 下降
 if(C1 < O1 && ((O2-C2)>=(C2-L2)) && C2 < O2 && C2 < C1)
  { 
   OrderSend(Symbol(),OP_SELL,0.1,Bid,5,Ask+10*Point,Ask-50*Point)
   return;
  }
ストップロスや利益確定などのいくつかのオーダーパラメーターは、上記の例のように明確に宣言された値のかわりに、変数を入れる事も出来ます。


4. プライスアクションにサポート・レジスタンスを組み込むには

次はそれぞれの参考値にあわせたサポート・レジスタンスレベルの値をモニターする追加コードをプライスアクションのコードに組み込んでいきます。

EAはマーケットが特定のプライスレベルに到達するのを見ます。そのレベルに到達すると、パターン1~3のようなプライスアクションのタイプを探します。これら3つすべてのパターン、強気か弱気か、ただ一つか小さな数だけかであるでしょう。以下のコードは相場が特定の値、ここでは1.09000ユーロドルに届くかどうかチェックスルため、2つ以上の変数を使っています。

ここの例では、このコードがアクティブになったとき、ユーロドルが1.09000より下でトレードされています。

double ref=1.09000;
int refhit=0;

if(O2 < ref && C3 >= ref)
  {
   refhit=1;
   return;
  }

ref変数はEAが見ていた参考値のレベル(サポート、レジスタンス、または中間値)を示します。他の変数refhitは、現在のマーケットが参考値のレベルに到達しているか、またはまだしていないかを宣言します。refhit変数は0か1の整数です。Refhit変数は0か1の整数です。初期値は0で、その場合参考値のレベルに到達していないことをあらわします。

以下の条件は、変数がもし条件を満たしたならば、参考値レベルに到達して、直ちにマーケットに参加するものです。. これら2つの変数がプライスアクションのコードに加えれます。

ユーロドルの例で言えば、強きパターン3のセットアアプは1.09000より上で見られます。

以下はパターン3のコードを修正した例です。:

if(refhit==1 && C1 > O1 && ((C2-O2)>=(H2-C2)) && C2 > O2 && C2 > C1 && C1 > ref && C2 > ref)
  { 
   OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-10*Point,Bid+50*Point);
   return;
  }

最初の追加条件 refhit=1は、。ref変数の定義された値に届くか越えているマーケットを要求しています。ここでは1.09000です。そこに到達するまでマーケットは1.09000より下でトレードされています。追加されたあと2つの条件はパターン3のローソク足が1.09000のref変数の上近くにあることを要求します。

最後の例、図16は、1.07660から1.07841までの短期間のサポート・レジスタンスレンジでのユーロドルのトレードです。

図16. ユーロドル

図16. ユーロドル

イメージの右下部分をみると、マーケットは2つのレベルの間でこれまでのほぼ半分の値動きでトレードされているのか分かります。

買いエントリーは、1.07660のサポートレベルで見られます。マーケットは常にはサポート・レジスタンスレベルの正確な値には到達しないことから、付近の値が参考値レベルとして使われます。

このケースでは1.07690、サポートレベルより3ピップス上でしょう。パターン1から3までに使用された強気のセットアップが見て取れます。

//---- 変数の定義 ------------------
//---- ローソク足1 OHLC
double O1=NormalizeDouble(iOpen(Symbol(),PERIOD_M1,2),4);
double H1=NormalizeDouble(iHigh(Symbol(),PERIOD_M1,2),4);
double L1=NormalizeDouble(iLow(Symbol(),PERIOD_M1,2),4);
double C1=NormalizeDouble(iClose(Symbol(),PERIOD_M1,2),4);
//---- ローソク足2 OHLC
double O2=NormalizeDouble(iOpen(Symbol(),PERIOD_M1,1),4);
double H2=NormalizeDouble(iHigh(Symbol(),PERIOD_M1,1),4);
double L2=NormalizeDouble(iLow(Symbol(),PERIOD_M1,1),4);
double C2=NormalizeDouble(iClose(Symbol(),PERIOD_M1,1),4);
//---- ローソク足3 OHLC
double O3=NormalizeDouble(iOpen(Symbol(),PERIOD_M1,0),4);
double H3=NormalizeDouble(iHigh(Symbol(),PERIOD_M1,0),4);
double L3=NormalizeDouble(iLow(Symbol(),PERIOD_M1,0),4);
double C3=NormalizeDouble(iClose(Symbol(),PERIOD_M1,0),4);

double ref=1.07690;
int refhit=0;
//-----------------------------------------

int start()
 {
 //---- リファレンスチェック
 if(O2 < ref && C3>=ref)
  {
   refhit=1;
   return;
  } 
 //---- パターン 1 - 上昇 
 if(refhit==1 && C1 >= O1 && L1 < O1 && ((O1-L1)>(C1-O1)) && C2 >= O2 && C2 > H1 && L2 > L1 && C1 > ref && C2 > ref)
  { 
   OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-10*Point,Bid+100*Point);
   return;
  }
 //---- パターン 2 - 上昇
 if(refhit==1 && C1 < O1 && C2 > O2 && ((O1-C1)>(H1-O1)) && ((O1-C1)>(C1-L1)) && ((C2-O2)>(H2-C2)) && ((C2-O2)>(O2-L2)) && O2 <= C1 && O2 >= L1 && C2 >= O1 && C2 <= H1 && C1 > ref && C2 > ref)
  { 
   OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-10*Point,Bid+100*Point);
   return;
  }
 //---- パターン 3 - 上昇
 if(refhit==1 && C1 > O1 && ((C2-O2)>=(H2-C2)) && C2 > O2 && C2 > C1 && C1 > ref && C2 > ref)
  { 
   OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-10*Point,Bid+100*Point);
   return;
  }
 //---
return;
}

図17ユーロドルの反転

図17ユーロドルの反転

図18ユーロドル エントリー

図18ユーロドル エントリー

Fig. 19. EURUSD exit

Fig. 19. EURUSD exit

強気パターンのための全てのコードセクションは、マーケットが1.07690まで下がってくることと、Candle1と2がそれより上にあることを要求しています。

また、利益確定レベルは前の例から2倍の幅のところになりました。図17ではマーケットが下方向へ転換し、上方向へ転換するまえに、1.07690をわずかに抜け出し、1.07690へ到達したことが分かります。これはrefhit変数が1の値も変えるようにしたことが原因です。

下方向から反転するとまもなく、強気パターン3が形成されました。これは買いオーダーが発注される場所で、図18で図示されているとおりポジションは1.07740でエントリーとなっています。. Candle3の始値、指値は1.07720です。許容スリッページが5のため、オーダーは1.07740で約定しました。)この点から、図19に示すように、マーケットは強い上昇トレンドで始まりました。ストップロスの値へは到達せず、ポジションは1.08740で利益確定されました。


まとめ

ここまででの例を見ていくと、サポート・レジスタンスレベルのモニタリングが組み込まれたプライスアクションの利用はトレードのセットアップを決定するのにとても効果的だと言えます。

ここで紹介されたMQL4コードはもちろん部分的なもので、それだけではEAとして機能しません。これらのコード例は完全なエキスパートアドバイザーのブロックを組むために利用されます。第一のゴールは、トレード手法のコンセプトを説明することでした。他のプライスアクションのパターンもエントリーとエグジットの両方のために作成することができます。皆様の努力が実ることを願っています。

MetaQuotes Software Corp.により英語から翻訳された
元の記事: https://www.mql5.com/en/articles/1734

ラブシェール資産運用法の統計的検証 ラブシェール資産運用法の統計的検証

この記事では、マーチンゲール法よりは攻撃的ではないが、かけ金のアップは2倍ではなく一定の額というラブシェール資産運用法の統計的性質を検証する。

価格変動の速度と傾向に基づくトレードアイディア 価格変動の速度と傾向に基づくトレードアイディア

この記事では、価格変動の速度と傾向に基づいたトレードアイディアについて紹介しています。検証する戦略の持続性を明らかにする目的で、取引エキスパートアドバイザのテストとして、MQL4言語でトレードアイディアの形式化が行われます。また、チェックや研究、最適化をすることによって、記事に書かれている例の最も良いパラメータが明確になります。

プライスアクション。はらみ足(Inside Bar)トレード戦略の自動化 プライスアクション。はらみ足(Inside Bar)トレード戦略の自動化

本稿は、はらみ足戦略に基づくメタトレーダー4エキスパートアドバイザーの開発について書かれています。ペンディングとストップオーダーのセッティングルールと、はらみ足と判断する規則についても述べられています。テストと最適化の結果が書かれています。

DLLを経由したメタトレーダーターミナルの管理 DLLを経由したメタトレーダーターミナルの管理

本稿は通知機能の設定をする例を紹介しながら補助DLLライブラリを経由してメタトレーダーユーザーのインターフェイスを使うことについて書かれています。ライブラリソースコードとスクリプトのサンプルを添付しています。