Orders Execution
Checks for the total of closed orders
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
FF_FP
// Îïèñàíèå èíäèêàòîðà FF_FP
// Èíäèêàòîð ðàññ÷èòûâàåò ðàçìåð ïîçèöèè ïî ìåòîäó ôèêñèðîâàííîé ïðîïîðöèè Ðàéàíà Äæîíñà.
// Ôîðìóëà ôèêñèðîâàííîé ïðîïîðöèè:

//         Lot = MinLot * ( Sqrt [ 0.25 + 2 * ( Balance - Delta ) / Delta ] + 0.5 )

// Lot ýòî ðàçìåð ïîçèöèè,
// MinLot - ìèíèìàëüíûé ëîò ó áðîêåðà,
// Sqrt - êâàäðàòíûé êîðåíü.
// Íàïðèìåð ïðè Delta = 10000 è ïðè íà÷àëüíîì áàëàíñå ñ÷åòà  Balance = 10000 òàáëèöà ðåçóëüòàòîâ íåêîòîðûõ âû÷èñëåíèé 
// ïî ýòîé ôîðìóëå áóäåò èìåòü òàêîé âèä

//                          n   | Balance
//                          -------------
//                          1   |   10000
//                          2   |   20000
//                          3   |   40000
//                          4   |   70000
//                          5   |  110000
//                          6   |  160000
//                          7   |  220000
//                          8   |  290000


// Ãäå n ðàâíî êîëè÷åñòâó  ìèíèìàëüíûõ ëîòîâ.
// Çíà÷åíèå Delta ïîñëå ïðèáûëüíîé ñäåëêè ïðèíèìàåò çíà÷åíèå Delta_Growth èëè çíà÷åíèå ñòàâêè ðîñòà, à ïîñëå óáûòî÷íîé Delta
// ïðèñâàèâàåò çíà÷åíèå Delta_Decrease èëè çíà÷åíèå ñòàâêè ñíèæåíèÿ
// Âåëè÷èíû Delta_Growth è Delta_Decrease ýòî ââîäíûå ïàðàìåòðû â îêíå íàñòðîåê èíäèêàòîðà.

//  îêíå èíäèêàòîðà ðèñóåòñÿ ãèñòîãðàììà áàëàíñà ñ÷åòà âêóïå ñî ñêîëüçÿùåé ñðåäíåé áàëàíñà ñ÷åòà ïî ýêñïîíåíöèàëüíîìó èëè
// ïðîñòîìó óñðåäíåíèþ 

// Èíäèêàòîð ïîìèìî ïðî÷èõ ïàðàìåòðîâ ðàññ÷èòûâàåò Ìàòåìàòè÷åñêîå îæèäàíèå  èëè  Mathematical åxpectation.

// Èíäèêàòîð òàêæå ðàññ÷èòûâàåò îïòèìàëüíóþ ôðàêöèþ F èëè Optimum fraction  F  ( Ðàëüô Âèíñ )

