Maschinelles Lernen im Handel: Theorie, Modelle, Praxis und Algo-Trading - Seite 200
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
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.
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.
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.
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.
Man kann davon ausgehen, dass eine Funktion zu definieren bedeutet, einen Weg zu ihrer Berechnung festzulegen.
Gegebener AusdruckDarü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.
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.
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.
Betrachten wir ein Beispiel mit den Parametern a=0,5, b=1 am Punkt x=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:
Es stellt sich heraus, dass bei der Berechnung der CDF R der Punkt x=0 ausgeschlossen wird und die Unendlichkeit irgendwo verschwunden ist.
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.
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.
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.
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.
Dies ist ein Beispiel für die Verwendung dieses Instruments:
//+------------------------------------------------------------------+
//| 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: