Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
CTradeStatistics - библиотека для MetaTrader 5
- Просмотров:
- 3057
- Рейтинг:
- Опубликован:
- 2012.09.13 16:53
- Обновлен:
- 2012.09.13 17:22
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Класс CTradeStatistics содержит расчеты всех показателей из перечисления ENUM_STATISTICS.
В данном классе все показатели кроме просадок по эквити можно рассчитать на основании истории торговли.
Основное назначение класса - снять ограничение которое имеется у функции TesterStatistics(), т.е. дать возможность получить необходимые статистические показатели в любой момент времени в процессе тестирования а также за пределами тестера.
Пример использования вне тестера
Расчет всех показателей выполняется вызовом функции CTradeStatistics::Calculate(). После успешного выполнения этой функции, результат доступен через вызов многочисленных методов, имена которых созвучны с названиями статистических показателей.
Пример кода:
CTradeStatistics m_stat; if(m_stat.Calculate()) PrintFormat("LR Correlation: %.2f",m_stat.LRCorrelation()); else Print(m_stat.GetLastErrorString());
Результат:
2012.09.13 08:52:19 TradeStatistics (EURUSD,H1) LR Correlation: 0.97
Для вывода сразу всех показателей в журнал можно использовать функцию CTradeStatistics::PrintStatistics().
if(m_stat.Calculate()) PrintStatistics();
Простой пример работы с классом можно найти в скрипте TradeStatistics.mq5.
Для более наглядного отображения результатов расчета создана панель TradeStatisticsPanel.
Пример использования в тестере
Для корректно расчета просадок по эквити необходимо воспользоваться функцией CTradeStatistics::CalculateEquityDD().
Пример кода:
#include <CTradeStatistics.mqh> CTradeStatistics m_stat; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { m_stat.CalculateEquityDD(CALC_INIT); return(0); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { m_stat.CalculateEquityDD(CALC_DEINIT); if(m_stat.Calculate())m_stat.PrintStatistics(); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { m_stat.CalculateEquityDD(CALC_TICK); }
Важно отметить, что получить достоверные значения статистических показателей можно не только в конце тестирования по событию OnTester() или OnDeinit() но и в любой точке программы. Обновлять расчеты можно, например, по событию OnTrade(), как это показано в следующем примере:
void OnTrade() { //--- block repeated requests at same sec. static datetime time_on_trade; if(time_on_trade==TimeTradeServer())return; time_on_trade=TimeTradeServer(); //--- update statistics if(!m_stat.Calculate())Print(m_stat.GetLastErrorString()); }
Индикатор BidAskChannel предназначен для учёта спреда в тенях свечек.
Squize_MAИндикатор Squize_MA представляет пересечение двух мувингов с разными периодами усреднения плюс к этому на график добавлены условные границы флета.
Панель для отображения статистических показателей, рассчитанных на основании истории сделок.
CSelectFileКласс графического интерфейса выбора файла.