// Current Drowdown  ïðîñåäàíèå ñ÷åòà êîòîðîå ðàâíî ðàññòîÿíèþ îò ìàêñèìàëüíîãî áàëàíñà ñ÷åòà êîòîðûé áûë äîñòèãíóò â õîäå
// òîðãîâ è ñ ó÷åòîì ïîïîëíåíèÿ è ñíÿòèÿ ñðåäñòâ äî ìèíèìóìà áàëàíñà êîòîðûé íàõîäèòñÿ ìåæäó ìàêñèìàëüíûì áàëàíñîì ñ÷åòà è
// òåêóùèì çíà÷åíèåì áàëàíñà ñ÷åòà 
// Net Profit today (%) ýòî ïðîôèò â òå÷åíèè äíÿ, Net Profit this week (%) - çà òåêóùóþ íåäåëþ è Net Profit this month (%)
// çà òåêóùèé ìåñÿö
//------------------------------------------------------------------------------------------------------------------ 
#property indicator_separate_window           // èíäèêàòîð â îòäåëüíîì îêíå
#property indicator_buffers 2                 // êîëè÷åñòâî îòîáðàæàåìûõ ëèíèé 
#property indicator_minimum 0                 // ìèíèìàëüíûå ïîêàçàíèÿ èíäèêàòîðà
#property indicator_color1 LightSteelBlue     // öâåò ãèñòîãðàììû áàëàíñà ñ÷åòà 
#property indicator_color2 LightSlateGray     // öâåò ñêîëüçÿùåé ñðåäíåé áàëàíñà ñ÷åòà
#property indicator_levelcolor SlateGray      // öâåò óðîâíÿ 
#property indicator_style1 0                  // ñòèëü îòðèñîâêè ñòîëáèêîâ ãèñòîãðàììû áàëàíñà ñ÷åòà 
#property indicator_width1 1                  // òîëùèíà ñòîëáèêîâ ãèñòîãðàììû áàëàíñà ñ÷åòà ( âáèðàåòñÿ ïðè ñòåëå = 0 )
#property indicator_style2 2                  // ñòèëü îòðèñîâêè ñêîëüçÿùåé ñðåäíåé áàëàíñà ñ÷åòà 
#property indicator_width2 1                  // òîëùèíà ñêîëüçÿùåé ñðåäíåé áàëàíñà ñ÷åòà ( âáèðàåòñÿ ïðè ñòåëå = 0 )
#property indicator_levelstyle 0              // ñòèëü îòðèñîâêè óðîâíÿ 
#property indicator_levelwidth 1              // òîëùèíà óðîâíÿ ( âáèðàåòñÿ ïðè ñòåëå = 0 )
#property indicator_level1 0                  // çíà÷åíèå óðîâíÿ 
//---- ââîäíûå ïàðàìåòðû

    extern double Delta_Growth = 10;          // Çíà÷åíèå Delta äëÿ ñòàâêè ðîñòà 
    extern double Delta_Decrease = 12;        // Çíà÷åíèå Delta äëÿ ñòàâêè ñíèæåíèÿ
    extern bool Get_report = false;           // Ïîêàçàòü îò÷åò ïî òîðãîâëå => true / Íå ïîêàçûâàòü => false
    extern int MA_period = 8;                 // Ïåðèîä ñêîëüçÿùåé ñðåäíåé áàëàíñà
    extern bool EMA_true_SMA_false = false;   // Ìåòîä âû÷èñëåíèÿ ñêîëüçÿùåé ñðåäíåé áàëàíñà  EMA => true / SMA => false
//---------------------------------------------------------------------------------
      double T[2000];                         // ìàññèâ òîëüêî äëÿ ñäåëîê òèïà ïîêóïêà / ïðîäàæà  buy / sell
      double B[2000];                         // ìàññèâ äëÿ äàííûõ î ñîñòîÿíèè ñ÷åòà ïîñëå êàæäîé ñäåëêè, ïîïîëíåíèå
      double Buffer[];                        // è ñíÿòèå âêëþ÷èòåëüíî ( 2 áóôåðà äëÿ ïîñòðîåíèÿ ãèñòîãðàììû áàëàíñà
      double Buffer1[];                       // è ñêîëüçÿùèõ ñðåäíèõ áàëàíñà )
//------------
      int init( )
      {
      IndicatorBuffers( 2 );
      IndicatorDigits( 2 ); 
      SetIndexStyle( 0, DRAW_HISTOGRAM );
      SetIndexStyle( 1, DRAW_LINE );
      SetIndexBuffer( 0, Buffer );
      SetIndexBuffer( 1, Buffer1 );
      string name = "Balance";
      string Method = "SMA";
      if( EMA_true_SMA_false == true )
      {
      Method = "EMA";
      }
      string name1 = "Average Balance  "+Method+" ("+MA_period+")";
      IndicatorShortName( name );
      SetIndexLabel( 0, name );
      SetIndexLabel( 1, name1 );
      return(0);
      }
