// Îïèñàíèå èíäèêàòîðà 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