皆さん、こんにちは!今日は、MetaTrader 4で使えるコードの紹介をします。このコードは、アカウント残高の特定の割合に達した場合に、全ての開いている注文を自動的にクローズする機能を持っています。
使い方は簡単です。まず、クローズしたい注文のマジックナンバーを入力します。全ての注文を制御したい場合は、0を入力してください。そして、ドローダウン率の最大値を設定します。この値に達すると、コードが自動的に注文をクローズします。
このコードを使うには、DD_closeという関数を呼び出すだけです。
このコードに基づいて作成されたEAのヘッダーファイルも添付しています。
// このオプションを使うには、関数を呼び出すだけです : ( DD_close ) //+------------------------------------------------------------------+//| グローバルスコープ |//+------------------------------------------------------------------+bool Close_All_V; //+------------------------------------------------------------------+//| メイン関数 |//+------------------------------------------------------------------+// DD: ここでドローダウン率を設定します。100は決して注文をクローズしないことを意味します。// Magic_Number: あなたのEAのマジックナンバー。全ての注文を制御したい場合は0を入力します。void DD_close(int DD,int Magic_Number) { if(DD(Magic_Number)>=DD) Close_All_V=true; if(Close_All_V) Close_All(Magic_Number); } //+------------------------------------------------------------------+//| クローズチェック |//+------------------------------------------------------------------+void Check_Close(int Check_Number) // 注文をクローズするか確認 { if(Check_Number<0) Print("OrderClose failed with error: ",ErrorDescription(GetLastError())); else Close_All_V=false; } //+------------------------------------------------------------------+//| 全てをクローズ |//+------------------------------------------------------------------+void Close_All(int M_N) { int Loop=0; for(int i=0; Loop<OrdersTotal(); i++) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { Loop++; if(OrderSymbol()==Symbol()) if(OrderMagicNumber()==M_N || OrderMagicNumber()==0) { if(OrderType()==OP_BUY) Check_Close(OrderClose(OrderTicket(),OrderLots(),Bid,100,clrNONE)); if(OrderType()==OP_SELL) Check_Close(OrderClose(OrderTicket(),OrderLots(),Ask,100,clrNONE)); } } } //+------------------------------------------------------------------+//| 損失を計算 |//+------------------------------------------------------------------+double Loss(int M_N) { double re=0; int Loop=0; for(int i=0; Loop<OrdersTotal(); i++) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { Loop++; if(OrderSymbol()==Symbol()) if(OrderMagicNumber()==M_N || OrderMagicNumber()==0) re=re+OrderProfit(); } return re * -1; } //+------------------------------------------------------------------+//| ドローダウン率を計算する |//+------------------------------------------------------------------+double DD(int M_N) { return ( 100 / AccountBalance ( ) ) * Loss ( M_N ); } //+------------------------------------------------------------------+

コメント 0