皆さん、こんにちは!今日は、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