Maschinelles Lernen im Handel: Theorie, Modelle, Praxis und Algo-Trading - Seite 200

 
Renat Fatkhullin:

Kehren wir zu der ursprünglichen Aussage über die R-Fehler in dem Artikel zurück.

Wir sind nach wie vor der Meinung, dass es Fehler gibt, die durch Unachtsamkeit bei der Umsetzung verursacht wurden.

Ihr Spezialist will mir nicht in der Sache selbst antworten. Er hat mir nur in den Wolfram gestochen und das war's.

Ich werde unseren Standpunkt wiederholen. Bei der Gamma-Verteilung gibt es keinen Fehler. Dies ist eine Frage der Konvention in der mathematischen Gemeinschaft. Es gibt eine fehlerhafte Formulierung Ihrerseits, die nicht korrekt ist.

Die Ableitung von Null für die Dichte in Ihrer Version ist erstens eine der möglichen Optionen (Konventionen). Und zweitens, das Wesen der angewandten Analyse von der Wahl dieses Wertes (nan, 0 oder 1) hat keinen Einfluss auf alles. Verteilungsfunktionen werden zur Schätzung von Statistiken verwendet. In diesem Fall ist die Verteilung gleich Null. Und das ist ausreichend.

Was die t-Verteilung betrifft, so habe ich diesen Fehler mit der neuesten Version von R reproduziert, bin aber nicht auf das Wesentliche des Algorithmus eingegangen. Ich gebe zu, dass die Korrektur wirklich notwendig war.

Ich werde versuchen, eine Frage an das R-Support-Team zu stellen.
 

Und dann geht man hin, berechnet alles neu und verbringt ein paar Wochen damit, es noch einmal zu überprüfen, so wie er es getan hat. Aber stattdessen haben Sie unseren Artikel nicht einmal gelesen.

Wir für unseren Teil haben den Job gemacht. Und wir haben gute Arbeit geleistet. Wenn Wolfram auch für Sie keine Autorität ist, dann verschwenden Sie Ihre Zeit mit dieser Art der Kommunikation.

Verwechseln Sie bitte nicht Schöpfer und Nutzer.

 
Renat Fatkhullin:

Und dann geht man hin, rechnet alles nach und verbringt ein paar Wochen damit, alles noch einmal zu überprüfen, so wie er es getan hat. Aber stattdessen haben Sie unseren Artikel nicht einmal gelesen.

Wir für unseren Teil haben den Job gemacht. Und wir haben gute Arbeit geleistet. Wenn Wolfram auch für Sie keine Autorität ist, dann verschwenden Sie Ihre Zeit mit dieser Art der Kommunikation.

Verwechseln Sie bitte nicht Schöpfer und Nutzer.

Ich respektiere Ihre Meinung. Aber warum sind Sie dafür verantwortlich?

Ich sage es noch einmal.

Die Ableitung von Null für die Dichte in Ihrer Version ist erstens eine der möglichen Optionen (Konventionen). Und zweitens, das Wesen der angewandten Analyse von der Wahl dieses Wertes (nan, 0 oder 1) hat keinen Einfluss auf alles. Verteilungsfunktionen werden zur Schätzung von Statistiken verwendet. In diesem Punkt ist die Verteilung gleich Null. Und das ist genug.

Ich würde hinzufügen, dass die Beschleunigung von Berechnungen im Allgemeinen ein Vorteil ist. Das heißt, objektiv ist die Umsetzung von Funktionen nicht schlechter oder sogar besser, wie in Ihrem Artikel beschrieben.
 
Ich hoffe, der emotionale Teil ist vorbei...

Habe mich nach 0^0 umgesehen. Genau das ist der Streitpunkt, der in der Wahrscheinlichkeitsdichtegleichung für die Gammaverteilung bei x = 0 enthalten ist.


