#property show_inputs #property copyright "Birt" #property link "http://eareview.net" bool is5Digit = false; double max_float_dd = 0; double max_float_dd_pips = 0; double max_float_dd_balance = 0; double cur_float_dd = 0; double cur_float_dd_pips = 0; int init() { if (Digits % 2 == 1) { is5Digit = true; } if (GlobalVariableCheck("max_floating_drawdown")) { max_float_dd = GlobalVariableGet("max_floating_drawdown"); } if (GlobalVariableCheck("max_floating_drawdown_balance")) { max_float_dd_balance = GlobalVariableGet("max_floating_drawdown_balance"); } if (GlobalVariableCheck("max_floating_drawdown_pips")) { max_float_dd_pips = GlobalVariableGet("max_floating_drawdown_pips"); } } int start() { floatingDD(); string chartComment = ""; chartComment = chartComment + "Current floating drawdown: " + DoubleToStr(cur_float_dd, 2) + "%\n"; chartComment = chartComment + "Maximum floating drawdown: " + DoubleToStr(max_float_dd, 2) + "% (occured at balance " + DoubleToStr(max_float_dd_balance, 2) + " " + AccountCurrency() + ")\n"; chartComment = chartComment + "Maximum floating drawdown pips: " + DoubleToStr(max_float_dd_pips, 1) + "\n"; Comment(chartComment); return (0); } double floatingDD() { if (max_float_dd_balance == 0) max_float_dd_balance = AccountBalance(); int trades = OrdersTotal(); double pips = 0; for (int i = 0; i < trades; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType() == OP_BUY || OrderType() == OP_SELL) { double orderpips = OrderClosePrice() - OrderOpenPrice(); if (OrderType() == OP_SELL) { orderpips *= -1; } orderpips /= MarketInfo(OrderSymbol(), MODE_POINT); if (is5Digit) orderpips /= 10; if (StringFind(OrderSymbol(), "XAU") >= 0 || StringFind(OrderSymbol(), "Gold") >= 0) { orderpips /= 10; } pips += orderpips; } } } if (pips < 0) { cur_float_dd_pips = -pips; } if (-pips > max_float_dd_pips) { max_float_dd_pips = -pips; GlobalVariableSet("max_floating_drawdown_pips", max_float_dd_pips); } double dd = AccountBalance() - AccountEquity(); if (dd > 0) { dd = 100 * dd / AccountBalance(); if (dd > max_float_dd) { max_float_dd = dd; max_float_dd_balance = AccountBalance(); Print("New maximum floating drawdown: " + DoubleToStr(dd, 2) + "%. Current account balance: " + DoubleToStr(AccountBalance(), 2) + " " + AccountCurrency() + ". Current account equity: " + DoubleToStr(AccountEquity(), 2) + " " + AccountCurrency()); GlobalVariableSet("max_floating_drawdown", dd); GlobalVariableSet("max_floating_drawdown_balance", max_float_dd_balance); } } else { dd = 0; } cur_float_dd = dd; }