大家好,今天我们来聊聊一个非常实用的功能:如何在账户回撤达到特定百分比时自动平仓。这段代码可以帮助你在回撤超出预设值时,自动关闭所有打开的订单,保护你的资金安全。
使用这个功能非常简单,只需输入订单的魔术数字(如果想控制所有订单,可以输入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("平仓失败,错误信息: ",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 ); } //+------------------------------------------------------------------+