Prüfung von Echtzeit-Prognosesystemen - Seite 19

 
grasn >> :

Etwas später werde ich in der Lage sein, eine Einschätzung der Wahrscheinlichkeit der Umsetzung der Vorhersage zu geben. Frage: Von welcher Korrelation sprechen Sie?

Ich meine etwas, mit dem man die Qualität eines Vorhersagesystems in einer Art Punktesystem bewerten kann. Man könnte also zwei Systeme nehmen, jedes in Punkten bewerten, die Ergebnisse vergleichen und sagen: "Dieses ist XX besser als jenes".

Generell wäre es interessant, darüber nachzudenken, wie eine solche Schätzung genauer vorgenommen werden könnte...

Der Korrelationskoeffizient ist das erste, was mir dazu einfällt. Zum Beispiel so.

Wir gehen ein paar Jahre in der Geschichte zurück.

Jede Stunde, die wir das System in der Historie laufen lassen, erstellt es eine Vorhersage und zählt ihre Korrelation mit der Historie

Die durchschnittliche Korrelation ist dann die Bewertung des Systems.

Und auf welche Techniken stützen Sie sich bei der Einschätzung der Wahrscheinlichkeit des Eintreffens der Prognose?


 

Ich wollte schon immer einen merkwürdigen Parameter ausprobieren - die mathematische Erwartung bei jedem Zeitabschnitt, hatte aber nie genug Zeit. Die Berechnung ist recht einfach, sie ist die Summe der Produkte aus Preisniveau und entsprechender Häufigkeit des Auftretens. Die Wahrscheinlichkeit wird aus dem anfänglichen Wahrscheinlichkeitszustand des Systems übernommen.


Ich habe den Parameter noch nicht getestet, kann also nichts dazu sagen. Aber nur um des sportlichen Interesses willen: 15 min, EURUSD, eine Tagesprognose vom jetzigen Zeitpunkt an

Zustandsvektor (ein bisschen fehl am Platz).


Erwartete Auszahlung für Zeitabschnitte (1 Zeitrahmen - 15 Minuten)




Wahrscheinliche (oder nicht sehr wahrscheinliche) Werte:



 

an Lord_Shadows

Переименовали ветку. Теперь уже не игра, а тестирование, и кончились прогнозы.

Die Vorhersagen haben noch nicht begonnen, in dem Sinne, dass wir uns gerade erst aufwärmen :o))) machen Sie mit :o)


nach shtoba

Ich meine etwas, mit dem man die Qualität des Vorhersagesystems anhand einiger Punkte bewerten kann. Generell wäre es interessant, darüber nachzudenken, wie eine solche Schätzung vorgenommen werden kann.

Eine solche Wertung ist für die Meisterschaften schon lange erfunden worden - es handelt sich dabei um die Anzahl der erreichten Punkte. Ich kann hinzufügen - ohne Anwendung eines MM - nur das Modell funktioniert. Die wichtigste Frage ist: Wofür sind diese Punkte? Was ist der Sinn?

Wenn wir die Historie für ein paar Jahre betrachten, lassen wir das System stündlich laufen, es erstellt die Vorhersage und berechnet die Korrelation mit der Historie. Der Durchschnittswert der Korrelation stellt dann eine Art Systembewertung dar.

Der Markt wiederholt sich nie, und wenn Sie die Korrelation der Vorhersagen für 3 Zeiträume berechnen, werden Sie viele "ähnliche" Situationen finden. Aber der Koeffizient wird nichts sagen.

Und welche Methoden verwenden Sie, um die Wahrscheinlichkeit der Umsetzung der Vorhersage zu schätzen?

In zweierlei Hinsicht:

(1) Bei jeder Zählung wird eine Vorhersage getroffen und ihre Leistung bewertet. Dann werden Häufigkeiten berechnet, wenn sich herausstellt, dass eine komplexere Analyse durchgeführt wird, um die Häufigkeit unabhängig von dem Modell mit der aktuellen Situation in Beziehung zu setzen

(2) Die zweite, eher theoretische Methode ist im Modell selbst verankert.

 

GLÜCKLICHER TAG DER STIMME!!!! HAPPY HAPPY OUR VICTORY DAY!!! :о)))