In dieser Diskussion ist dies die Antwort:
0^0 und 0! sind aufgrund der Regel des leeren Produkts gleich 1. Der IEEE-Standard besagt, dass 0^0 eine 1 ergeben sollte. Die meisten Computerprogramme werten sie daher auf diese Weise aus. Es gibt keine Situationen, in denen eine Auswertung zu 0 hilfreich ist.

Es gibt viele Formeln, die von 0^0=1 ausgehen, z. B. Die Notation für Polynome und Potenzreihen, die Kardinalzahlenarithmetik, der Binomialsatz usw. gehen alle von 0^0=1 aus. Wenn man zum Beispiel x=0 durch x^0+x^1+x^2+... ersetzt. = 1/(1-x) zeigt 0^0 = 1.

Das heißt, der Standard für die Umwandlung dieses Ausdrucks in 1. Und es ist weder von Vorteil noch von Nachteil, den Ausdruck auf 0 zu setzen.

Ich denke, in R hardcoded 1... und Sie haben 0.

Das ist der Punkt, und es hat keinen Sinn, darüber zu streiten. Ein Computer kann den Wert nicht algebraisch berechnen.
 
Alexey Burnakov:

Die Ableitung von Null für die Dichte in Ihrer Version ist erstens eine Möglichkeit (Konventionen).

Man kann davon ausgehen, dass eine Funktion zu definieren bedeutet, einen Weg zu ihrer Berechnung festzulegen.

Gegebener Ausdruck
Alexey Burnakov:

Darüber hinaus ist laut:

https://en.wikipedia.org/wiki/Gamma_distribution

Wenn x = 0, alpha = 1, beta = 1 ist, erhält man einen undefinierten Wert im Zähler, der den gesamten Bruch ins Ungewisse zieht.

Wir stellen fest, dass die Gamma-Dichte der Verteilung am Punkt Null streng genommen undefiniert ist. Nimmt man die Grenze auf der rechten Seite, ist die Dichte eins.

Vor diesem Hintergrund halten wir die Formulierung "Rechenfehler in R" für nicht korrekt. Genauer gesagt ist es eine Frage der Konventionen: als gleich dem Ausdruck Null im Grad Null zu betrachten. Die Gleichsetzung der Dichte der Gamma-Verteilung mit Null am Punkt Null scheint keine gültige Praxis zu sein.

entspricht nicht der Definition der Funktion, da sie, wie Sie hervorgehoben haben, eine Unsicherheit am Punkt x=0 enthält.

Wenn anstelle von x>0 die Bedingung x>=0 gesetzt wird, gibt es keine Unsicherheit und man kann die Werte mit dieser Formel berechnen.

Was die Praxis angeht - Mathematica und Matlab können als Industriestandard für technische Berechnungen angesehen werden, sie erzeugen 0, d.h. dieser Ausdruck ist nur für x>0 gültig.

 
Quantum:

Wir können davon ausgehen, dass eine Funktion zu definieren bedeutet, einen Weg zu ihrer Berechnung festzulegen.

Der angegebene Ausdruck lautet.

ist nicht geeignet, um eine Funktion zu definieren, da sie, wie Sie sagten, bei x=0 eine Unsicherheit enthält.

Setzt man anstelle von x>0 die Bedingung x>=0 ein, gibt es keine Unsicherheit und man kann mit dieser Formel Werte berechnen.

Was die Praxis betrifft - Mathematica und Matlab können als Industriestandard für technische Berechnungen angesehen werden, sie ergeben 0, d.h. der Ausdruck ist nur für x>0 wahr.

Richtig. Die Funktion ist auf dem positiven Bereich (0,inf) definiert.

Warum haben Sie an Punkt 0 immer noch 0? und warum ist der Fehler eine 1?


Übrigens, interessant. Wolfram definiert eine Wahrscheinlichkeitsfunktion der Gamma-Verteilung im Raum [0,inf]. Und so geben sie einen bestimmten Wert bei Null an... Das ist merkwürdig.


 
Quantum:

