Добрый день!
Интересует, возможно ли LR Correlation, поместить в функцию OnTester(), для того, чтобы провести оптимизацию советника по данному критерию, через Custom max?
Интересует, возможно ли LR Correlation, поместить в функцию OnTester()...
В описании приведен пример с OnTrade(). Ничего не мешает перенести расчеты в OnTester().
В описании приведен пример с OnTrade(). Ничего не мешает перенести расчеты в OnTester().
Мало знаком с mql5, поэтому прошу извинить за явные ошибки.
Пробую делать в коде советника перед OnDeinit так:
double OnTester() { double lrk=TesterStatistics(STAT_LR_CORRELATION); return(lrk); }
Выходит ошибка "'STAT_LR_CORRELATION' - can't convert enum".
Если так:
double OnTester() { //--- 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()); }
Ошибки: "return' - function must return a value", " '}' - not all control paths return a value".
1 и 2 строкой в советнике:
#include <CTradeStatistics.mqh>
CTradeStatistics m_stat;Скажите, что не так?
Методом проб и ошибок сделал так:
double OnTester() { CTradeStatistics m_stat; if(m_stat.Calculate()) PrintFormat("LR Correlation: %.2f",m_stat.LRCorrelation()); else Print(m_stat.GetLastErrorString()); double LRC=(double)m_stat.LRCorrelation(); return(LRC); }Вроде получилось..?
Андрей, есть замечания.
1. строка 500
if(m_balance_data.At(i)!=0.0) исправь на if(m_balance_data.At(i-1)!=0.0)
2. Строка 511
нет проверки знаменателя m_initial_deposit на 0
3. Обязательно укажи, что ты используешь вычисление m_sharpe_ratio по варианту Annual Sharpe Ratio с безрисковой ставкой RiskFreeRate
так как это только один из вариантов и он конкретно отличается от стандартного
Я обнаружил, что этот код не может рассчитать никакую статистику, связанную с просадкой капитала. У кого-нибудь получилось рассчитать просадку капитала с помощью собственного кода?
Что вы имеете в виду? Я, должно быть, неправильно понимаю ваш вопрос, потому что этот простой ответ не может быть тем, что вы ищете, не так ли? ---> Equity - Balance = { draw-down, если отрицательный, profit, если положительный } довольно простой расчет. с торговыми классами MT5 вы можете создать объект счета CAccountInfo acc; acc - это созданный объект информации о счете, дающий вам быстрый доступ ко всем функциям детализации счета. Затем сделайте следующее acc.Equity()-acc.Balance(). Ну, если честно, вы можете использовать еще более простой код acc.Profit(). Если положительный - это прибыль, если отрицательный - просадка, правильно? Отрицательная прибыль - это то же самое, что и просадка. Profit() - это разница между капиталом и балансом.
Если ваш вопрос сложнее, пожалуйста, добавьте детали ;)
отличная работа!
если вы хотите избежать предупреждений о компиляции
необходимо добавить элемент null в enum deal_result:
//+------------------------------------------------------------------+
//| результат сделки |
//+------------------------------------------------------------------+
enum deal_result
{
NOVALUE=0, //<---- added
WIN=1,
LOSS
};
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
CTradeStatistics:
Автор: Andrey Voytenko