Die Marke von 1,3331 wurde nur knapp verfehlt, der Rest ist in Ordnung. Nun eine kuriose Situation beim EURUSD. Nachfolgend ist die Berechnung der Informationsentropiekarte" dargestellt:

Wenn wir uns das Prinzip der maximalen Entropie zu Herzen nehmen, sollten wir einen Pullback auf das Niveau von etwa 1,3445 erwarten, aber andererseits zeigt das dynamische Modell eine wesentliche Möglichkeit, auf 1,3756 zu steigen (ich erinnere daran, dass ich das Preisniveau als ein statistisches Niveau betrachte, um das sich der Preis "konzentrieren" wird). Am sinnvollsten ist es also, nicht am Montag mit dem Handel zu beginnen, sondern etwa 10-20 Messwerte à 15 Minuten abzuwarten :o)


Was meinen Sie, liebe Kollegen? Wer hat Pläne/Ziele für Montag?


AUSGABE:

(1) Ich habe angefangen, MQL zu lernen und ein sehr cooles :o) "Daten holen"-Skript für MathCAD erstellt:

extern int diapason = 7000;


int start()
{
double process[];

GetHistoryProcess(process, diapason);
CreateFlowData(process);

return(0);
}


void GetHistoryProcess(double signal[], int window)
{
int n;
int i;

double y[];

ArrayResize(y, window);
ArrayInitialize(y, 0.0);

ArrayResize(signal, window);
ArrayInitialize(signal, 0.0);

i=0;

for(n=0; n<=window-1; n++)
{
y[i]=(High[window-n-1]+Low[window-n-1])/2.0;
i=i+1;
}

ArrayCopy(signal, y, 0, 0, WHOLE_ARRAY);

return(0);
}


void CreateFlowData(double process[])
{
int i;
int N;
int Handle;

string FILE="data.csv";

N=ArraySize(process);
Handle=FileOpen(FILE, FILE_CSV|FILE_WRITE,";");

if(Handle<0)
{
if(GetLastError()==4103)
{
Alert("Нет файла с именем ",FILE);
}
else
{
Alert("Ошибка при открытии файла ",FILE);
}

return;
}

for(i=0; i<=N-1; i++)
{
FileWrite(Handle, process[i]);
}

FileClose(Handle);

return(0);
}


Zuerst konnte ich mir nicht erklären, warum die Vorhersagen nicht eintrafen, dann habe ich es herausgefunden - ich hatte vergessen, die Daten zu "spiegeln" :o). Ich habe extern gedacht, ich werde eine Schnittstelle bei der Initialisierung haben, wo ich gewünschte Geschichte Bereich (es ändert sich auch) ohne Kompilierung eingeben können. Es gibt also keine Schnittstelle, es funktioniert nicht für Skripte? Nehmen Sie einige Experten zum Beispiel, dort funktioniert es.


(2) Ich kann nicht herausfinden, wie ich die prognostizierten Zeitreihen "in die Zukunft schreiben" kann (zum Beispiel). Während der Berechnung, Verarbeitung und Analyse der Daten verschob sich die Zeit um etwa ein paar Zähler. Grob gesagt, möchte ich 100 Stichproben in die Zukunft seit einem historischen Datum (oder Null) laden, d.h. einige Daten müssen zuerst in die Historie vor dem aktuellen Balken geladen werden, und einige weiter. Das funktioniert nicht.

 
grasn >> :

Zuerst konnte ich mir nicht erklären, warum die Vorhersagen überhaupt nicht eintrafen, aber dann habe ich es herausgefunden - ich habe vergessen, die Daten zu "spiegeln" :o). Habe extern eingegeben, weil ich dachte, dass es bei der Initialisierung eine Schnittstelle geben wird, wo ich den gewünschten historischen Bereich (der sich auch ändert) ohne Kompilierung eingeben kann. Es gibt also keine Schnittstelle, es funktioniert nicht für Skripte? Nehmen Sie einige Experten zum Beispiel, dort funktioniert es.

Sie funktioniert nicht für Skripte, sondern nur für Indikatoren und Expert Advisors. Machen Sie Ihren Export als Indikator, wenn Sie externe Variablen verwalten wollen