Mathematica und Matlab können als Industriestandard für technische Berechnungen angesehen werden

Sie haben eine Situation angenommen, für die es keine Lösung gibt, haben das Ergebnis nachgeschlagen, das Wolfram liefert, und alle anderen Ergebnisse als falsch bezeichnet. Dies ist keine technische Berechnung, sondern ein Dogma.

Sie könnten R als Referenz nehmen und über die Suche nach einem Fehler in Wolfram schreiben. Ich schätze, wenn Sie alle Mathematik-Software, und teilen sie in zwei Gruppen auf der Grundlage, was sie in dieser Situation zurück - es wird ein 50%/50% Split, können Sie ein Dutzend mehr Software, die mql zeichnet sich in einem Artikel über mql.

Vielen Dank für die Hinweise auf die Fehler inAS 243. Sie sollten es aber nicht auf das Verhalten anderer Funktionen mit Parametern schieben, für die es keine klare Lösung gibt.
Sie hätten in dem Artikel über die Vorteile von mql schreiben sollen, dass R diese und jene Funktion hat, die einen Fehler von 15 Dezimalstellen hat. Und wir haben eine andere Funktion in mql, die genauer ist. Alles wäre kultiviert und wissenschaftlich, nicht so dogmatisch wie heute.

 
Alexey Burnakov:

Warum haben Sie an Punkt 0 immer noch 0? und warum ist der Fehler eine 1?

Betrachten wir ein Beispiel mit den Parametern a=0,5, b=1 am Punkt x=0

> dgamma(0,0.5,1,log=FALSE)[1] Inf> pgamma(0,0.5,1,log=FALSE)[1] 0

Wenn wir den Punkt x=0 nicht ausschließen, divergiert die Dichte und die Wahrscheinlichkeit ist in Ordnung.

Und darüber hinaus gibt es auch kein Problem:

> pgamma(0.00001,0.5,1,log=FALSE)[1] 0.003568236

Es stellt sich heraus, dass bei der Berechnung der CDF R der Punkt x=0 ausgeschlossen wird und die Unendlichkeit irgendwo verschwunden ist.

 
Quantum

Lieber Kollege!

Mehrere Seiten lang wird über die Unterschiede zwischen Ihren und den Algorithmen von R an den Rändern des Funktionsbereichs diskutiert. Randpunkte sind Randpunkte und in der Praxis können die Unterschiede vernachlässigt werden.

Aber in diesem Fall habe ich eine viel wichtigere Frage:

Wo ist die Dokumentation für alle Ihre Funktionen?

Bisher dachte ich, dass wir Ihre Funktion nehmen, dann die Dokumentation von R, da Ihre Funktionen analog sind, und uns mit den Teilen der R-Dokumentation befassen, die entweder die Algorithmen beschreiben oder zu den von R bereitgestellten Links führen. R verfügt über eine sehr hochwertige Dokumentation und einen Referenzapparat.

Im Laufe der Diskussion habe ich herausgefunden, dass sich Ihre Funktionen von R unterscheiden - es handelt sich um andere Funktionen, deren Algorithmen auf anderen Quellen beruhen. In dem Artikel selbst steht nichts darüber, es gibt keine Dokumentation. Und wir erfahren es von Renat in einem ganz anderen Zusammenhang.

In der Praxis können wir eine eindeutige Schlussfolgerung ziehen, dass der Code nicht von R auf MQL5 portiert werden kann.

Und hier ist der Grund dafür.

Für mich ist klar: Wenn da steht "analog zu R" und es gibt keine Dokumentation zu dem Analogon, dann ist es zu 100 % analog und ich kann den Code problemlos vom Interpreter zum Compiler übertragen, ohne mir darüber Gedanken zu machen. Und wenn das nicht der Fall ist, dann reicht ein einziger Fall aus, um die Idee der Portierung von Code von R nach MQL5 zu verwerfen. Niemand möchte, dass man bei der Übertragung von funktionierendem Code nach R Kopfschmerzen bekommt, wenn man MQL-Code erhält, der aufgrund von Feinheiten bei der Implementierung von Algorithmen nicht funktioniert.

 
SanSanych Fomenko:

