Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 200
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Давайте вернемся к исходному утверждению об ошибках R в статье.
Наше мнение остается в силе - ошибки присутствуют и вызваны они небрежностью в реализации.
Попробую задать вопрос команде поддержки R.
А вы вникните, пересчитайте все, потратьте несколько недель на перепроверки, как сделал это он. Но вместо этого вы даже статью не прочли нашу.
Со своей стороны мы работу сделали. И сделали хорошо. Если для вас и Вольфрам не авторитет, то вы зря затеяли такой способ общения.
Не путайте создателей с пользователями, пожалуйста.
А вы вникните, пересчитайте все, потратьте несколько недель на перепроверки, как сделал это он. Но вместо этого вы даже статью не прочли нашу.
Со своей стороны мы работу сделали. И сделали хорошо. Если для вас и Вольфрам не авторитет, то вы зря затеяли такой способ общения.
Не путайте создателей с пользователями, пожалуйста.
There are many formulas that assume 0^0=1, e.g. notation for polynomials and power series, cardinal number arithmetic, the binomial theorem, etc., these all assume 0^0=1. For example, substituting x=0 into x^0+x^1+x^2+... = 1/(1-x) shows 0^0 = 1.
Можно исходить из того, что определить функцию означает задать способ ее вычисления.
Приведенное выражениеБолее того, согласно:
https://en.wikipedia.org/wiki/Gamma_distribution
при x = 0, alpha = 1, beta = 1, в числителе получается неопределенное значение, что приводит всю дробь к неопределенности.
Заявляем, что строго говоря, плотность гамма распределения в точке ноль не определена. А при взятии предела справа плотность равна единице.
В свете этого мы считаем, то формулировка утверждения "ошибки расчетов в R" не является корректной. Точнее, это вопрос конвенций: чем считать равной выражение ноль в степени ноль. Приравнивание плотности гамма распределения к нулю в точке ноль не представляется сколько-либо обусловленной практикой.
не подходит для определения функции, поскольку содержит неопределенность в точке x=0, как Вы указали.
Если вместо x>=0 поставить условие x>0, то неопределенности не будет и можно будет вычислять значения по этой формуле.
По поводу практики - Mathematica и Matlab можно считать промышленными стандартами инженерных расчетов, они выдают 0, т.е. то выражение справедливо только для x>0.
Можно исходить из того, что определить функцию означает задать способ ее вычисления.
Приведенное выражениене подходит для определения функции, поскольку содержит неопределенность в точке x=0, как Вы указали.
Если вместо x>=0 поставить условие x>0, то неопределенности не будет и можно будет вычислять значения по этой формуле.
По поводу практики - Mathematica и Matlab можно считать промышленными стандартами инженерных расчетов, они выдают 0, т.е. то выражение справедливо только для x>0.
Mathematica и Matlab можно считать промышленными стандартами инженерных расчетов
Вы взяли ситуацию для которой нету решения, подсмотрели результат который возвращает именно Wolfram, и назвали все другие результаты неверными. Это не инженерные расчёты, а догма.
А могли бы взять за эталон R, и писать о том что нашли ошибку в Wolfram. Полагаю если взять весь математический софт, и поделить их на две группы по признаку что они возвращают в такой ситуации - будет разделение 50%/50%, сможете в статью о mql добавить ещё десяток софтин которые mql превосходит.
За указанные погрешности в AS 243 спасибо. Но не стоит на это сваливать поведение других функций с параметрами для которых нету чёткого решения.
Так и надо было писать в статье о преимуществах mql - вот в R есть такая-то функция, которая имеет погрешность в 15 знаке после запятой. А у нас в mql есть другая функция, которая точнее. Всё былобы культурно и научно, а не догматично как сейчас.
Рассмотрим пример с параметрами a=0.5, b=1 в точке x=0
Если не исключать точку x=0, то плотность расходится, а с вероятностью все в порядке.
И дальше тоже никаких проблем:
Получается, что при расчете CDF R исключает точку x=0, бесконечность куда-то исчезла.
Уважаемый коллега!
Несколько страниц идет спор по различиях алгоритмов Ваших и R по краям области определения функций. Крайние точки - это крайние точки и на практике различиями можно было бы пренебречь.
Но в этом случае у меня возникает гораздо более существенный вопрос:
Где документация на все Ваши функции?
Ранее я считал, что берем Вашу функцию, потом берем документацию на R, так как Ваши функции являются аналогами, и вникаем в те части документации R, которые либо описывают алгоритмы, либо переходим по ссылкам, указанным R. R имеет очень качественную документацию и справочный аппарат.
В ходе спора я выяснил, что Ваши функции отличаются от R - это некие другие функции, алгоритмы которых опираются на иные источники. В самой статье об этом ничего нет, документации нет. И об этом мы узнаем от Рената совершенно в другом контексте.
На практике следует однозначный вывод, что перенос кода с R на MQL5 невозможен.
И вот почему.
Для меня совершенно очевидно, что если написано "аналог R" и не дана документация на аналог, то это 100% аналог и я могу, не заморачиваясь, переносить код из интерпретатора в компилятор. А если это не так, то достаточно одного случая, чтобы поставить крест на идее переноса кода из R в MQL5. Никто не захочет получить совершенно тупиковый головняк, когда при переносе работающего кода в R получаешь не работающий код MQL из-за тонкостей в реализации алгоритмов.
Где документация на все Ваши функции?
Ранее я считал, что берем Вашу функцию, потом берем документацию на R, так как Ваши функции являются аналогами, и вникаем в те части документации R, которые либо описывают алгоритмы, либо переходим по ссылкам, указанным R. R имеет очень качественную документацию и справочный аппарат.
В ходе спора я выяснил, что Ваши функции отличаются от R - это некие другие функции, алгоритмы которых опираются на иные источники. В самой статье об этом ничего нет, документации нет. И об этом мы узнаем от Рената совершенно в другом контексте.
На практике следует однозначный вывод, что перенос кода с R на MQL5 невозможен.
И вот почему.
Для меня совершенно очевидно, что если написано "аналог R" и не дана документация на аналог, то это 100% аналог и я могу, не заморачиваясь, переносить код из интерпретатора в компилятор. А если это не так, то достаточно одного случая, чтобы поставить крест на идее переноса кода из R в MQL5. Никто не захочет получить совершенно тупиковый головняк, когда при переносе работающего кода в R получаешь не работающий код MQL из-за тонкостей в реализации алгоритмов.
На текущий момент описание функций есть в статье https://www.mql5.com/ru/articles/2742
Рассмотрим на примере расчета нормального распределения с параметрами mu=2, sigma=1:
n <- 10
k <- seq(0,1,by=1/n)
mu=2
sigma=1
normal_pdf<-dnorm(k, mu, sigma, log = FALSE)
normal_cdf<-pnorm(k, mu, sigma, lower.tail=TRUE,log.p = FALSE)
normal_quantile <- qnorm(normal_cdf, mu,sigma, lower.tail=TRUE,log.p = FALSE)
normal_pdf
normal_cdf
normal_quantile
1) Аналогом R функции dnorm() является функция:
Функция рассчитывает значения функции плотности вероятности нормального распределения с параметрами mu и sigma для массива случайных величин x[]. В случае ошибки возвращает false. Аналог dnorm() в R.
2) Аналог pnorm:
Функция рассчитывает значение функции нормального распределения вероятностей с параметрами mu и sigma для массива случайных величин x[]. В случае ошибки возвращает false. Аналог pnorm() в R.
3) Аналог qnorm:
Для массива значений вероятности probability[] функция рассчитывает значения обратной функции нормального распределения с параметрами mu и sigma. В случае ошибки возвращает false. Аналог qnorm() в R.
Пример их использования:
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- arrays for calculated values
double x_values[];
double normal_pdf[];
double normal_cdf[];
double normal_quantile[];
//--- prepare x values
const int N=11;
ArrayResize(x_values,N);
for(int i=0;i<N;i++)
x_values[i]=i*1.0/(N-1);
//--- set distribution parameters
double mu=2.0;
double sigma=1.0;
//--- calculate pdf, cdf and quantiles
MathProbabilityDensityNormal(x_values,mu,sigma,false,normal_pdf);
MathCumulativeDistributionNormal(x_values,mu,sigma,true,false,normal_cdf);
MathQuantileNormal(normal_cdf,mu,sigma,true,false,normal_quantile);
//--- show calculated values
for(int i=0;i<N;i++)
PrintFormat("1 %d, x=%.20e PDF=%.20e, CDF=%.20e, Q=%.20e,",i,x_values[i],normal_pdf[i],normal_cdf[i],normal_quantile[i]);
}
Результат:
2016.11.11 11:56:46.413 Test (EURUSD,H1) 1 0, x=0.00000000000000000000e+00 PDF=5.39909665131880628364e-02, CDF=2.27501319481792120547e-02, Q=0.00000000000000000000e+00,
2016.11.11 11:56:46.413 Test (EURUSD,H1) 1 1, x=1.00000000000000005551e-01 PDF=6.56158147746765951780e-02, CDF=2.87165598160018034624e-02, Q=1.00000000000000088818e-01,
2016.11.11 11:56:46.413 Test (EURUSD,H1) 1 2, x=2.00000000000000011102e-01 PDF=7.89501583008941493214e-02, CDF=3.59303191129258098213e-02, Q=2.00000000000000177636e-01,
2016.11.11 11:56:46.413 Test (EURUSD,H1) 1 3, x=2.99999999999999988898e-01 PDF=9.40490773768869470217e-02, CDF=4.45654627585430410108e-02, Q=3.00000000000000266454e-01,
2016.11.11 11:56:46.413 Test (EURUSD,H1) 1 4, x=4.00000000000000022204e-01 PDF=1.10920834679455543315e-01, CDF=5.47992916995579740225e-02, Q=3.99999999999999911182e-01,
2016.11.11 11:56:46.413 Test (EURUSD,H1) 1 5, x=5.00000000000000000000e-01 PDF=1.29517595665891743772e-01, CDF=6.68072012688580713080e-02, Q=5.00000000000000222045e-01,
2016.11.11 11:56:46.413 Test (EURUSD,H1) 1 6, x=5.99999999999999977796e-01 PDF=1.49727465635744877437e-01, CDF=8.07566592337710387195e-02, Q=6.00000000000000310862e-01,
2016.11.11 11:56:46.413 Test (EURUSD,H1) 1 7, x=6.99999999999999955591e-01 PDF=1.71368592047807355438e-01, CDF=9.68004845856103440793e-02, Q=7.00000000000000177636e-01,
2016.11.11 11:56:46.413 Test (EURUSD,H1) 1 8, x=8.00000000000000044409e-01 PDF=1.94186054983212952330e-01, CDF=1.15069670221708289515e-01, Q=8.00000000000000044409e-01,
2016.11.11 11:56:46.413 Test (EURUSD,H1) 1 9, x=9.00000000000000022204e-01 PDF=2.17852177032550525793e-01, CDF=1.35666060946382671659e-01, Q=9.00000000000000133227e-01,
2016.11.11 11:56:46.413 Test (EURUSD,H1) 1 10, x=1.00000000000000000000e+00 PDF=2.41970724519143365328e-01, CDF=1.58655253931457046468e-01, Q=1.00000000000000000000e+00,
Результат расчета на R: