メタトレーダー(MT4)のEAについて、EAから注文が執行された、複数のポジションを…

、一括で全て決済したい場合はどのような命令文になりますか?

マジック同じ
通貨同じ
売買区分ちがう
ロット数量ちがう

よろしくお願いします。

..[補足]..
回答者さまへ
順番にひとつずつでも構いませんので、当初の質問の条件のポジションが決済される命令文が分かれば、ご伝授願います。

回答1

メタトレーダーのEAからは、複数のポジションを「完全に」一括決済することは無理だと思います。あくまでも、「順番に一つずつ」という処理になります。

ただし、とくに通信トラブルがなければ、100分の1秒とか10分の1秒とかの高速ですべて処理されるので、一括決済されているように見えるだけです。

もし、本当に一括決済したいなら、複数のメタトレーダーから別々にアクセスするしかないでしょうね。ただ、その場合でも、同時に決済されるわけではないでしょうが。

>補足に対して

パーターンその1

一番シンプルな方法です。start()関数内に、以下のように書けばOKです。

if(決済条件)
{
for(int i=0; i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
if(Order Type()==OP_BUY || OrderType()==OP_SELL)
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slip,White);
}
}

パターンその2

一つのEAの中で、何度も同じ決済プログラムを使いたいときは、まず、start()関数のすぐ上あたりに、以下のように決済用のオリジナル関数をあらかじめ定義しておきます。

void ClosePositions()
{
for(int i=0; i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slip,White);
}
}

そして、start()関数内で、以下のように決済用のオリジナル関数を何度でも呼び出すことができます。

if(決済条件1)

ClosePositions();

if(決済条件2)

ClosePositions();

if(決済条件3)

ClosePositions();

参考にしていただければ幸いです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA