Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «ctradesstats.mqh» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
Краткий обзор
О программе
Библиотека для MetaTrader 4, предоставляющая класс CTradeStats для сбора и хранения статистики торговых операций в советниках. Класс отслеживает открытые ордера и закрытые сделки, разделяя их по направлениям покупки и продажи, и вычисляет различные показатели эффективности.
Основные вычисляемые метрики включают общую прибыль, количество выигранных и проигранных сделок, процент побед, коэффициент прибыльности, ожидаемую отдачу на сделку, средний объём лотов на сделку, а также прибыль за текущий и предыдущий день. Данные фильтруются по магическим номерам, заданным при инициализации.
Метод Refresh обновляет статистику по текущим открытым позициям и автоматически запускает пересчёт исторических данных при смене дня или изменении количества ордеров. Метод RefreshHistory выполняет полный пересчёт всех закрытых сделок из истории счёта.
Класс для хранения и расчёта торговой статистики: открытые ордера, закрытые сделки, прибыль, количество побед и поражений, процент побед, коэффициент прибыльности и другие показатели.
Методы и конструкторы
Конструктор · CTradeStatsCTradeStats(int magicNumberBuy, int magicNumberSell)
Инициализирует экземпляр класса, задавая магические номера для ордеров на покупку и продажу, и выполняет начальный расчёт статистики.
Метод · CTradeStatsvoid RefreshHistory()
Пересчитывает статистику по всем закрытым сделкам из истории счёта с учётом заданных магических номеров.
Метод · CTradeStatsvoid Refresh()
Обновляет статистику по текущим открытым ордерам и при необходимости перезапускает пересчёт исторических данных при смене дня или изменении количества ордеров.
class CTradeStats
{
private:
int _today;
int _prevOrdersTotal;
int _magicNumberBuy;
int _magicNumberSell;
public:
int TotalCount; // # of open orders for this chart / ea
int BuyOrders; // # of open buy orders for this chart / ea
int SellOrders; // # of open sell orders for this chart / ea
double TotalProfit; // total profit of all open orders for this chart / ea
double TotalProfitPips; // total profit of all open orders for this chart / ea
double TotalProfitOfSellOrders; // total profit of all sell open orders for this chart / ea
double TotalProfitOfBuyOrders; // total profit of all buy open orders for this chart / ea
int OrdersWon; // Total # of orders won by this ea on this chart
int OrdersLost; // Total # of orders won by this ea on this chart
double WinPercentage; // percentage of orders won;
double AllTimeProfit; // all profit made by this ea on this chart
double ProfitToday; // profit made by this ea on this chart today
double ProfitYesterday; // profit made by this ea on this chart yesterday
double AllTimeProfitPips; // all profit made by this ea on this chart in pips
double ProfitTodayPips; // profit made by this ea on this chart today in pips
double ProfitYesterdayPips; // profit made by this ea on this chart yesterday in pips
double ProfitFactor; // profit factor
double ExpectedPayOff; // expected payoff / trade
double TotalLotsTraded; // total nr of lots traded
int TotalTrades; // total nr of trades traded
double AverageLotsPerTrade; // average lot size / trade
int GlobalOrderCount; // # open orders for this account
double GlobalProfit; // total profit of all open orders on this account
double HighestBuyPrice;
double LowestBuyPrice;
double HighestSellPrice;
double LowestSellPrice;
CTradeStats(int magicNumberBuy, int magicNumberSell)
{
_magicNumberBuy = magicNumberBuy;
_magicNumberSell = magicNumberSell;
_prevOrdersTotal = 0;
_today=0;
Refresh();
RefreshHistory();
}
void RefreshHistory()
{
AllTimeProfit = 0;
AllTimeProfitPips = 0;
OrdersWon = 0;
OrdersLost = 0;
ProfitToday = 0;
ProfitTodayPips = 0;
ProfitYesterday = 0;
ProfitYesterdayPips = 0;
WinPercentage = 0;
ProfitFactor = 0;
ExpectedPayOff = 0;
TotalLotsTraded = 0;
AverageLotsPerTrade = 0;
TotalTrades = 0;
double totalAmountWon = 0;
double totalAmountLost = 0;
datetime now = TimeCurrent();
datetime yesterday = TimeCurrent() - 60 * 60 * 24;
if (IsTesting() || IsOptimization()) return;
for (int i=0; i < OrdersHistoryTotal(); ++i)
{
if(OrderSelect(i, SELECT_BY_POS,MODE_HISTORY))
{
if (OrderMagicNumber() == _magicNumberBuy || OrderMagicNumber() == _magicNumberSell)
{
double digits = MarketInfo(OrderSymbol(), MODE_DIGITS);
double points = MarketInfo(OrderSymbol(), MODE_POINT);
double mult = 1.0;
if (digits == 3 || digits == 5) mult = 10.0;
TotalTrades = TotalTrades+1;
TotalLotsTraded += OrderLots();
double orderProfit = OrderProfit() + OrderSwap() + OrderCommission();
AllTimeProfit += orderProfit;
double pips=0;
if (OrderType() == OP_BUY)
{
pips = ( OrderClosePrice() - OrderOpenPrice()) ;
}
else
Показано первые 50% кода (символов: 5071)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.