自動売買を行うにあたっては、利確や損切りを予め設定しておくことが重要である。成行注文(Instant Execution)の場合は、OrderSend( )の中でパラメータとして直接設定することが可能である。セカンドダウン(Market Execution)方式をとるブローカーでは、OrderSend()関数では利確や損切り値が設定できないので、注文送信後にOrderModify( )関数で、利確・損切り値を設定することになる。
EAで数個のポジションを一斉に決済したい場合がある。複数ポジションンの総利益が10万円に達した場合には利益確定、あるいは損失の総額が5万になれば損切りのため、全ポジションを決済したいという場合に役立つのがOrderProfit( )という関数である。
OrderProfit( )を利用するにあたって迷ってしまう点がある。例えば、EURUSDを取引する際、利確額を100ドル、損切額を50ドルとした場合、次のようなEAを作成したとする。
// 利確額・損切り額に達すれば全決済
double profit = 0;
for(int i=0; i<OrdersTotal(); i++)
{
profit += OrderProfit(i);
if(profit >= 100 || profit <= -50) OrderClose(i);
}
このEA、一見文法的に正しいように見えて実は正しいとは言えない。日本の多くのトレーダーは円口座で取引しているからである。OrderProfit()は証拠金の通貨で返されられることになっている。EURUSDの取引では円口座(証拠金が円」の場合、利確は100000、損切りは50000としなければならない。
上記のことは、バックテストにも適用される。