(2) Ich kann nicht herausfinden, wie ich (z. B.) "die prognostizierte Zeitreihe in die Zukunft schreiben" soll. Während der Berechnung, Verarbeitung und Analyse der Daten hat sich die Zeit um, sagen wir, ein paar Zähler verlängert? Grob gesagt, möchte ich 100 Stichproben in die Zukunft seit einem historischen Datum (oder Null) laden, d.h. einige Daten müssen zuerst in die Historie vor dem aktuellen Balken geladen werden, und einige weiter. Es scheint nicht zu funktionieren.

Es gibt keine Zukunft für MT. Alle Reihen werden in Arrays platziert und umgekehrt. Der Index 0 entspricht der aktuellen (oder der zuletzt verfügbaren) Zeit, der Index 1 entspricht dem rückwärts laufenden Takt usw. Dann brauchen wir für die Zukunft die Indizes -1, -2, usw., aber es gibt keine solchen negativen Indizes in mql.

Aber es gibt noch andere Aufregungen. Schauen Sie sich die Funktion SetIndexShift für Indikatoren an (Verschiebung der Indikatorlinie relativ zum Anfang des Diagramms einstellen). Es ist nur eine optische Veränderung. Die Indizes sind und bleiben unverändert.


Es gibt auch SetIndexDrawBegin (Setzt die fortlaufende Nummer des Taktes vom Anfang der Daten, von dem aus die Zeichnung der Indikatorlinie beginnen muss), es kann verwendet werden, um die Zeichnung auf der linken Seite für einen bestimmten Takt zu schneiden.

 

Um alles zeitlich zu synchronisieren, markieren Sie die Werte Ihrer Reihen nicht mit Indizes, sondern mit der Zeit und synchronisieren Sie sie mit dem MT-Diagramm durch Time[bar].

Es gibt jedoch ein Problem: Die Zeitachse des Diagramms kann uneinheitlich sein. Wenn es keine Balken in der anfänglichen Serie auf dem Diagramm gibt (es gibt keine Verbindung mit dem Server oder es gibt eine Lücke aus einem anderen Grund) - dann werden die Balken immer noch kontinuierlich gezeichnet, und die Zeit springt über diese Lücken. Dies ist für die "Vergangenheit" nur natürlich.

 
grasn >> :

...Extern eingegeben, weil ich dachte, dass es bei der Initialisierung eine Schnittstelle geben wird, wo ich den gewünschten historischen Bereich eingeben kann (er ändert sich auch), ohne zu kompilieren. Es gibt also keine Schnittstelle, sie funktioniert nicht für Skripte? Nehmen Sie sich ein paar Experten als Beispiel, es funktioniert dort....

Fügen Sie #property show_inputs in das Skript ein, und Ihr Externes wird angezeigt, wenn das Skript läuft.

 

zu Shtoba, granit77

Liebe Kollegen, vielen Dank für die Hilfe. :о) Ich bin mit diesen Indikatoren nicht sehr zufrieden :o). Ich weiß nicht, wie man sie benutzt. Für den Handel sind sie lokale Statusniveaus, gemäß dem Marktmodellierungskonzept - der Preis "konzentriert" sich in ihrer Nähe. Auf dem Bild sind sie rot (genauer gesagt, ich habe sie noch nicht berechnet, ich bereite ein Astrolabium vor :o)):

Theoretisch können sie in MT als Linien dargestellt werden ("Trend" zum Beispiel, der Typ scheint OBJ_TREND zu sein). Es stellt sich jedoch die einfache Frage, wie die Zeitzählungen (0, 1, 2, ....) neu berechnet werden können. (jeweils 15 Minuten)) auf die "zukünftige" Zeit. Bisher habe ich folgenden Weg gefunden: Wir nehmen die Anzahl der Sekunden TimeCurrent( ), addieren die prognostizierte dazu und diese Zahl sollte irgendwie in Zeit umgewandelt werden. Wie kann ich das tun?

PS: Aber wir haben noch etwas in dieser Entropie. Der Preis hat noch nicht das Niveau erreicht, aber er hat begonnen, sich zu bewegen, und wenn wir das Geschäft abschließen, wären wir immer noch im Plus: o)

 

 
grasn >> :
... Es stellt sich nur eine sehr einfache Frage, wie man die Zeitzählungen (0, 1, 2, ....) neu berechnen kann. (jeweils 15 Minuten)) in die "zukünftige" Zeit...
FutureTime=Time[0]+N*Period()*60;
где N - номер бара в будущее от нулевого.