//+------------------------------------------------------------------+
int dump(string trap="",bool newf=false)   {
//+------------------------------------------------------------------+
  if (PostDiagnosticInfo < 1)    return(0);
  if (newf)                      ddf("");
  BuildDiagString(trap);
  df(diag_string);
  return(0);
}

//+------------------------------------------------------------------+
int BuildDiagString(string trap="")   {
//+------------------------------------------------------------------+
  bar=0;
  diag_string = "\n\n"
              + DateToStr(iTime(Symbol(),Period(),0),                       "'Current candle        ['w D n Y H:I:S']<<=========================================================  ['") + trap + "]\n"
              + NumberToStr(bar,                                            "'Candle#               ['T-4']\n'")
              + DateToStr(Time[bar],                                        "'Candle Open Time      ['w D n Y H:I:S']\n'")
              + NumberToStr(Open[bar],                                      "'Candle Open           ['R-3.5']\n'") 
              + NumberToStr(High[bar],                                      "'Candle High           ['R-3.5']\n'") 
              + NumberToStr(Low[bar],                                       "'Candle Low            ['R-3.5']\n'") 
              + NumberToStr(Close[bar],                                     "'Candle Close          ['R-3.5']\n'") 
              + NumberToStr(Ask,                                            "'Ask price             ['R-3.5']\n'") 
              + NumberToStr(Bid,                                            "'Bid price             ['R-3.5']\n'") 
              + NumberToStr((Ask-Bid)/pnt,                                  "'Spread                ['R-5.1']\n'") 
              + NumberToStr(tickval,                                        "'Pip value             ['R-3.5']\n'") 
              + DateToStr(prev_time,                                        "'prev_time             ['w D n Y H:I:S']\n'")
              +                                                              "FirstTime             [" +BoolToStr(FirstTime)+"]\n"
              + StrToStr(IndiName,                                          "'IndiName              ['T20']\n'")
              + StrToStr(trap,                                              "'trap                  ['T120']<<=====\n\n'")
//------------------------- User parameters ('extern's)
              + StrToStr(EAname,                                            "'EAname                ['T20']\n'")
              + StrToStr(RiskPerTrade,                                      "'RiskPerTrade          ['T40']\n'")
              + StrToStr(AllowableOrders,                                   "'AllowableOrders       ['T20']\n'")
              + StrToStr(BoxIdentifier,                                     "'BoxIdentifier         ['T20']\n'")
              +                                                              "UseBoxTimeConstraints [" +BoolToStr(UseBoxTimeConstraints)+"]\n"
              + StrToStr(BVCandleTypes,                                     "'BVCandleTypes         ['T80']\n'")
              + StrToStr(BVCandleTimeframe,                                 "'BVCandleTimeframe     ['T20']\n'")
              + NumberToStr(BVLookbackCandles,                              "'BVLookbackCandles     ['T-6']\n'")
              + NumberToStr(BVFuzzFactor,                                   "'BVFuzzFactor          ['T-6.3']\n'")
              + StrToStr(MinReversalBarPips,                                "'MinReversalBarPips    ['T20']\n'") 
              + StrToStr(MinKongBarPips,                                    "'MinKongBarPips        ['T20']\n'")
              + StrToStr(MinBVvelocityIntoZone,                             "'MinBVvelocityIntoZone ['T20']\n'")
              + NumberToStr(AllowableLookback,                              "'AllowableLookback     ['T-6']\n'")
              + NumberToStr(PinbarMinWickPercent,                           "'PinbarMinWickPercent  ['R-3.5']\n'") 
              +                                                              "PinbarCheckColor      [" +BoolToStr(PinbarCheckColor)+"]\n"
              + NumberToStr(ProxCloseLookback,                              "'ProxCloseLookback     ['T-6']\n'")
              +                                                              "ProxCloseCheckColor   [" +BoolToStr(ProxCloseCheckColor)+"]\n"
              + StrToStr(MaxPipsEntryFromBox,                               "'MaxPipsEntryFromBox   ['T20']\n'")
              + StrToStr(EntryConfirmationPips,                             "'EntryConfirmationPips ['T20']\n'")
              + StrToStr(UseBollingerBands,                                 "'UseBollingerBands     ['T20']\n'")
              + StrToStr(SLmethod,                                          "'SLmethod              ['T20']\n'")
              + NumberToStr(MinSLpips,                                      "'MinSLpips             ['R-3.5']\n'") 
              + NumberToStr(MaxSLpips,                                      "'MaxSLpips             ['R-3.5']\n'") 
              + StrToStr(TPmethod,                                          "'TPmethod              ['T20']\n'")
              +                                                              "AdjustForSpread       [" +BoolToStr(AdjustForSpread)+"]\n"
              +                                                              "CloseOppositeOrders   [" +BoolToStr(CloseOppositeOrders)+"]\n"
              + StrToStr(DeletePendingOrders,                               "'DeletePendingOrders   ['T20']\n'")
              + NumberToStr(MaxSpreadPips,                                  "'MaxSpreadPips         ['R-3.5']\n'") 
              + NumberToStr(MinSLTPpipsFromEntry,                           "'MinSLTPpips           ['R-3.5']\n'") 
              + NumberToStr(ProfitPipsForSLtoBE,                            "'ProfitForSLtoBE       ['R-3.5']\n'") 
              + NumberToStr(BEpointPips,                                    "'BEpointPips           ['R-3.5']\n'") 
              + NumberToStr(TrailingSLpips,                                 "'TrailingSLpips        ['R-3.5']\n'") 
              +                                                              "TrailOnlyAfterBE      [" +BoolToStr(TrailOnlyAfterBEreached)+"]\n"
              + StrToStr(SnapshotFile,                                      "'SnapshotFile          ['T50']\n'")
              + NumberToStr(NumberOfAttempts,                               "'NumberOfAttempts      ['T-6']\n'")
              + NumberToStr(SecondsBetweenAttempts,                         "'SecsBetwAttempts      ['R-3.5']\n'")
              + NumberToStr(MaxOrdersPerBox,                                "'MaxOrdersPerBox       ['T-6']\n'")
              + NumberToStr(MaxOrdersPerSymbol,                             "'MaxOrdersPerSymbol    ['T-6']\n'")
              + NumberToStr(MaxOrdersPerCurrency,                           "'MaxOrdersPerCurrency  ['T-6']\n'")
              + NumberToStr(MagicNumberBuy,                                 "'MagicNumberBuy        ['T-12']\n'")
              + NumberToStr(MagicNumberSell,                                "'MagicNumberSell       ['T-12']\n'")
              + StrToStr(RHEboxTMoptions,                                   "'RHEboxTMoptions       ['T50']\n'")
              + StrToStr(MaxDrawdownAllowed,                                "'MaxDrawdownAllowed    ['T50']\n'")
              + NumberToStr(PostDiagnosticInfo,                             "'PostDiagnosticInfo    ['T-6']\n'")
              + NumberToStr(RemoveObsoleteBoxes,                            "'RemoveObsoleteBoxes   ['T-6.2']\n\n'")
//              +                                                              "PostDiagnosticInfo    [" +BoolToStr(PostDiagnosticInfo)+"]\n\n"
//------------------------- Important local variables
              + NumberToStr(errnum,                                         "'errnum                ['T-6']\n'") 
              +                                                              "cflag                 [" +BoolToStr(cflag)+"]\n"
              +                                                              "dflag                 [" +BoolToStr(dflag)+"]\n"
              + NumberToStr(bvtf,                                           "'bvtf                  ['T-6']\n'") 
              + NumberToStr(Open1,                                          "'Open1                 ['R-3.5']\n'") 
              + NumberToStr(High1,                                          "'High1                 ['R-3.5']\n'") 
              + NumberToStr(Low1,                                           "'Low1                  ['R-3.5']\n'") 
              + NumberToStr(Close1,                                         "'Close1                ['R-3.5']\n'") 
              + NumberToStr(Open2,                                          "'Open2                 ['R-3.5']\n'") 
              + NumberToStr(High2,                                          "'High2                 ['R-3.5']\n'") 
              + NumberToStr(Low2,                                           "'Low2                  ['R-3.5']\n'") 
              + NumberToStr(Close2,                                         "'Close2                ['R-3.5']\n'") 
              + NumberToStr(High3,                                          "'High3                 ['R-3.5']\n'") 
              + NumberToStr(Low3,                                           "'Low3                  ['R-3.5']\n'") 
              + NumberToStr(High4,                                          "'High4                 ['R-3.5']\n'") 
              + NumberToStr(Low4,                                           "'Low4                  ['R-3.5']\n'") 
              + NumberToStr(High5,                                          "'High5                 ['R-3.5']\n'") 
              + NumberToStr(Low5,                                           "'Low5                  ['R-3.5']\n'") 
              + NumberToStr(High6,                                          "'High6                 ['R-3.5']\n'") 
              + NumberToStr(Low6,                                           "'Low6                  ['R-3.5']\n'") 
              + NumberToStr(NewSL,                                          "'NewSL                 ['R-3.5']\n'") 
              + NumberToStr(bvctype,                                        "'bvctype               ['T-6']\n'") 
              + NumberToStr(bar_h,                                          "'bar_h                 ['T-6']\n'") 
              + NumberToStr(bar_l,                                          "'bar_l                 ['T-6']\n'") 
              + NumberToStr(VIZ,                                            "'VIZ                   ['T-6.5']\n'") 
              + NumberToStr(MBVIZ0,                                         "'MBVIZ0                ['T-6.5']\n'") 
              + NumberToStr(MBVIZ1,                                         "'MBVIZ1                ['T-6']\n'") 
              +                                                              "bvtest                [" +BoolToStr(bvtest)+"]\n"
              + NumberToStr(outbar,                                         "'outbar                ['T-6']\n'") 
              + NumberToStr(engulf,                                         "'engulf                ['T-6']\n'") 
              + NumberToStr(pinbar,                                         "'pinbar                ['T-6']\n'") 
              + NumberToStr(kngbar,                                         "'kngbar                ['T-6']\n'") 
              + NumberToStr(pclose,                                         "'pclose                ['T-6']\n'") 
              + NumberToStr(bartot,                                         "'bartot                ['T-6']\n'") 
              + NumberToStr(sfp,                                            "'sfp                   ['T-6']\n'") 
              +                                                              "sfp_bull              [" +BoolToStr(sfp_bull)+"]\n"
              +                                                              "sfp_bear              [" +BoolToStr(sfp_bear)+"]\n"
              + StrToStr(candle_types,                                      "'candle_types          ['T80']\n'")
              +                                                              "valid                 [" +BoolToStr(valid)+"]\n"
              + NumberToStr(boxent,                                         "'boxent                ['T-6']\n'") 
              + NumberToStr(order_type,                                     "'order_type            ['T-6']\n'") 
              + NumberToStr(dir,                                            "'dir                   ['T-6']\n'") 
              + StrToStr(objname,                                           "'objname               ['T64']\n'")
              + StrToStr(objdesc,                                           "'objdesc               ['T64']\n'")
              + NumberToStr(objtype,                                        "'objtype               ['T-6']\n'") 
              + NumberToStr(obj_hiprc,                                      "'obj_hiprc             ['R-3.5']\n'") 
              + NumberToStr(obj_loprc,                                      "'obj_loprc             ['R-3.5']\n'") 
              + DateToStr(obj_stime,                                        "'obj_stime             ['w D n Y H:I:S']\n'")
              + DateToStr(obj_etime,                                        "'obj_etime             ['w D n Y H:I:S']\n'")
              + NumberToStr(countperbox,                                    "'countperbox           ['T-6']\n'") 
              + NumberToStr(countpersym,                                    "'countpersym           ['T-6']\n'") 
              + NumberToStr(countperccy1,                                   "'countperccy1          ['T-6']\n'") 
              + NumberToStr(countperccy2,                                   "'countperccy2          ['T-6']\n'") 
              + NumberToStr(adjust,                                         "'adjust                ['R,-6.5']\n'") 
              + StrToStr(SLmeth,                                            "'SLmeth                ['T20']\n'")
              + NumberToStr(SLnum,                                          "'SLnum                 ['R,-6.5']\n'") 
              + StrToStr(TPmeth,                                            "'TPmeth                ['T20']\n'")
              + NumberToStr(TPnum,                                          "'TPnum                 ['R,-6.5']\n'") 
              + NumberToStr(RiskVal,                                        "'RiskVal               ['R,-6.5']\n'") 
              + StrToStr(RiskType,                                          "'RiskType              ['T6']\n'")
              + StrToStr(risk,                                              "'risk                  ['T12']\n'")
              + NumberToStr(riskstep,                                       "'riskstep              ['T-6']\n'") 
              + NumberToStr(ordvol,                                         "'ordvol                ['R,-6.5']\n'") 
              + NumberToStr(price,                                          "'price                 ['R-3.5']\n'") 
              + NumberToStr(entry,                                          "'entry                 ['R-3.5']\n'") 
              + NumberToStr(SL,                                             "'SL                    ['R-3.5']\n'") 
              + NumberToStr(TP,                                             "'TP                    ['R-3.5']\n'") 
//              + NumberToStr(bbhigh,                                         "'bbhigh                ['R-3.5']\n'") 
//              + NumberToStr(bblow,                                          "'bblow                 ['R-3.5']\n'") 
              + NumberToStr(ADR,                                            "'ADR                   ['R,-6.5']\n'") 
              + NumberToStr(PnL,                                            "'PnL                   ['R-9.2']\n'") 
              + StrToStr(DPOtext,                                           "'DPOtext               ['T50']\n'")
              + NumberToStr(DPOnum,                                         "'DPOnum                ['T-6.5']\n'")
              +                                                              "lo_test               [" + BoolToStr(lo_test) + "]\n"
              +                                                              "hi_test               [" + BoolToStr(hi_test) + "]\n"
              +                                                              "buy_ok                [" + BoolToStr(buy_ok) + "]\n"
              +                                                              "sell_ok               [" + BoolToStr(sell_ok) + "]\n"
              + NumberToStr(RefreshEveryXMins,                              "'RefreshEveryXMins     ['T-12']\n\n'")
//------------------------- Current instrument information
              + StrToStr(ccy,                                               "'ccy                   ['T20']\n'")
              + StrToStr(sym,                                               "'sym                   ['T20']\n'")
              + NumberToStr(tmf,                                            "'tmf                   ['T-8']\n'") 
              + NumberToStr(bidp,                                           "'bidp                  ['R,-6.5']\n'") 
              + NumberToStr(askp,                                           "'askp                  ['R,-6.5']\n'") 
              + NumberToStr(pnt,                                            "'pnt                   ['R,-6.5']\n'") 
              + NumberToStr(dig,                                            "'dig                   ['T-4']\n'") 
              + NumberToStr(spr,                                            "'spr                   ['R,-6.5']\n'") 
              + NumberToStr(tickval,                                        "'tickval               ['R,-6.5']\n'") 
              + NumberToStr(lswap,                                          "'lswap                 ['R,-6.5']\n'") 
              + NumberToStr(sswap,                                          "'sswap                 ['R,-6.5']\n'") 
              + NumberToStr(minlot,                                         "'minlot                ['R,-6.5']\n\n'") 
//------------------------- Current order information
              + NumberToStr(OrderTicket(),                                  "'OrderTicket()         ['T-12']\n'") 
              + StrToStr(OrderType(),                                       "'OrderType()           ['T20']\n'")
              + StrToStr(OrderStatus(OrderTicket()),                        "'OrderStatus(Ticket)   ['T20']\n'")
              + StrToStr(OrderSymbol(),                                     "'OrderSymbol()         ['T20']\n'")
              + NumberToStr(OrderLots(),                                    "'OrderLots()           ['R,-6.5']\n'") 
              + NumberToStr(OrderOpenPrice(),                               "'OrderOpenPrice()      ['R,-6.5']\n'") 
              + DateToStr(OrderOpenTime(),                                  "'OrderOpenTime()       ['w D n Y H:I:S']\n'")
              + NumberToStr(OrderClosePrice(),                              "'OrderClosePrice()     ['R,-6.5']\n'") 
              + DateToStr(OrderCloseTime(),                                 "'OrderCloseTime()      ['w D n Y H:I:S']\n'")
              + NumberToStr(OrderStopLoss(),                                "'OrderStopLoss()       ['R,-6.5']\n'") 
              + NumberToStr(OrderTakeProfit(),                              "'OrderTakeProfit()     ['R,-6.5']\n'") 
              + NumberToStr(OrderProfit(),                                  "'OrderProfit()         ['R,-6.5']\n'") 
              + NumberToStr(OrderCommission(),                              "'OrderCommission()     ['R,-6.5']\n'") 
              + NumberToStr(OrderSwap(),                                    "'OrderSwap()           ['R,-6.5']\n'") 
              + StrToStr(OrderComment(),                                    "'OrderComment()        ['T32']\n'")
              + NumberToStr(OrderMagicNumber(),                             "'OrderMagicNumber()    ['T-12']\n'") 
              + DateToStr(OrderExpiration(),                                "'OrderExpiration()     ['w D n Y H:I:S']\n\n'")
//------------------------- System information
              +                                                              "Chart                 [" + Symbol()+","+TFToStr(Period())+"]\n"              
              + DateToStr(TimeCurrent(),                                    "'MT4 time              ['w D n Y H:I:S']\n'")
              + DateToStr(TimeLocal(),                                      "'Local time            ['w D n Y H:I:S']\n'")
              + StrToStr(err_msg(GetLastError()),                           "'Last error            ['T80']\n'")
              + DateToStr(MarketInfo(Symbol(),MODE_TIME),                   "'Last Tick             ['w D n Y H:I:S']\n'")
              + NumberToStr(MarketInfo(Symbol(),MODE_BID),                  "'Bid Price             ['T-4.5']\n'")
              + NumberToStr(MarketInfo(Symbol(),MODE_ASK),                  "'Ask Price             ['T-4.5']\n'")
              + NumberToStr(MarketInfo(Symbol(),MODE_SPREAD),               "'Spread (pts)          ['T-4.5']\n'")
              + NumberToStr(MarketInfo(Symbol(),MODE_POINT),                "'Point                 ['T-4.5']\n'")
              + NumberToStr(MarketInfo(Symbol(),MODE_DIGITS),               "'Digits                ['T-4']\n'")
              + NumberToStr(MarketInfo(Symbol(),MODE_STOPLEVEL),            "'Stop Level            ['T-4.5']\n'")
              + NumberToStr(MarketInfo(Symbol(),MODE_LOTSIZE),              "'Lot Size              ['T-9.3']\n'")
              + NumberToStr(MarketInfo(Symbol(),MODE_TICKVALUE),            "'Tick Value            ['T-4.5']\n'")
              + NumberToStr(MarketInfo(Symbol(),MODE_TICKSIZE),             "'Tick Size             ['T-4.5']\n'")
              + NumberToStr(MarketInfo(Symbol(),MODE_TRADEALLOWED),         "'Trade Allowed         ['T-4']\n'")
              + NumberToStr(MarketInfo(Symbol(),MODE_MINLOT),               "'Minimum Lot           ['T-9.3']\n'")
              + NumberToStr(MarketInfo(Symbol(),MODE_LOTSTEP),              "'Lot Step              ['T-9.3']\n'")
              + NumberToStr(MarketInfo(Symbol(),MODE_MAXLOT),               "'Maximum Lot           ['T-9.3']\n'")
              + NumberToStr(MarketInfo(Symbol(),MODE_MARGININIT),           "'Init Margin           ['T-9.3']\n'")
              + NumberToStr(MarketInfo(Symbol(),MODE_MARGINMAINTENANCE),    "'Margin Maint          ['T-9.3']\n'")
              + NumberToStr(MarketInfo(Symbol(),MODE_MARGINHEDGED),         "'Hedge Margin          ['T-9.3']\n'")
              + NumberToStr(MarketInfo(Symbol(),MODE_MARGINREQUIRED),       "'Free Margin           ['T-9.3']\n'")
              + NumberToStr(MarketInfo(Symbol(),MODE_FREEZELEVEL),          "'Freeze Level          ['T-4.5']\n'")
              + StrToStr(TerminalCompany(),                                 "'Term Company          ['L60']\n'")
              + StrToStr(TerminalName(),                                    "'Term Name             ['L60']\n'")
              + StrToStr(TerminalPath(),                                    "'Term Path             ['L99']\n'")
              + StrToStr(AccountCompany(),                                  "'Acc Company           ['L60']\n'")
              + StrToStr(AccountServer(),                                   "'Acc Server            ['L60']\n'")
              + NumberToStr(AccountNumber(),                                "'Acc Number            ['T-8']\n'")
              + StrToStr(AccountName(),                                     "'Acc Name              ['L60']\n'")
              + StrToStr(AccountCurrency(),                                 "'Acc Currency          ['L20']\n'")
              + NumberToStr(AccountLeverage(),                              "'Acc Leverage          ['T-8']\n'")
              + NumberToStr(AccountBalance(),                               "'Acc Balance           ['T-,11.2']\n'")
              + NumberToStr(AccountEquity(),                                "'Acc Equity            ['T-,11.2']\n'")
              + NumberToStr(AccountProfit(),                                "'Acc Profit            ['T-,11.2']\n'")
              + NumberToStr(AccountCredit(),                                "'Acc Credit            ['T-,11.2']\n'")
              + NumberToStr(AccountFreeMargin(),                            "'Acc Free Margin       ['T-,11.2']\n'")
              + NumberToStr(AccountFreeMarginMode(),                        "'Acc Margin Mode       ['T-4']\n'")
              + NumberToStr(AccountMargin(),                                "'Acc Margin            ['T-,11.2']\n'")
              + NumberToStr(AccountStopoutLevel(),                          "'Acc Stop Level        ['T-8']\n'")
              + NumberToStr(AccountStopoutMode(),                           "'Acc Stop Mode         ['T-4']\n'")
              + NumberToStr(IsConnected(),                                  "'Connected             ['T-4']\n'")
              + NumberToStr(IsDemo(),                                       "'Demo                  ['T-4']\n'")
              + NumberToStr(IsDllsAllowed(),                                "'DLLs On               ['T-4']\n'")
              + NumberToStr(IsExpertEnabled(),                              "'Experts On            ['T-4']\n'")
              + NumberToStr(IsLibrariesAllowed(),                           "'Libraries On          ['T-4']\n'")
              + NumberToStr(IsOptimization(),                               "'Optimization          ['T-4']\n'")
              + NumberToStr(IsStopped(),                                    "'Stopped               ['T-4']\n'")
              + NumberToStr(IsTesting(),                                    "'Testing               ['T-4']\n'")
              + NumberToStr(IsTradeAllowed(),                               "'Trade Allowed         ['T-4']\n'")
              + NumberToStr(IsTradeContextBusy(),                           "'Context Busy          ['T-4']\n'")
              + NumberToStr(IsVisualMode(),                                 "'Visual Mode           ['T-4']\n'")
              + NumberToStr(UninitializeReason(),                           "'Uninit Reason         ['T-4']\n\n'");

  return(0);
}

