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

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

EA作成においてAskを使う時は要注意!

2019-11-17 07:28:11 | 投資

 時々、MT4の学習者が作成されたEAを拝見することがある。大きな誤りとは言えないが、多い誤解の一つにAskの使い方がある。 

 例えば、「価格がボリンジャーバンドのσ1を上抜けたら、成行きで買う」という順張りの命令文を書く場合、ボリンジャーバンドσ+1をBB1としたときの命令は;

if(Ask > BB1) OrderSend( Ask); とされていることがある。これは厳密には誤りである。 

 日頃見慣れているMT4チャート(それ以外のチャートも)では、すべてのインディケータはBidベースで計算されている。終値Close[ ]), High[ ], Low[ ]等の値も同様だ。ボリンジャーバンドσ1の表示もBidベースで表示されているから、AskがBB1を超えたとしても、Bidは未だBB1に達していない場合がある。つまり、チャートを見ていると、価格がσ1に届いていない段階で買い注文が出されてしまうことになる。スプレッド(spread)が考慮されなくてはならない。 

 上記の命令文は、if(Ask > BB1+spread) OrderSend(Ask );と書き直す必要がある。

Ask > BB1+spreadはAsk−spread > BB1と同義である。Ask−spread = Bidであるから、結局、命令文は、if(Bid > BB1)としてもよいことになる。 

 売り注文の場合は、どちらもBidとBidの比較であるから調整を必要としない。