Wo ist die Dokumentation für alle Ihre Funktionen?

Bisher dachte ich, dass wir Ihre Funktion nehmen, dann die Dokumentation für R nehmen, da Ihre Funktionen Analogien sind, und in die Teile der R-Dokumentation gehen, die entweder die Algorithmen beschreiben oder zu den von R bereitgestellten Links gehen. R verfügt über eine sehr hochwertige Dokumentation und einen Referenzapparat.

Im Laufe der Diskussion habe ich herausgefunden, dass sich Ihre Funktionen von R unterscheiden - es handelt sich um andere Funktionen, deren Algorithmen auf anderen Quellen beruhen. In dem Artikel selbst steht nichts darüber, es gibt keine Dokumentation. Und wir erfahren es von Renat in einem ganz anderen Zusammenhang.

In der Praxis können wir eine eindeutige Schlussfolgerung ziehen, dass der Code nicht von R auf MQL5 portiert werden kann.

Und hier ist der Grund dafür.

Für mich ist klar: Wenn da steht "analog zu R" und es gibt keine Dokumentation zu dem Analogon, dann ist es zu 100 % analog und ich kann den Code problemlos vom Interpreter zum Compiler übertragen, ohne mir darüber Gedanken zu machen. Und wenn das nicht der Fall ist, dann reicht ein einziger Fall aus, um die Idee der Portierung von Code von R nach MQL5 zu verwerfen. Niemand möchte, dass es zu einer völligen Blockade kommt, wenn man nach der Migration des Arbeitscodes nach R MQL-Code erhält, der aufgrund der Feinheiten bei der Implementierung von Algorithmen nicht funktioniert.

Zur Zeit sind die Funktionen in dem Artikel https://www.mql5.com/ru/articles/2742 beschrieben.

Berechnen Sie als Beispiel eine Normalverteilung mit den Parametern 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) Das Analogon der R-Funktion dnorm() ist eine Funktion:

Die Funktion berechnet die Werte der Wahrscheinlichkeitsdichtefunktion der Normalverteilung mit den Parametern mu und sigma für das Array der Zufallsvariablen x[]. Im Falle eines Fehlers gibt es false zurück. Ein Analogon von dnorm() in R.

bool MathProbabilityDensityNormal(
  const double   &x[],        // [in]  Массив со значениями случайной величины
  const double   mu,          // [in]  Параметр распределения  mean (математическое ожидание)
  const double   sigma,       // [in]  Параметр распределения sigma (среднеквадратическое отклонение)
  const bool     log_mode,    // [in]  Флаг расчета логарифма значения, если log_mode=true, то рассчитывается натуральный логарифм плотности вероятности
  double         &result[]    // [out] Массив для значений функции плотности вероятности
);

2) Analog pnorm:

Die Funktion berechnet den Wert der Normalverteilungsfunktion mit den Parametern mu und sigma für das Array der Zufallsvariablen x[]. Im Falle eines Fehlers gibt sie false zurück. Analog zu pnorm() in R.

bool MathCumulativeDistributionNormal(
  const double   &x[],        // [in]  Массив со значениями случайной величины
  const double   mu,          // [in]  Математическое ожидание
  const double   sigma,       // [in]  Среднеквадратическое  отклонение
  const bool     tail,        // [in]  Флаг расчета, если lower_tail=true, то рассчитывается вероятность того, что случайная величина не превысит x
  const bool     log_mode,    // [in]  Флаг расчета логарифма значения, если log_mode=true, то рассчитывается натуральный логарифм вероятности
  double         &result[]    // [out] Массив для значений функции вероятности
);