//----
      int deinit( )
      {

      return(0);
      }
//----
      int start( )
      {
      double balance = AccountBalance( );
   	if( Get_report == true )
   	{			
      int i;
      int cmd;
      double swap;
      double commission;
      double orderprofit;
      string ordercomment;
      double loss;
      double profit;
      double nles;
      double nprofi;
      double Dd = 0;
      double s;
      double sum = 0;
      double sum1 = 0;
      double fs = 0;
      double Lp;
      double Ll;
      double u;
      int o1 = 0;
      int j = 0;
      double mk = 0;
      double en = 0;
      double b1 = 0;
      double b2 = 0;
      int y5;
      double SU = 0;
      double EJ = 0;
      int ii;
      int yy = 0;
      int xx = 0;
      int re;
      int es;
      double gb;
      double cn;
      double de3;
      int z = 0;
      double short;
      double long;
      int Total_short;
      int Total_long;
      double SOC;
      double C1;
      double NT1;
      double NW2;
      double NM3;
      int xc;
      datetime closetime;
      double ny;
      int w;

      while( i < OrdersHistoryTotal( ) )
      {
      if( OrderSelect( i, SELECT_BY_POS, MODE_HISTORY ) == true )
      {
      swap = OrderSwap( );
      closetime = OrderCloseTime( );
      cmd = OrderType( );
      commission = OrderCommission( );
      orderprofit = OrderProfit( );
      //----
      if( ( cmd != 2 ) && ( cmd != 3 ) && ( cmd != 4 ) && ( cmd != 5 ) )
      {
      xc++;                                                // ñ÷èòàåò âñå èçìåíåíèÿ â áàëàíñå ñ÷åòà
      if( ( cmd == 6 ) && ( orderprofit > 0 ) )
      {
      b1 = b1 + orderprofit;                               // äåïîçèò / Deposit
      }
      else
      {
      if( ( cmd == 6 ) && ( orderprofit < 0 ) )
      {
      w = xc + 1;
      b2 = b2 + orderprofit;                               // ñíÿòèå / Withdrawal
      }
      }
      //----
      C1 = swap + orderprofit + commission;
      de3 = de3 + C1;                                      // áàëàíñ
      B[xc] = de3;
      //------------------------------------------
      if( cmd <= 1 )
      {
      SOC = swap + orderprofit + commission;
      if( closetime >= iTime( NULL, PERIOD_D1, 0 ) )
      {
      NT1 = NT1 + SOC;                                     // äëÿ Net Profit today (%)
      } 
      if( closetime >= iTime( NULL, PERIOD_W1, 0 ) )
      {
      NW2 = NW2 + SOC;                                     // äëÿ Net Profit this week (%)
      }
      if( closetime >= iTime( NULL, PERIOD_MN1, 0 ) )
      {
      NM3 = NM3 + SOC;                                     // äëÿ Net Profit this month (%)
      }
      //----
      z++;                                                 // ñ÷åò÷èê âñåõ ñäåëîê buy / sell 
      T[z] = SOC;                                          // ìàññèâ äëÿ ýòèõ ñäåëîê 
      if( SOC < 0 )
      {
      sum = sum + SOC;                                     // ñóììà âñåõ óáûòî÷íûõ ñäåëîê 
      o1++;                                                // ñåðèè óáûòî÷íûõ ñäåëîê
      y5++;                                                // ñ÷åò÷èê ìàêñ. ñåðèé óáûò. ñäåëîê èëè Maximum consecutive losses
      if( mk > sum  )                                      // ñäåëîê
      {
      mk = sum;                                            // Maximal consecutive loss ( re )
      re = y5;                                             // ñåðèÿ ïðè Maximal consecutive loss
      }
      if( xx <= y5 )
      {
      xx = y5;                                             // ìàêñèìàëüíàÿ ñåðèÿ xx óáûòî÷íûõ ñäåëîê
      }
      if( Ll > SOC )
      {
      Ll = SOC;                                            // ñàìûé áîëüøîé óáûòîê îò îäíîé ñäåëêè èëè Largest loss trade
      }
      nles++;                                              // êîëè÷åñòâî óáûòî÷íûõ ñäåëîê
      loss = loss - SOC;                                   // ñóììàðíûé óáûòîê èëè Gross loss
      }
      else
      {
      if( SOC >= 0 )
      {
      if( cmd == 0 )
      {
      long++;                                              // âñå ïðèáûëüíûå ñäåëêè íà äëèííîé ñòîðîíå
      }                                                    // èëè Long profit trade
      else
      {
      if( cmd == 1 )
      {
      short++;                                             // âñå ïðèáûëüíûå ñäåëêè íà êîðîòêîé ñòîðîíå
      }                                                    // èëè Short profit trade
      }
      sum = 0;                                             // îáíóëèì ñóììó ìàêñèìàëüíîãî óáûòêà îò ìàêñèìàëüíîé ñåðèè
      if( o1 != 0 )
      {
      gb++;                                                // ñóììàðíîå êîëè÷åñòâî ñåðèé óáûòî÷íûõ ñäåëîê
      }
      o1 = 0;                                              // îáíóëÿåì ñåðèþ óáûòî÷íûõ ñäåëîê
      y5 = 0;                                              // ïðèñâîèì 0 ìàêñèìàëüíûì çíà÷åíèÿì ñåðèé óáûòî÷íûõ ñäåëîê èëè
      sum1 = sum1 + SOC;                                   // Maximal consecutive count / loss
      j++;                                                 // ñåðèè ïðèáûëüíûõ ñäåëîê
      ii++;                                                // ñ÷åò÷èê ìàêñ. ñåðèé ïðèá. ñäåëîê èëè Maximum consecutive wins
      if( en < sum1 )                                      // ñäåëîê
      {
      en = sum1;                                           // Maximal consecutive profit ( es )
      es = ii;                                             // ñåðèÿ ïðè Maximal consecutive profit
      }
      if( yy <= ii )
      {
      yy = ii;                                             // ìàêñèìàëüíàÿ ñåðèÿ yy ïðèáûëüíûõ ñäåëîê
      }
      if( Lp < SOC )
      {
      Lp = SOC;                                            // ñàìàÿ áîëüøàÿ ïðèáûëü îò îäíîé ñäåëêè èëè Largest profit trade
      } 
      nprofi++;                                            // êîëè÷åñòâî ïðèáûëüíûõ ñäåëîê
      profit = profit + SOC;                               // ñóììàðíàÿ ïðèáûëü èëè Gross profit
      }
      }
      //---
      if( SOC < 0 )
      { 
      sum1 = 0;                                            // îáíóëèì ñóììó ìàêñèìàëüíîé ïðèáûëè îò ìàêñèìàëüíîé ñåðèè
      if( j != 0 )
      {
      cn++;                                                // ñóììàðíîå êîëè÷åñòâî ñåðèé ïðèáûëüíûõ ñäåëîê
      }  
      j = 0;                                               // îáíóëÿåì ñåðèþ ïðèáûëüíûõ ñäåëîê
      ii = 0;                                              // îáíóëèì ìàêñèìàëüíûå çíà÷åíèÿì ñåðèé ïðèáûëüíûõ ñäåëîê èëè
      }                                                    // Maximal consecutive count / profit
      }                                                    // ãðàíèöà äëÿ if( cmd <= 1 )    
      //----
      if( cmd == 0 )
      {
      Total_long++;                                        // âñå ñäåëêè íà äëèííîé ñòîðîíå
      }                                                    // èëè Long Positions
      else
      {
      if( cmd == 1 )
      {
      Total_short++;                                       // âñå ñäåëêè íà êîðîòêîé ñòîðîíå
      }                                                    // èëè Short Positions 
      }
      //----
      }                                                    // ãðàíèöà äëÿ if( cmd != 2 && cmd != 3 && cmd != 4 && cmd != 5 )
      }                                                    // ãðàíèöà äëÿ if( OrderSelect( i, SELECT_BY_POS, MODE_HISTORY ) == true )
      i++;
      }                                                    // ãðàíèöà äëÿ öèêëà while( i < OrdersHistoryTotal( ) ) 
      //                                                   // òåêóùåå ïðîñåäàíèå èëè Current Drowdown(%)
      int oi = 0;
      int maxindex = ArrayMaximum( B, xc, 0 );             // èíäåêñ ìàêñèìóìà â ìàññèâå 
      double max = B[maxindex];                            // ïîèñê ïèêà èëè âåðøèíû ñ÷åòà
      while( oi <= xc - maxindex )                         // çàäàåì îêíî ïîèñêà  xc - maxindex
      {
      static double min = 1000000;
      if( ( min > B[xc - oi] ) && ( xc - oi > w ) )        // ïîèñê ìèíèìóìà áàëàíñà ìåæäó ìàêñèìóìîì áàëàíñà è òåêóùèì 
      {                                                    // çíà÷åíèåì áàëàíñà äëÿ Current Drowdown(%)
      min = B[xc - oi];                                    // íàøåëñÿ ìèíèìóì áàëàíñà
      }
      oi++;                                                // ñ÷åò÷èê öèêëà
      }
      Dd = max - min;                                   // ìàêñèìàëüíîå ïðîñåäàíèå ñ÷åòà èëè Current Drowdown ýòî ðàññòîÿíèå ìåæäó
      if( max != 0 )                                    // èñòîðè÷åñêèì ìàêñèìóìîì áàëàíñà è ìèíèìóìîì áàëàíñà. ìèíèìóì áàëàíñà
      {                                                 // íàõîäèòñÿ ìåæäó èñòîðè÷åñêèì ìàêñèìóìîì áàëàíñà è òåêóùåì çíà÷åíèå
      u = 100 * Dd / max;                               // áàëàíñà è Current Drowdownâ ïðîöåíòíîì âûðàæåíèè
      } 
      // ïîèñê ñóììàðíîãî óáûòêà è ïðèáûëè ïðè ìàêñèìàëüíûõ ñåðèÿõ, èëè ïîèñê ïàðàìåòðîâ Maximum consecutive wins ($)
      int ie = 0;                                // è Maximum consecutive losses ($) ( òî ÷òî â ñêîáêàõ )
      int t = 0;
      int k2 = 0;
      double org = 0;
      double fgh = 0;
      double owq = 0;
      double css = 0;
      
      while( ie < xc )
      {
      if( ( T[ie] < 0 ) && ( t < xx ) )          // äëÿ ñóììû óáûòêà
      {
      t++;
      SU = SU + T[ie];
      if( owq > SU )
      {
      owq = SU;
      if( t == xx )
      {
      css = owq;                                 // íàøëè ñóììàðíûé óáûòîê ïðè ìàêñèìàëüíîé ñåðèè
      }                                          // óáûòî÷íûõ ñäåëîê
      }
      }
      else
      {
      if( ( T[ie] >= 0 ) && ( t < xx ) )
      {
      t = 0;
      SU = 0;
      }
      }
      if( t == xx )
      {
      t = 0;
      SU = 0;
      }
      //----
      if( ( T[ie] >= 0 ) && ( k2 < yy ) )       // äëÿ cóììû ïðèáûëè
      {
      k2++;
      EJ = EJ + T[ie];
      if( org < EJ )
      {
      org = EJ;
      if( k2 == yy )
      {
      fgh = org;                                // íàøëè ñóììàðíóþ ïðèáûëü ïðè ìàêñèìàëüíîé ñåðèè
      }                                         // ïðèáûëüíûõ ñäåëîê
      }
      }
      else
      {
      if( ( T[ie] < 0 ) && ( k2 < yy ) )
      {
      k2 = 0;
      EJ = 0;
      }
      }
      if( k2 == yy )
      {
      k2 = 0;
      EJ = 0;
      }
      Buffer[ie] = B[xc - ie];
      ie++;
      }
      //                                        ñêîëüçÿùàÿ ñðåäíÿÿ áàëàíñà ( ìåòîäû ðàñ÷åòà - SMA è EMA )
      int nb = xc - MA_period - 1;
      double vol;
      int iz;
      while( nb >= 0 )
      {
      if( EMA_true_SMA_false == false )
      {
      vol = 0;
      for( iz = nb; iz <= nb + MA_period - 1; iz++ )
      {
      vol = vol + Buffer[iz];
      }
      if( MA_period != 0 )
      {
      Buffer1[nb] = vol / MA_period;         // ïðîñòàÿ ñêîëüçÿùàÿ ñðåäíÿÿ áàëàíñà
      }
      }
      else
      {
      if( EMA_true_SMA_false == true )
      {
      if( nb == xc - MA_period - 1 )
      { 
      Buffer1[nb + 1] = Buffer[nb + 1];
      }                                      // ýêñïîíåíöèàëüíàÿ ñêîëüçÿùàÿ ñðåäíÿÿ áàëàíñà
      Buffer1[nb]=( ( MA_period - 1 ) * Buffer1[nb + 1] + 2 * Buffer[nb] ) / ( MA_period + 1 );
      }
      }
      //---
      if( Bars - nb - 1 < MA_period )
      {
      Buffer1[nb] = 0;
      SetIndexEmptyValue( 1, 0.0 );
      }
      nb--;
      }
      //----                                        // ïîèñê îïòèìàëüíîé ôðàêöèè F
      int h = 1;
      double TWR = 1;
      double HPR;
      double g;
      double f;
      double F;
      double G;
      while( h < 99 )
      {
      f = f + 0.01;                                 // ïåðåáîð HPR ñ øàãîì â 1 %
      int o = 1;
      int i9 = z;
      while( o <= i9 )
      {
      if( Ll != 0 )
      { 
      HPR = 1 - f * T[o] / Ll;                      // HPR - îòíîñèòåëüíàÿ ïðèáûëü / ìàêñèìàëüíûé óáûòîê îò
      }                                             // ñäåëêè â ñòàòèñòèêå
      TWR  = TWR * HPR;                             // îòíîñèòåëüíûé êîíå÷íûé êàïèòàë - TWR
      o++;                                          // ñ÷åò÷èê ñäåëîê ïî âñåìó ìàññèâó T[]
      }
      G = MathPow( TWR, MathPow( z, -1 ) );         // âû÷èñëåíèå ñðåäíåãî ãåîìåòðè÷åñêîãî îò TWR
      if( G <= g )                                  // êàê òîëüêî G íà÷íåò óìåíüøàòüñÿ çíà÷èò
      {
      F = 100 * f - 1;                              // íàøëè  îïòèìàëüíóþ ôðàêöèþ F
      break;                                        // è òîãäà óõîäèì èç öèêëà
      }
      g = G;
      h++;
      TWR = 1;                                      // ïîñëå êàæäîãî öèêëà â o <= i9 âîçâðàùàåì TWR çíà÷åíèå 1
      }
      //---
      if( ( Total_long != 0 ) && ( Total_short != 0 ) )
      {
      double pctLong = 100 * long / Total_long;           // ïðîöåíò ïðèáûëüíûõ äëèííûõ ñäåëîê âî âñåõ äëèííûõ ñäåëêàõ
      double pctShort = 100 * short / Total_short;        // ïðîöåíò ïðèáûëüíûõ êîðîòêèõ ñäåëîê âî âñåõ êîðîòêèõ ñäåëêàõ
      }
      double Gp = profit;                                 // îáùàÿ  ïðèáûëü èëè Gross profit
      double Gl = loss;                                   // îáùèé  óáûòîê èëè Gross loss
      double TN = profit - loss;                          // ïîëíàÿ ÷èñòàÿ ïðèáûëü èëè Total Net Profit
      if( ( nles != 0 ) && ( nprofi != 0 ) )
      {
      double alt = loss / nles;                           // ñðåäíÿÿ óáûòî÷íàÿ ñäåëêà èëè Average loss trade
      double apt = profit / nprofi;                       // ñðåäíÿÿ ïðèáûëüíàÿ ñäåëêà èëè Average profit trade
      }
      double total = z;                                   // ñóììàðíîå êîëè÷åñòâî ñäåëîê èëè Total trades
      if( ( total != 0 ) && ( cn != 0 ) && ( gb != 0 ) )
      {
      double EP = TN / total;                             // Îæèäàåìûå âûïëàòû  èëè  Expected Payoff
      double acw = nprofi / cn;                           // ñðåäíÿÿ ñåðèÿ äëÿ ïðèáûëüíûõ ñäåëîê èëè Average consecutive wins
      double acl = nles / gb;                             // ñðåäíÿÿ ñåðèÿ äëÿ óáûòî÷íûõ ñäåëîê èëè Average consecutive losses
      double won = 100 * nprofi / total;                  // ïðîöåíò ïðèáûëüíûõ ñäåëîê îò îáùåãî êîëè÷åñòâà ñäåëîê
      double lS = 100 * nles / total;                     // ïðîöåíò óáûòî÷íûõ ñäåëîê îò îáùåãî êîëè÷åñòâà ñäåëîê
      }
      if( ( alt != 0 ) && ( loss != 0 ) )
      {
      double ME = 0.01 * ( 1 + apt / alt ) * won - 1;     // ìàòåìàòè÷åñêîå îæèäàíèå èëè Mathematical åxpectation
      double pf = profit / loss;                          // îòíîøåíèå îáùåé ïðèáûëè ê îáùåìó óáûòêó èëè Profit factor
      }
      //---
      double nt1pct = 100 * NT1 / ( balance - NT1 );      // ïðîöåíò äíåâíîé ïðèáûëè / óáûòêà 
      double nw2pct = 100 * NW2 / ( balance - NW2 );      // ïðîöåíò ïðèáûëè / óáûòêà òåêóùåé íåäåëè
      double nm3pct = 100 * NM3 / ( balance - NM3 );      // ïðîöåíò ïðèáûëè / óáûòêà òåêóùåãî ìåñÿöà
      SetIndexDrawBegin( 0, Bars - xc );                  // íîìåð áàðà äëÿ íà÷àëà îòðèñîâêè ãèñòîãðàìû áàëàíñà ñ÷åòà
      SetIndexDrawBegin( 1, Bars - xc + MA_period );      // íîìåð áàðà äëÿ íà÷àëà îòðèñîâêè ñêîëüçÿùåé ñðåäíåé áàëàíñà ñ÷åòà
      //---
      Comment( " Profit factor   "+DoubleToStr( pf, 2 )+" ", // èíôîðì òàáëî
      "\n ", "Profit trades ( % of total )   "+DoubleToStr( nprofi, 0 )+" ("+DoubleToStr( won, 2 )+" %) ",
      "\n ", "Loss trades ( % of total )   "+DoubleToStr( nles, 0 )+" ("+DoubleToStr( lS, 2 )+" %) ",
      "\n ", "Total trades   "+z+" ",
      "\n ", "Short Positions (won %)   "+Total_short+" ("+DoubleToStr( pctShort, 2 )+" %) ",
      "\n ", "Long Positions (won %)   "+Total_long+" ("+DoubleToStr( pctLong, 2 )+" %) ",
      "\n ", "Gross Profit    "+DoubleToStr( Gp, 2 )+" ",
      "\n ", "Gross Loss    "+DoubleToStr( Gl, 2 )+" ",
      "\n ", "Total Net Profit    "+DoubleToStr( TN, 2 )+" ",
      "\n ", "Expected Payoff   "+DoubleToStr( EP, 2 )+" ",
      "\n ", "Mathematical åxpectation   "+DoubleToStr( ME, 2 )+"",
      "\n ", "Optimum fraction  F   "+DoubleToStr( F, 0 )+" % ",
      "\n ", "Current Drowdown  "+DoubleToStr( Dd, 2 )+"  ("+DoubleToStr( u, 2 )+" %)",
      "\n ", "Net Profit today (%)  "+DoubleToStr( NT1, 2 )+"  ("+DoubleToStr( nt1pct, 2 )+" %)", 
      "\n ", "Net Profit this week (%)  "+DoubleToStr( NW2, 2 )+"  ("+DoubleToStr( nw2pct, 2 )+" %)",
      "\n ", "Net Profit this month (%)  "+DoubleToStr( NM3, 2 )+"  ("+DoubleToStr( nm3pct, 2 )+" %)",
      "\n ", "Largest profit trade   "+DoubleToStr( Lp, 2 )+" ",
      "\n ", "Largest loss trade   "+DoubleToStr( Ll, 2 )+" ",
      "\n ", "Average profit trade   "+DoubleToStr( apt, 2 )+" ",
      "\n ", "Average loss trade   "+DoubleToStr( -alt, 2 )+" ",
      "\n ", "Average consecutive wins   "+DoubleToStr( acw, 0 )+" ",
      "\n ", "Average consecutive losses   "+DoubleToStr( acl, 0 )+" ",
      "\n ", "Maximum consecutive wins($)    "+yy+" ("+DoubleToStr( fgh, 2 )+") ",
      "\n ", "Maximum consecutive losses($)   "+xx+" ("+DoubleToStr( css, 2 )+") ",
      "\n ", "Maximal consecutive profit (count)   "+DoubleToStr( en, 2 )+"  ("+es+")",
      "\n ", "Maximal consecutive loss  (count)   "+DoubleToStr( mk, 2 )+"  ("+re+")" );
      }
      else                                                                // âû÷èñëåíèå ôèêñèðîâàííîé ïðîïîðöèè FP
      {
   	if( Get_report == false )
   	{
      double last_trade;
      int ei;
      while( ei < OrdersHistoryTotal( ) )
      {
      if( OrderSelect( ei, SELECT_BY_POS, MODE_HISTORY ) == true )
      {
      if( OrderType( ) <= 1 )
      {
      last_trade = OrderSwap( ) + OrderProfit( ) + OrderCommission( );    // ïîñëåäíÿÿ ñäåëêà
      }
      }
      ei++;
      }
		double minlot = MarketInfo( Symbol( ), MODE_MINLOT );               // ðàçìåð ìèíèìàëüíîãî ëîòà
		double Delta;
		if( last_trade < 0 )                                                // åñëè ïîñëåäíÿÿ ñäåëêà óáûòî÷íà òî 
		{
		Delta = Delta_Decrease;                                             // äåëüòà ðàâíà ñòàâêå ñíèæåíèÿ 
		}
		else
		{
		if( last_trade >= 0 )                                               // åñëè ïîñëåäíÿÿ ñäåëêà 0 èëè ïîëîæèòåëüíà òî
		{
		Delta = Delta_Growth;                                               // äåëüòà ðàâíà ñòàâêå ðîñòà
		}
		} 
		double fp = ( MathSqrt( 0.25 + 2 * ( balance - Delta ) / Delta ) + 0.5 );
	   double lot = NormalizeDouble( minlot * MathRound( fp - 0.5 ), 2 );
		string dD = "Delta_Decrease   "+DoubleToStr( Delta_Decrease, 2 )+"";
		string dG = "Delta_Growth     "+DoubleToStr( Delta_Growth, 2 )+"";
		string v = "Lot                      "+DoubleToStr( lot, 2 )+" ";
      Comment( " "+v+"", "\n ", dG, "\n ", dD );
		}
      }

      return(0);
      }





Comments