時々、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の比較であるから調整を必要としない。