3) Analogon von qnorm:

Diese Funktion berechnet die Werte der Umkehrfunktion der Normalverteilung mit den Parametern mu und sigma für das Array der probability[]-Werte. Im Falle eines Fehlers gibt sie false zurück. Das Analogon von qnorm() in R.

bool MathQuantileNormal(
  const double   &probability[],// [in]  Массив со значениями вероятностей случайной величины
  const double   mu,            // [in]  Математическое ожидание
  const double   sigma,         // [in]  Среднеквадратическое отклонение
  const bool     tail,          // [in]  Флаг расчета, если lower_tail=false, то расчет ведется для вероятности 1.0-probability
  const bool     log_mode,      // [in]  Флаг расчета, если log_mode=true, то расчет ведется для вероятности Exp(probability)
  double         &result[]      // [out] Массив со значениями квантилей
);

Dies ist ein Beispiel für die Verwendung dieses Instruments:

#include <Math\Stat\Normal.mqh>
//+------------------------------------------------------------------+
//| 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]);
  }

Ergebnis:

2016.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.000000000000000000005551e-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.000000000000000000011102e-01 PDF=7.89501583008941493214e-02, CDF=3.593031911292598098213e-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.456546247585430410108e-02, Q=3.00000000000000266454e-01
2016.11.11 11:56:46.413 Test (EURUSD,H1) 1 4, x=4.00000000000000022204e-01 PDF=1.1092083434679455543315e-01, CDF=5.47992916995579740225e-02, Q=3.99999999999999911182e-01
2016.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.9999999999999999977796e-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.9999999999999999955591e-01 PDF=1.71368592047807355438e-01, CDF=9.6800484585610344040793e-02, Q=7.00000000000000177636e-01
2016.11.11:56:46.413 Test (EURUSD,H1) 1 8, x=8.0000000000000000044409e-01 PDF=1.94186054983212952330e-01, CDF=1.15069670221708289515e-01, Q=8.0000000000000000044409e-01,
2016.11.11 11:56:46.413 Test (EURUSD,H1) 1 9, x=9.0000000000000000022204e-01 PDF=2.1785217177032550525793e-01, CDF=1.35666060946382671659e-01, Q=9.00000000000000133227e-01
2016.11.11:56:46.413 Test (EURUSD,H1) 1 10, x=1.000000000000000000000000e+00 PDF=2.41970724519143365328e-01, CDF=1.58655253931457046468e-01, Q=1.00000000000000000000e+00,

Berechnungsergebnis in R:

> 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 [1] 0.05399097 0.06561581 0.07895016 0.09404908 0.11092083 0.12951760 0.14972747 0.17136859 [9] 0.19418605 0.21785218 0.24197072> normal_cdf [1] 0.02275013 0.02871656 0.03593032 0.04456546 0.05479929 0.06680720 0.08075666 0.09680048 [9] 0.11506967 0.13566606 0.15865525> normal_quantile [1] 0.0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
Статистические распределения в MQL5 - берем лучшее из R и делаем быстрее
Статистические распределения в MQL5 - берем лучшее из R и делаем быстрее
  • 2016.10.06
  • MetaQuotes Software Corp.
  • www.mql5.com
Рассмотрены функции для работы с основными статистическими распределениями, реализованными в языке R. Это распределения Коши, Вейбулла, нормальное, логнормальное, логистическое, экспоненциальное, равномерное, гамма-распределение, центральное и нецентральные распределения Бета, хи-квадрат, F-распределения Фишера, t-распределения Стьюдента, а также дискретные биномиальное и отрицательное биномиальные распределения, геометрическое, гипергеометрическое и распределение Пуассона. Есть функции расчета теоретических моментов распределений, которые позволяют оценить степень соответствия реального распределения модельному.
Dateien:
Test.mq5  2 kb
Grund der Beschwerde: