Add files via upload
This commit is contained in:
Binary file not shown.
@@ -0,0 +1,201 @@
|
||||
#include "String.mqh"
|
||||
|
||||
//+------------------------------------------------------------------+
|
||||
//| Структура для статистики торговли |
|
||||
//+------------------------------------------------------------------+
|
||||
struct ExpTradeSummarySingle
|
||||
{
|
||||
public:
|
||||
int Offset1[10];
|
||||
int bars;
|
||||
int ticks;
|
||||
STRING32 symbol;
|
||||
double initial_deposit; // начальный депозит
|
||||
double withdrawal; // снято средств
|
||||
double profit; // общая прибыль (+)
|
||||
double grossprofit; // общий плюс
|
||||
double grossloss; // общий минус
|
||||
double maxprofit; // максимально прибыльная сделка
|
||||
double minprofit; // максимально убыточная сделка
|
||||
double conprofitmax; // прибыль максимальной последовательности прибыльных сделок
|
||||
double maxconprofit; // максимальная прибыль среди последовательностей
|
||||
double conlossmax; // убыток максимальной последовательности убыточных сделок
|
||||
double maxconloss; // максимальный убыток среди последовательностей
|
||||
double balance_min; // минимальное значение баланса (для расчёта абсолютной просадки)
|
||||
double maxdrawdown; // максимальная просадка по балансу
|
||||
double drawdownpercent; // отношение максимальной просадки по балансу к её пику
|
||||
double reldrawdown; // максимальная относительная просадка по балансу в деньгах
|
||||
double reldrawdownpercent; // максимальная относительная просадка по балансу в процентах
|
||||
double equity_min; // минимальное значение equity (для расчёта абсолютной просадки по equity)
|
||||
double maxdrawdown_e; // максимальная просадка по equity
|
||||
double drawdownpercent_e; // отношение максимальной просадки по equity к её пику (+)
|
||||
double reldrawdown_e; // максимальная относительная просадка по equity в деньгах
|
||||
double reldrawdownpercnt_e; // максимальная относительная просадка по equity в процентах
|
||||
double expected_payoff; // матожидание выигрыша (+)
|
||||
double profit_factor; // показатель прибыльности (+)
|
||||
double recovery_factor; // фактор восстановления (+)
|
||||
double sharpe_ratio; // коэффициент Шарпа (+)
|
||||
double margin_level; // минимальный уровень маржи
|
||||
double custom_fitness; // пользовательский фитнесс - результат OnTester (+)
|
||||
int deals; // общее количество сделок
|
||||
int trades; // количество сделок out/inout
|
||||
int profittrades; // количество прибыльных
|
||||
int losstrades; // количество убыточных
|
||||
int shorttrades; // количество шортов
|
||||
int longtrades; // количество лонгов
|
||||
int winshorttrades; // количество прибыльных шортов
|
||||
int winlongtrades; // количество прибыльных лонгов
|
||||
int conprofitmax_trades; // максимальная последовательность прибыльных сделок
|
||||
int maxconprofit_trades; // последовательность максимальной прибыли
|
||||
int conlossmax_trades; // максимальная последовательность убыточных сделок
|
||||
int maxconloss_trades; // последовательность максимального убытка
|
||||
int avgconwinners; // среднее количество последовательных прибыльных сделок
|
||||
int avgconloosers; // среднее количество последовательных убыточных сделок
|
||||
|
||||
#define TOSTRING(A) #A + " = " + (string)(A) + "\n"
|
||||
#define TOSTRING3(A) #A + " = " + this.A[] + "\n"
|
||||
|
||||
string ToString( void ) const
|
||||
{
|
||||
return(
|
||||
TOSTRING(bars) +
|
||||
TOSTRING(ticks) +
|
||||
TOSTRING3(symbol) +
|
||||
TOSTRING(initial_deposit) + // начальный депозит
|
||||
TOSTRING(withdrawal) + // снято средств
|
||||
TOSTRING(profit) + // общая прибыль (+)
|
||||
TOSTRING(grossprofit) + // общий плюс
|
||||
TOSTRING(grossloss) + // общий минус
|
||||
TOSTRING(maxprofit) + // максимально прибыльная сделка
|
||||
TOSTRING(minprofit) + // максимально убыточная сделка
|
||||
TOSTRING(conprofitmax) + // прибыль максимальной последовательности прибыльных сделок
|
||||
TOSTRING(maxconprofit) + // максимальная прибыль среди последовательностей
|
||||
TOSTRING(conlossmax) + // убыток максимальной последовательности убыточных сделок
|
||||
TOSTRING(maxconloss) + // максимальный убыток среди последовательностей
|
||||
TOSTRING(balance_min) + // минимальное значение баланса (для расчёта абсолютной просадки)
|
||||
TOSTRING(maxdrawdown) + // максимальная просадка по балансу
|
||||
TOSTRING(drawdownpercent) + // отношение максимальной просадки по балансу к её пику
|
||||
TOSTRING(reldrawdown) + // максимальная относительная просадка по балансу в деньгах
|
||||
TOSTRING(reldrawdownpercent) + // максимальная относительная просадка по балансу в процентах
|
||||
TOSTRING(equity_min) + // минимальное значение equity (для расчёта абсолютной просадки по equity)
|
||||
TOSTRING(maxdrawdown_e) + // максимальная просадка по equity
|
||||
TOSTRING(drawdownpercent_e) + // отношение максимальной просадки по equity к её пику (+)
|
||||
TOSTRING(reldrawdown_e) + // максимальная относительная просадка по equity в деньгах
|
||||
TOSTRING(reldrawdownpercnt_e) + // максимальная относительная просадка по equity в процентах
|
||||
TOSTRING(expected_payoff) + // матожидание выигрыша (+)
|
||||
TOSTRING(profit_factor) + // показатель прибыльности (+)
|
||||
TOSTRING(recovery_factor) + // фактор восстановления (+)
|
||||
TOSTRING(sharpe_ratio) + // коэффициент Шарпа (+)
|
||||
TOSTRING(margin_level) + // минимальный уровень маржи
|
||||
TOSTRING(custom_fitness) + // пользовательский фитнесс - результат OnTester (+)
|
||||
TOSTRING(deals) + // общее количество сделок
|
||||
TOSTRING(trades) + // количество сделок out/inout
|
||||
TOSTRING(profittrades) + // количество прибыльных
|
||||
TOSTRING(losstrades) + // количество убыточных
|
||||
TOSTRING(shorttrades) + // количество шортов
|
||||
TOSTRING(longtrades) + // количество лонгов
|
||||
TOSTRING(winshorttrades) + // количество прибыльных шортов
|
||||
TOSTRING(winlongtrades) + // количество прибыльных лонгов
|
||||
TOSTRING(conprofitmax_trades) + // максимальная последовательность прибыльных сделок
|
||||
TOSTRING(maxconprofit_trades) + // последовательность максимальной прибыли
|
||||
TOSTRING(conlossmax_trades) + // максимальная последовательность убыточных сделок
|
||||
TOSTRING(maxconloss_trades) + // последовательность максимального убытка
|
||||
TOSTRING(avgconwinners) + // среднее количество последовательных прибыльных сделок
|
||||
TOSTRING(avgconloosers) // среднее количество последовательных убыточных сделок
|
||||
);
|
||||
}
|
||||
|
||||
#undef TOSTRING3
|
||||
#undef TOSTRING
|
||||
|
||||
double TesterStatistics( const ENUM_STATISTICS Statistic_ID ) const
|
||||
{
|
||||
switch (Statistic_ID)
|
||||
{
|
||||
case STAT_INITIAL_DEPOSIT:
|
||||
return(this.initial_deposit);
|
||||
case STAT_WITHDRAWAL:
|
||||
return(this.withdrawal);
|
||||
case STAT_PROFIT:
|
||||
return(this.profit);
|
||||
case STAT_GROSS_PROFIT:
|
||||
return(this.grossprofit);
|
||||
case STAT_GROSS_LOSS:
|
||||
return(-this.grossloss);
|
||||
case STAT_MAX_PROFITTRADE:
|
||||
return(this.maxprofit);
|
||||
case STAT_MAX_LOSSTRADE:
|
||||
return(-this.minprofit);
|
||||
case STAT_CONPROFITMAX:
|
||||
return(this.maxconprofit);
|
||||
case STAT_CONPROFITMAX_TRADES:
|
||||
return(this.maxconprofit_trades);
|
||||
case STAT_MAX_CONWINS:
|
||||
return(this.conprofitmax);
|
||||
case STAT_MAX_CONPROFIT_TRADES:
|
||||
return(this.conprofitmax_trades);
|
||||
case STAT_CONLOSSMAX:
|
||||
return(-this.conlossmax);
|
||||
case STAT_CONLOSSMAX_TRADES:
|
||||
return(this.conlossmax_trades);
|
||||
case STAT_MAX_CONLOSSES:
|
||||
return(-this.maxconloss);
|
||||
case STAT_MAX_CONLOSS_TRADES:
|
||||
return(this.maxconloss_trades);
|
||||
case STAT_BALANCEMIN:
|
||||
return(this.balance_min);
|
||||
case STAT_BALANCE_DD:
|
||||
return(this.maxdrawdown);
|
||||
case STAT_BALANCEDD_PERCENT:
|
||||
return(this.drawdownpercent);
|
||||
case STAT_BALANCE_DDREL_PERCENT:
|
||||
return(this.reldrawdownpercent);
|
||||
case STAT_BALANCE_DD_RELATIVE:
|
||||
return(this.reldrawdown);
|
||||
case STAT_EQUITYMIN:
|
||||
return(this.equity_min);
|
||||
case STAT_EQUITY_DD:
|
||||
return(this.maxdrawdown_e);
|
||||
case STAT_EQUITYDD_PERCENT:
|
||||
return(this.drawdownpercent_e);
|
||||
case STAT_EQUITY_DDREL_PERCENT:
|
||||
return(this.reldrawdownpercnt_e);
|
||||
case STAT_EQUITY_DD_RELATIVE:
|
||||
return(this.reldrawdown_e);
|
||||
case STAT_EXPECTED_PAYOFF:
|
||||
return(this.expected_payoff);
|
||||
case STAT_PROFIT_FACTOR:
|
||||
return(this.profit_factor);
|
||||
case STAT_RECOVERY_FACTOR:
|
||||
return(this.recovery_factor);
|
||||
case STAT_SHARPE_RATIO:
|
||||
return(this.sharpe_ratio);
|
||||
case STAT_MIN_MARGINLEVEL:
|
||||
return(this.margin_level);
|
||||
case STAT_CUSTOM_ONTESTER:
|
||||
return(this.custom_fitness);
|
||||
case STAT_DEALS:
|
||||
return(this.deals);
|
||||
case STAT_TRADES:
|
||||
return(this.trades);
|
||||
case STAT_PROFIT_TRADES:
|
||||
return(this.profittrades);
|
||||
case STAT_LOSS_TRADES:
|
||||
return(this.losstrades);
|
||||
case STAT_SHORT_TRADES:
|
||||
return(this.shorttrades);
|
||||
case STAT_LONG_TRADES:
|
||||
return(this.longtrades);
|
||||
case STAT_PROFIT_SHORTTRADES:
|
||||
return(this.winshorttrades);
|
||||
case STAT_PROFIT_LONGTRADES:
|
||||
return(this.winlongtrades);
|
||||
case STAT_PROFITTRADES_AVGCON:
|
||||
return(this.avgconwinners);
|
||||
case STAT_LOSSTRADES_AVGCON:
|
||||
return(this.avgconloosers);
|
||||
}
|
||||
|
||||
return(0);
|
||||
}
|
||||
};
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,50 @@
|
||||
#ifndef __STRING__
|
||||
|
||||
#define __STRING__
|
||||
|
||||
#define NULL_CHAR (short)0xFFFF
|
||||
|
||||
#define DEFINE_STRING(A) \
|
||||
struct STRING##A \
|
||||
{ \
|
||||
public : \
|
||||
short Array[A]; \
|
||||
\
|
||||
public: \
|
||||
void operator =( const string &Str ) \
|
||||
{ \
|
||||
::ArrayInitialize(Array, 0); \
|
||||
this.Array[0] = NULL_CHAR; \
|
||||
::StringToShortArray(Str, this.Array); \
|
||||
\
|
||||
return; \
|
||||
} \
|
||||
\
|
||||
template <typename T> \
|
||||
void operator =( const T &Str ) \
|
||||
{ \
|
||||
const string StrTmp = Str[]; \
|
||||
this = StrTmp; \
|
||||
\
|
||||
return; \
|
||||
} \
|
||||
\
|
||||
string operator []( const int = 0 ) const \
|
||||
{ \
|
||||
return((this.Array[0] == NULL_CHAR) \
|
||||
? NULL : \
|
||||
::ShortArrayToString(this.Array)); \
|
||||
} \
|
||||
};
|
||||
|
||||
DEFINE_STRING(16)
|
||||
DEFINE_STRING(32)
|
||||
DEFINE_STRING(64)
|
||||
DEFINE_STRING(128)
|
||||
DEFINE_STRING(80)
|
||||
|
||||
#undef DEFINE_STRING
|
||||
|
||||
#undef NULL_CHAR
|
||||
|
||||
#endif // __STRING__
|
||||
@@ -0,0 +1,44 @@
|
||||
#define UINT64 ulong
|
||||
#define INT64 datetime
|
||||
|
||||
//+------------------------------------------------------------------+
|
||||
//| Ñòðóêòóðà ðåçóëüòàòîâ äëÿ ïîçèöèè |
|
||||
//+------------------------------------------------------------------+
|
||||
struct TesterPositionProfit
|
||||
{
|
||||
private:
|
||||
string LengthToString( const datetime Length ) const
|
||||
{
|
||||
const int Days = (int)(Length / (24 * 3600));
|
||||
|
||||
return(((Days) ? (string)Days + "d ": "") + ::TimeToString(Length, TIME_SECONDS));
|
||||
}
|
||||
|
||||
public:
|
||||
UINT64 id; // id ïîçèöèè
|
||||
double mfe; // MFE
|
||||
double mae; // MAE
|
||||
double profit; // ïðèáûëü
|
||||
INT64 lifetime; // âðåìÿ æèçíè ïîçèöèè â ñåêóíäàõ
|
||||
UINT64 reserve[3];
|
||||
|
||||
#define TOSTRING(A) #A + " = " + (string)(this.A) + "\n"
|
||||
#define TOSTRING2(A) #A + " = " + this.LengthToString(A) + "\n"
|
||||
|
||||
string ToString( void ) const
|
||||
{
|
||||
return(
|
||||
TOSTRING(id) + // id ïîçèöèè
|
||||
TOSTRING(mfe) + // MFE
|
||||
TOSTRING(mae) + // MAE
|
||||
TOSTRING(profit) + // ïðèáûëü
|
||||
TOSTRING2(lifetime) // âðåìÿ æèçíè ïîçèöèè â ñåêóíäàõ
|
||||
);
|
||||
}
|
||||
|
||||
#undef TOSTRING2
|
||||
#undef TOSTRING
|
||||
};
|
||||
|
||||
#undef INT64
|
||||
#undef UINT64
|
||||
@@ -0,0 +1,29 @@
|
||||
#define __int64 datetime
|
||||
|
||||
//+------------------------------------------------------------------+
|
||||
//| Ñòðóêòóðà äëÿ ãðàôèêà òåñòèðîâàíèÿ |
|
||||
//+------------------------------------------------------------------+
|
||||
struct TesterTradeState
|
||||
{
|
||||
// __int64 datetime; // òåêóùåå òåñòîâîå âðåìÿ
|
||||
__int64 time; // òåêóùåå òåñòîâîå âðåìÿ
|
||||
double balance; // òåêóùèé áàëàíñ
|
||||
double equity; // òåêóùèé equity
|
||||
double value; // òåêóùåå ðàññ÷èòàííîå çíà÷åíèå íàãðóçêè íà äåïîçèò
|
||||
|
||||
#define TOSTRING(A) #A + " = " + (string)(this.A) + "\n"
|
||||
|
||||
string ToString( void ) const
|
||||
{
|
||||
return(
|
||||
TOSTRING(time) + // òåêóùåå òåñòîâîå âðåìÿ
|
||||
TOSTRING(balance) + // òåêóùèé áàëàíñ
|
||||
TOSTRING(equity) + // òåêóùèé equity
|
||||
TOSTRING(value) // òåêóùåå ðàññ÷èòàííîå çíà÷åíèå íàãðóçêè íà äåïîçèò
|
||||
);
|
||||
}
|
||||
|
||||
#undef TOSTRING
|
||||
};
|
||||
|
||||
#undef __int64
|
||||
Binary file not shown.
@@ -0,0 +1,237 @@
|
||||
#include "String.mqh"
|
||||
|
||||
#define UINT64 ulong
|
||||
#define INT64 datetime
|
||||
#define UINT uint
|
||||
|
||||
//+------------------------------------------------------------------+
|
||||
//| Ñòðóêòóðà òîðãîâîãî îðäåðà |
|
||||
//+------------------------------------------------------------------+
|
||||
struct TradeOrder
|
||||
{
|
||||
private:
|
||||
ENUM_ORDER_REASON ReasonToInteger( const ENUM_ORDER_REASON Reason ) const
|
||||
{
|
||||
int Res = 1;
|
||||
|
||||
switch (Reason)
|
||||
{
|
||||
case ORDER_REASON_SL:
|
||||
Res = 3;
|
||||
|
||||
break;
|
||||
case ORDER_REASON_TP:
|
||||
Res = 4;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return((ENUM_ORDER_REASON)Res);
|
||||
}
|
||||
|
||||
ENUM_ORDER_REASON IntegerToReason( const int Reason ) const
|
||||
{
|
||||
ENUM_ORDER_REASON Res = ORDER_REASON_CLIENT;
|
||||
|
||||
switch (Reason)
|
||||
{
|
||||
case 3:
|
||||
Res = ORDER_REASON_SL;
|
||||
|
||||
break;
|
||||
case 4:
|
||||
Res = ORDER_REASON_TP;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return((ENUM_ORDER_REASON)Res);
|
||||
}
|
||||
|
||||
public:
|
||||
UINT64 order; // óíèêàëüíûé èäåíòèôèêàòîð îðäåðà
|
||||
// wchar_t symbol[32]; // ñèìâîë ïî êîòîðîìó âûñòàâëåí îðäåð
|
||||
STRING32 symbol; // ñèìâîë ïî êîòîðîìó âûñòàâëåí îðäåð
|
||||
INT64 time_setup; // âðåìÿ ïðè¸ìà îðäåðà îò êëèåíòà â ñèñòåìó
|
||||
INT64 time_done; // âðåìÿ ñíÿòèÿ çàâêè
|
||||
ENUM_ORDER_TYPE type; // òèï îðäåðà
|
||||
ENUM_ORDER_REASON type_reason; // ïðè÷èíà ôîðìèðîâàíèÿ îðäåðà
|
||||
double price_order; // öåíà îðäåðà
|
||||
double price_trigger; // öåíà èñïîëíåíèÿ îðäåðà
|
||||
double price_sl; // öåíà SL â îðäåðå
|
||||
double price_tp; // öåíà TP â îðäåðå
|
||||
UINT64 volume_initial; // íà÷àëüíûé îáú¸ì çàÿâêè
|
||||
UINT64 volume_current; // òåêóùèé îáú¸ì çàÿâêè
|
||||
// wchar_t comment[32]; // êîììåíòàðèé ê îðäåðó
|
||||
STRING32 comment; // êîììåíòàðèé ê îðäåðó
|
||||
ENUM_ORDER_STATE state; // òåêóùåå ñîñòîÿíèå îðäåðà
|
||||
UINT digits; // êîëè÷åñòâî çíàêîâ ó òîðãîâîãî ñèìâîëà
|
||||
double contract_size; // ðàçìåð êîíòðàêòà
|
||||
|
||||
bool Set( const ulong Ticket )
|
||||
{
|
||||
const bool Res = (::HistoryOrderGetInteger(Ticket, ORDER_TICKET) == Ticket);
|
||||
|
||||
if (Res)
|
||||
{
|
||||
this.order = Ticket; // óíèêàëüíûé èäåíòèôèêàòîð îðäåðà
|
||||
|
||||
string Str = ::HistoryOrderGetString(Ticket, ORDER_SYMBOL);
|
||||
this.symbol = Str; // ñèìâîë ïî êîòîðîìó âûñòàâëåí îðäåð
|
||||
|
||||
this.contract_size = ::SymbolInfoDouble(Str, SYMBOL_TRADE_CONTRACT_SIZE); // ðàçìåð êîíòðàêòà
|
||||
this.digits = (UINT)::SymbolInfoInteger(Str, SYMBOL_DIGITS); // êîëè÷åñòâî çíàêîâ ó òîðãîâîãî ñèìâîëà
|
||||
|
||||
Str = ::HistoryOrderGetString(Ticket, ORDER_COMMENT);
|
||||
this.comment = Str; // êîììåíòàðèé ê îðäåðó
|
||||
|
||||
this.time_setup = (INT64)::HistoryOrderGetInteger(Ticket, ORDER_TIME_SETUP); // âðåìÿ ïðè¸ìà îðäåðà îò êëèåíòà â ñèñòåìó
|
||||
this.time_done = (INT64)::HistoryOrderGetInteger(Ticket, ORDER_TIME_DONE); // âðåìÿ ñíÿòèÿ çàâêè
|
||||
|
||||
this.type = (ENUM_ORDER_TYPE)::HistoryOrderGetInteger(Ticket, ORDER_TYPE); // òèï îðäåðà
|
||||
this.type_reason = this.ReasonToInteger((ENUM_ORDER_REASON)::HistoryOrderGetInteger(Ticket, ORDER_REASON)); // ïðè÷èíà ôîðìèðîâàíèÿ îðäåðà
|
||||
this.state = (ENUM_ORDER_STATE)::HistoryOrderGetInteger(Ticket, ORDER_STATE); // òåêóùåå ñîñòîÿíèå îðäåðà
|
||||
|
||||
this.price_order = ::HistoryOrderGetDouble(Ticket, ORDER_PRICE_OPEN); // öåíà îðäåðà
|
||||
this.price_trigger = 0; // öåíà èñïîëíåíèÿ îðäåðà
|
||||
this.price_sl = ::HistoryOrderGetDouble(Ticket, ORDER_SL); // öåíà SL â îðäåðå
|
||||
this.price_tp = ::HistoryOrderGetDouble(Ticket, ORDER_TP); // öåíà TP â îðäåðå
|
||||
|
||||
this.volume_initial = (UINT64)(::HistoryOrderGetDouble(Ticket, ORDER_VOLUME_INITIAL) * this.contract_size * 1000 + 0.1); // íà÷àëüíûé îáú¸ì çàÿâêè
|
||||
this.volume_current = (UINT64)(::HistoryOrderGetDouble(Ticket, ORDER_VOLUME_CURRENT) * this.contract_size * 1000 + 0.1); // òåêóùèé îáú¸ì çàÿâêè
|
||||
}
|
||||
|
||||
return(Res);
|
||||
}
|
||||
|
||||
long GetProperty( const ENUM_ORDER_PROPERTY_INTEGER Property ) const
|
||||
{
|
||||
long Res = 0;
|
||||
|
||||
switch (Property)
|
||||
{
|
||||
case ORDER_TICKET:
|
||||
Res = (long)this.order;
|
||||
|
||||
break;
|
||||
case ORDER_TIME_SETUP:
|
||||
Res = this.time_setup;
|
||||
|
||||
break;
|
||||
case ORDER_TYPE:
|
||||
Res = this.type;
|
||||
|
||||
break;
|
||||
case ORDER_STATE:
|
||||
Res = this.state;
|
||||
|
||||
break;
|
||||
case ORDER_TIME_DONE:
|
||||
Res = this.time_done;
|
||||
|
||||
break;
|
||||
case ORDER_TIME_SETUP_MSC:
|
||||
Res = (long)this.time_setup * 1000;
|
||||
|
||||
break;
|
||||
case ORDER_TIME_DONE_MSC:
|
||||
Res = (long)this.time_done * 1000;
|
||||
|
||||
break;
|
||||
case ORDER_REASON:
|
||||
Res = this.IntegerToReason(this.type_reason);
|
||||
|
||||
break;
|
||||
case ORDER_POSITION_ID:
|
||||
Res = (long)this.order;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return(Res);
|
||||
}
|
||||
|
||||
double GetProperty( const ENUM_ORDER_PROPERTY_DOUBLE Property ) const
|
||||
{
|
||||
double Res = 0;
|
||||
|
||||
switch (Property)
|
||||
{
|
||||
case ORDER_VOLUME_INITIAL:
|
||||
Res = (double)this.volume_initial / (this.contract_size ? this.contract_size * 1000 : 1e8);
|
||||
|
||||
break;
|
||||
case ORDER_VOLUME_CURRENT:
|
||||
Res = (double)this.volume_current / (this.contract_size ? this.contract_size * 1000 : 1e8);
|
||||
|
||||
break;
|
||||
case ORDER_PRICE_OPEN:
|
||||
Res = this.price_order;
|
||||
|
||||
break;
|
||||
case ORDER_SL:
|
||||
Res = this.price_sl;
|
||||
|
||||
break;
|
||||
case ORDER_TP:
|
||||
Res = this.price_tp;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return(Res);
|
||||
}
|
||||
|
||||
string GetProperty( const ENUM_ORDER_PROPERTY_STRING Property ) const
|
||||
{
|
||||
string Res = NULL;
|
||||
|
||||
switch (Property)
|
||||
{
|
||||
case ORDER_SYMBOL:
|
||||
Res = this.symbol[];
|
||||
|
||||
break;
|
||||
case ORDER_COMMENT:
|
||||
Res = this.comment[];
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return(Res);
|
||||
}
|
||||
|
||||
#define TOSTRING(A) #A + " = " + (string)(this.A) + "\n"
|
||||
#define TOSTRING2(A) #A + " = " + ::EnumToString(this.A) + " (" + (string)(this.A) + ")\n"
|
||||
#define TOSTRING3(A) #A + " = " + this.A[] + "\n"
|
||||
|
||||
string ToString( void ) const
|
||||
{
|
||||
return(
|
||||
TOSTRING(order) + // óíèêàëüíûé èäåíòèôèêàòîð îðäåðà
|
||||
TOSTRING3(symbol) + // ñèìâîë ïî êîòîðîìó âûñòàâëåí îðäåð
|
||||
TOSTRING(time_setup) + // âðåìÿ ïðè¸ìà îðäåðà îò êëèåíòà â ñèñòåìó
|
||||
TOSTRING(time_done) + // âðåìÿ ñíÿòèÿ çàâêè
|
||||
TOSTRING2(type) + // òèï îðäåðà
|
||||
TOSTRING2(type_reason) + // ïðè÷èíà ôîðìèðîâàíèÿ îðäåðà
|
||||
TOSTRING(price_order) + // öåíà îðäåðà
|
||||
TOSTRING(price_trigger) + // öåíà èñïîëíåíèÿ îðäåðà
|
||||
TOSTRING(price_sl) + // öåíà SL â îðäåðå
|
||||
TOSTRING(price_tp) + // öåíà TP â îðäåðå
|
||||
TOSTRING(volume_initial) + // íà÷àëüíûé îáú¸ì çàÿâêè
|
||||
TOSTRING(volume_current) + // òåêóùèé îáú¸ì çàÿâêè
|
||||
TOSTRING3(comment) + // êîììåíòàðèé ê îðäåðó
|
||||
TOSTRING2(state) + // òåêóùåå ñîñòîÿíèå îðäåðà
|
||||
TOSTRING(digits) + // êîëè÷åñòâî çíàêîâ ó òîðãîâîãî ñèìâîëà
|
||||
TOSTRING(contract_size) // ðàçìåð êîíòðàêòà
|
||||
);
|
||||
}
|
||||
|
||||
#undef TOSTRING3
|
||||
#undef TOSTRING2
|
||||
#undef TOSTRING
|
||||
};
|
||||
|
||||
#undef UINT
|
||||
#undef INT64
|
||||
#undef UINT64
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user