//+------------------------------------------------------------------+
int df(string s1="", string s2="", string s3="", string s4="", string s5="", string s6="", string s7="", string s8="",
          string s9="", string s10="", string s11="", string s12="", string s13="", string s14="", string s15="")     {
//+------------------------------------------------------------------+
// Outputs up to 15 values to the debug file (after creating the file, if it doesn't already exist)
  if (PostDiagnosticInfo < 1)    return(0);
  string out = StringTrimRight(StringConcatenate(s1, " ", s2, " ", s3, " ", s4, " ", s5, " ", s6, " ", s7, " ", s8, " ", 
                                                 s9, " ", s10, " ", s11, " ", s12, " ", s13, " ", s14, " ", s15));
  int h = FileOpen(dfname,FILE_CSV|FILE_READ|FILE_WRITE,'~');
  FileSeek(h,0,SEEK_END);
  FileWrite(h,out);
  FileClose(h);
  return(0);
}

//+------------------------------------------------------------------+
int ddf(string s1="", string s2="", string s3="", string s4="", string s5="", string s6="", string s7="", string s8="",
           string s9="", string s10="", string s11="", string s12="", string s13="", string s14="", string s15="")     {
//+------------------------------------------------------------------+
// Deletes and re-creates the debug file, and adds up to 15 values to it
  if (PostDiagnosticInfo < 1)    return(0);
  string out = StringTrimRight(StringConcatenate(s1, " ", s2, " ", s3, " ", s4, " ", s5, " ", s6, " ", s7, " ", s8, " ", 
                                                 s9, " ", s10, " ", s11, " ", s12, " ", s13, " ", s14, " ", s15));
  int h = FileOpen(dfname,FILE_CSV|FILE_WRITE,'~');
  FileWrite(h,out);
  FileClose(h);
  return(0);
}
