MetaTrader 5 - Integração Offenlegen von C-Code em MQL5 mithilfe nicht gemanagter Exporte Einleitung Lange Zeit sucht ich nach einer einfachen Lsung, die es mir ermglichen wrde, gemanagte C-DLLs em MQL5 zu nutzen. Nach der Lektre zahlreicher Beitrge war ich bereit, einen C-Wrapper fr gemanagte DLLs zu nutzen, als ich auf eine brilhante Lsung stie, die mir viele Stunden Arbeit ersparte. Die Lsung bot ein einfaches Beispiel fr den Export de gemanagtem C-Code fr die Nutzung in einer uncoverglten Anwendung. Em Diesem Beitrag werde ich einen Hintergrund zu gemanagten DLLs liefern, beschreiben, warum kein direkter Zugriff darauf aus MetaTrader mglich ist, und die Lsungen vorstellen, die ich gefunden habe, die die Nutzung von gemanagtem Code aus MetaTrader ermglichen. Ich werde ein Beispiel Fr. einfachen Gebrauch von Vorlagen não comparável Exporte bereitstellen und me meen Funden fortfahren. Dies sollte einen soliden Hintergrund fr jeden liefern, der versucht, C-DLL-Codes em MetaTrader 5 zu nutzen. 1. Gemanagter und ungemanagter Código Da den meisten Lesern der Unterschied zwischen gemanagtem und uncoveragtem Code vermutlich nicht bekannt ist, beschreibe ich ihn in einigen wenigen Stzen. Fr die Umsetzung von Handelsregeln, Indikatoren, Expert Advisors e Scripts nutzt MetaTrader grundstzlich die MQL-Sprache. Allerdings kann man bereits implementierte Bibliotheken in anderen Sprachen nutzen und sie whrend der Laufzeit dynamisch verbinden. Diese Bibliotheken werden auch als DLLs ou bibliotecas de links dinâmicos bezeichnet. Die Bibliotheken sind im Wesentlichen binre Dateien, morre kompilierte Quellcodes beinhalten, die durch eine Reihe externer Programa aufgerufen werden knnen, um bestimmte Operationen durchzufhren. Beispielsweise knnen neuronale Netzwerkbibliotheken Funktionen fr Schulungen und Tests fr neuronale Netzwerke exportieren, Derivatbibliotheken knnen Berechnungen verschiedener Derivado exportador, Matrixbibliotheken knnen Operationen auf Matrizen exportieren. DLLs fr MetaTrader werden immer beliebter, da Alemanha, fabricante de Importação de especialistas ou consultores especializados auszublenden. Einer der Hauptgrnde fr die Nutzung von Bibliotheken ist die Wiederverwendung von bestehendem Code, ohne ihn immer wieder neu implementieren zu mssen. Vor der Einfhrung von. NET konnten alle DLLs, morre em Visual Basic, Delphi, VC kompiliert wurden, sei es COM. Win32 oder gewhnliches C, direkt durch das Betriebssystem ausgefhrt werden. Diesen Code nennen wir uncoverglten oder nativen Code. Dann erschient. NET und lieferte eine vllig andere Art von Umgebung. Der Code wird durch. NET Common Language Runtime (CLR) kontrolliert (oder gemanagt). CLR-Compiler erzeugen aus dem Quellcode Code, der in unterschiedlichen Sprachen geschrieben sein kann e Metadaten em Common Intermediate Language (CIL). CIL ist eine maschinenunabhngige bergeordnete Sprache und die Metadaten liefern eine vollstndige Beschreibung von Objekttypen, die durch CIL gem der Common Type Specification (CTS) beschrieben werden. Da CLR alles ber die Typen wei, kann sie uns eine gemanagte Ausfhrungsumgebung bereitstellen. Das Management kann als Garbage Collection automatische Speicherverwaltung, Objektlschung und Gewhrleistung von Sicherheit betrachtet werden, die vor hufigen Fehlern in nativen Sprachen schtzt, die zur Ausfhrung von Fremdcode mit Administratorrechten ou outros einfach zum berschreiben des Speichers fhren knnten. Es muss erwhnt werden, dass CIL-Code niemals direkt ausgefhrt wird. Er wird durch JIT - Kompilierung (Just-In-Time) ou mais informações sobre CIL in nativen Maschinencode bersetzt. Fr jemanden, der morre zum ersten Mal liest, kann die Vorstellung eines gemanagten Codes verwirrend erscheinen. Deshalb fhre ich unten den allgemeinen Arbeitsfluss innerhalb von CLR auf: Abbildung 1. Common Language Runtime 2. Mglichkeiten der Umsetzung des Zugriffs auf gemanagten Código aus MQL5 Im folgenden Abschnitt beschreibe ich Methoden, die den Zugriff auf gemanagten Code aus ungemanagtem Code ermglichen. Ich denke, sie alle sollten erwhnt werden, weil andere Anwender mglicherweise eine andere Methode nutzen mchten als ich. Die verwendeten Methoden sind COM Interop, Reverse PInvoke, C IJW, CCli wrapper class e Exportações não gerenciadas. Modelo de objeto de componente (COM) ist ein binrer Interface-Standard, der von Microsoft in den frhen Neunzigern eingefhrt wurde. Die Grundidee Dieser Technologie ist es, die Nutzung von Objekten, die in anderen Programmiersprachen erstellt wurden, durch jedes andere COM-Objekt zu ermglichen, ohne seine interne Umsetzung zu kennen. Diese Anforderung erzwingt die Umsetzung eines strikt definierten Interfaces des COM, das vollstndig von der Implementierung getrennt ist. Tatschlich Wurde COM durch die. NET-Technologie berholt und Microsoft drngt auf die Nutzung von. NET anstelle von COM. Um Die Abwrtskompatibilitt mit lterem Code zu ermglichen, kann. NET em Beiden Richtungen com COM kooperieren, das heit. NET kann COM-Methoden aufrufen und COM-Objekte knnen gemanagten. NET-Code nutzen. Diese Funktion heit COM-Interoperabilitt oder COM Interop. Die COM-Interop-API befindet sich im gemanagten Namensraum System. Runtime. InteropServices. Abbildung 2. Modell der COM-Interoperabilitt Der folgende COM-Interop-Code ruft die Einzelfunktion rawfactorial auf. Bitte Beachten Sie die Funktionen CoInitialize (), CoCreateInstance () e CoUninitialize () e die Aufruffunktion des Interfaces: Bitte lesen Sie fr weitere Informationen ber COM Interop die detaillierte Dokumentation unter Introdução à COM Interop und das Anwendungsbeispiel, das ich im MSDN-Blog gefunden Habe: como chamar o código C da Managed, e vice-versa (Interop) (englisch). 2.2. Reverse PInvoke Platform Invoke, auch PInvoke genannt, ermglicht es. NET, jede beliebige Funktion in jeder Uncoverglten Sprache aufzurufen, solange ihre Signatur neu deklariert wird. Dies wird durch die Ausfhrung eines nativen Funktions-Pointers aus. NET bewerkstelligt. Die Verwendung wird unter Lernprogramm fr die Plattformaktivierung ausfhrlich beschrieben. Die grundlegende Verwendung ist die Nutzung des Attributs DllImport zum Markieren der zu importierenden Funktion: Der umgekehrte Vannang kann als Bereitstellung einer gemanagten delegierten callback-Funktion fr nicht gemanagten Código beschrieben werden. Dies wird als Reverse PInvoke bezeichnet e wird durch die Implementierung einer ffentlichen delegierten Funktion in einer gemanagten Umgebung und den Importar o arquivo de imagem Funktion in der nativen DLL erreicht: Das Beispiel des gemanagten Codes sieht so aus: Das wichtigste Merkmal dieser Lsung ist es, dass sie Voraussetzt, dass die gemanagte Seite die Interaktion einleitet. C Interop, auch als It Just Works (IJW) bekannt, ist eine C-spezifische Funktion aus Extensões gerenciadas para C: Diese Lsung kann ntzlich sein, Wenn Sie Ihr gemanagtes C in einer nicht gemanagten Anwendung verwenden mchten. Bitte lesen Sie die Detalhes dazu unter Interoperabilidade em extensões gerenciadas para C und Usando IJW em Managed C (englisch). 2.4. CCli wrapper class Die Implementierung der CCli-Wrapper-Klasse erhlt ihren Namen durch das Einbetten oder Wrapping einer gemanagten Klasse durch eine andere im C-Cli-Modus geschriebene Klasse. Der erste Schritt zum Schreiben des DLL-Wrappers ist das Schreiben der C-Klasse, die die Methoden der ursprnglichen gemanagten Klasse umschliet. Die Wrapper-Klasse muss ein Handle des. NET-Objekts mit dem Template gcrootltgt enthalten und alle Aufrufe aus der ursprnglichen Klasse delegieren. Die Wrapper-Klasse wird im IL-Format (Zwischensprache) kompiliert und dormentes deshalb als gemanagt. Der nchste Schritt ist das Schreiben der nativen C-Klasse mit der uncovergten Direktive pragma, die die IL-Klasse umschliet und alle Aufrufe durch die Direktive declspec (dllexport) delegiert. Mit Diesen Schritten wird die nativo C-DLL erstellt, morre durch jede não comparado Anwendung genutzt werden kann. Bitte sehen Sie sich das Umsetzungsbeispiel an. Der erste Schritt ist die Umsetzung des C-Codes. Die Beispielklasse Calculator enthlt zwei public-Methoden: Der nchste Schritt ist das Schreiben eines gemanagten Wrappers, der alle Methoden aus der Calculadora-Klasse delegiert: Bitte beachten Sie, dass der Verweis auf die ursprngliche Calculadora-Klasse mithilfe der Instruktion gcnew and als Template gcrootltgt Gespeichert wird. Alle eingeschlossenen Methoden knnen die gleichen Namen haben wie die Originale und und Parametern und Ausgabewerten wird Param bzw. ReturnVal vorangestellt. Nun muss morre em desuso C-Klasse, morra morre CCli umschliet und die native C-DLL exportiert, implementiert werden. Die Kopfzeilendatei muss die Klassendefinition mit der Direktive declspec (dllexport) enthalten und den Pointer zur Wrapper-Klasse speichern. Und ihre Implementierung: Eine ausfhrliche Anleitung zur Erstellung dieses Wrappers acham Sie Be Beitrag. NET para C Bridge (englisch). Eine vollstndige Anleitung fr die Erstellung von Wrappern finden sie unter Mixing. NET e código nativo (alemão). Allgemeine Informationen zum Deklarieren von Handles in nativen Typen Finden Sie unter Gewusst wie: Deklarieren von Handles in systemeigenen Typen. 2.5. Exportações não gerenciadas Diese Technik wird im Buch Expert. NET 2.0 IL Assembler. Das ich jedem, der ber Detalhes de. NET-Compilers nachlesen mchte, ans Herz legen mchte, vollstndig beschrieben. Die Grundidee ist die Offenlegung gemanagter Metodologia, como exemplo, Exporte einer gemanagten DLL Durch die Dekompilierung eines bereits kompilierten Modulos em IL-Code mithilfe von ILDasm, die nderung der Tabellen VTable e VTableFixup des Moduls e morrer Kompilierung der DLL mithilfe von ILAsm. Diese Aufgabe mag abschreckend wirken, doch das Ergebnis ist eine DLL, die innerhalb jeder beliebigen uncoverglten Anwendung genutzt werden kann. Man muss daran denken, dass es sich immer noch um einen gemanagten Aufbau handelt, também muss. NET Framework installiert sein. Ein Schritt-fr-Schritt-Tutorial hierzu steht unter Export Managed Code como não gerenciado (inglês) zur Verfgung. Nach der Dekompilierung der DLL durch ILDasm erhalten wir den Quellcode in der IL-Sprache. Bitte sehen Sie sich das unten abgebildete einfache Beispiel eines IL-Codes com uma gravh Exportação: Die Zeilen des IL-Quellcodes, die fr die Umsetzung Uncovergter Exporte verantwortlich sind, sind: Im ersten Teil wird der Eingangspunkt in der Tabelle VTableFixup und die Einstellung der Virtuellen Adresse VT01 in der Funktion definiert. Der zweite Teil legt fest, welcher VTEntry fr diese Funktion genutzt werden soll, und bestimmt den Export-Alias fr die zu exportierende Funktion. Die Vorteile dieser Lsung sind, dass wir whrend der Implementierungsphase der DLL keinen zustzlichen Código, abgesehen von der blichen gemanagten C-DLL, implementieren mssen und, wie es im Buch verdeutlich wird, dass diese Methode die gemanagte Welt mit all ihrer Sicherheit und ihren Klassenbibliotheken Fr no scrapbook. Clientes vollstndig ffnet. Der Nachteil ist, dass die Arbeit mit der. NET-Assemblersprache nicht fr alle geeignet ist. Ich war berzeugt, dass ich stattdessen eine C-Wrapper-Klasse schreiben wrde, bis ich die Unmanaged-Exports-Vorlage de Robert Giesecke fand: sites. googlesiterobertgiesecke. Diese Vorlage ermglicht die Nutzung von Exportações não gerenciadas ohne die Notwendigkeit, sich mit IL-Code auseinanderzusetzen. 3. Não gerenciado-Exportações-Vorlage em C Die não gerenciado-Exportações-Vorlage fr C-Projekte von R. Giesecke nutzt MSBuild tarefa. Das automatisch die erforderlichen VT-Anpassungen nach dem Aufbau einfgt, sodass der IL-Code keine Anpassung mehr bentigt. Das Vorlagenpaket muss nur als Zip-Datei heruntergeladen und in den ProjectTemplates-Ordner von Visual Studio kopiert werden. Nach der Kompilierung des Projekts kann die entstandene DLL-Datei problemlos de MetaTrader importiert werden. Beispiele dafr stelle ich in den nachfolgenden Abschnitten bereit. Es war ziemlich schwierig, herauszufinden, wie Variablen, Arrays und Strukturen zwischen MetaTrader e C mithilfe der korrekten Marshalling-Methode bergeben werden, und ich denke, die hier bereitgestellten Informationen werden Ihnen viel Zeit ersparen. Alle Beispiele wurden unter Windows Vista com. NET 4.0 e Visual C Express 2010 kompiliert. Ich hnge ebenfalls eine Beispiel-DLL mit MQL5-Code an, der Funktionen aus der C-DLL aufruft. 4.1. Beispiel 1. Addieren von zwei Variablen der Typen integer, double oder float und Ausgeben des Ergebnisses em MetaTrader Ihnen drfte aufgefallen sein, dass jeder exportierten Funktion die Direktive DllExport vorangestellt wird. Der erste Parâmetro beschreibt das Alias der exportierten Funktion und der zweite Parâmetro bestimmt die Aufrufkonvention. Pe MetaTrader mssen wir CallingConvention. StdCall verwenden. Der MQL5-Code, der die aus der DLL exportou-se Funktionen importiert und nutzt, ist einfach und unterscheidet sich nicht von anderen in nativem C geschriebenen DLLs. Als Erstes mssen die importierten Funktionen innerhalb des Blocks import deklariert und bestimmt werden, welche Funktionen aus der DLL spter aus dem MQL5-Code genutzt werden knnen: 4.2. Beispiel 2. Zugriff auf eindimensionale Arrays Fr die bergabe eines eindimensionalen Arrays muss die Direktive MarshalAs UnmanagedType. LPArray als ersten Parâmetro e SizeParamIndex als zweiten Parâmetro bergeben. SizeParamIndex bestimmt, welcher Parâmetro (ab 0) der Parâmetro ist, der die Array-Gre enthlt. In den oben aufgefhrten Beispielen ist i die Array-Gre und idx der Index des auszugebenen Elements. Hiereu, e-mail, Beispiel-MQL5-Code, der den Zugriff auf ein Array nutzt: 4.3. Beispiel 3. Befllen eines eindimensionalen Arrays und Rckgabe e MetaTrader Dieses Beispiel nutzt zwei Eingabe-Arrays zum Vergleich der Konvention der Eingabeparameter. Quedas vernderte Elemente e MetaTrader zurckgegeben werden mssen (bergabe nach Verweis), reicht es, die Atributo In, Out, dem Attribut MarshalAs voranzustellen. 4.4. Beispiel 4. Zugriff auf zweidimensionale Arrays Die bergabe zweidimensionaler Arrays ist nicht so einfach, doch ich habe einen Trick genutzt, nmlich die bergabe des 2D-Arrays als eindimensional und den Zugriff auf Array-Elemente durch die Hilfsfunktion idx. 4.5. Beispiel 5. Ersetzen von String-Inhalten Dieses Beispiel ist ziemlich kurz, doch es hat lange gedauert, es umzusetzen, da ich ohne Erfolg versucht habe, den String-Parâmetro mithilfe der Atributo In, Out oder der Schlsselbegriffe ref order out zu verwenden. Die Lsung ist die Verwendung von StringBuilder anstatt der String variável. 4.6. Beispiel 6. Senden und ndern der MqlTick-Struktur Die MqlTick-Struktur wird por Verweis bergeben und durch den Schlsselbegriff ref markiert. Der MqlTick-Struktur selbst muss das Attribut StructLayout (LayoutKind. Sequential, Pack 1) vorangestellt werden. Der Parameter Pack beschreibt den Datenabgleich in der Struktur. Weitere Details Finden Sie unter StructLayoutAttribute. Pack Field. Em diesem Beitrag stelle ich verschiedene Interaktionsmethoden zwischen MQL5-Code e gemanagtem C-Code vor. Ich habe auch mehrere Beispiele dafr bereitgestellt, wie MQL5-Strukturen gegen C angeordnet werden knnen und wie sich exportierte DLL-Funktionen em MQL5-Scripts aufrufen lassen. Ich bin berzeugt, dass die jer bereitgestellten Beispiele als Basis fr zuknftige Forschungen zum Schreiben von DLLs in gemanagtem Code dienen knnen. Dieser Beitrag bereitet auch Wege fr die Nutzung bereits em C implementierter Bibliotheken em MetaTrader. Weitere Details Finden Sie in den im Abstrave Literatur verlinkten Beitrgen. Zu Beitrgen mit englischen Titeln existieren keine deutschen bersetzungen. Zu den deutschen Versãoen der verlinkten Beitrge gelangen Sie, indem Sie en-us in der URL durch de-ersetzen. Bitte Legen Sie die Dataen zum Testen in die folgenden Ordner: bersetzt aus dem Englischen von MetaQuotes Software Corp. Originalartikel: mql5enarticles249Aktienkursprognose mit neuronalen Netzwerken Um die Leistungsfaumlhigkeit neuronaler Netze an einem realen Problema zu testen, wurde versucht, morre Tageskurse zufaumlllig ausgewaumlhlter Aktien mit verschiedenen Typen Neuronaler Netzwerke vorherzusagen. Die empirische Analyse der Ergebnisse laumlszligt erwarten, daszlig neuronale Netzwerke die Prognose von Aktienkursen (und allgemeiner: die Prognose chaotischer Zeitreihen) bei einer gleichzeitigen Verbesserung des theory et praktischen Instrumentariums zukuumlnftig erheblich verbessern koumlnnten. Neuronale Netzwerke erleben zur Zeit einen beispiellosen Boom. Die Gruumlnde dafuumlr sind, (...) diese intelligenten Netzeke selbstaumlndig Zusammenhaumlnge erkennen und lernen koumlnnen, die ansonsten nur sehr schwer explizit zu formulieren sind. Der Schwerpunkt lag im Bankenbereich Um eine realistische Einschaumltzung der Leistungsfaumlhigkeit neuronaler Netzwerke zu erhalten, haben wir umfangreiche Analysen mit verschiedenen Modellen neuronaler Netzwerke durchgefuumlhrt. Der Anwendungsschwerpunkt lag dabei im Bankenbereich. Es sollte empirisch untersucht werden, ob konventionell sehr komplexe Problema com neuronalen Nutzen geloumlst werden koumlnnen (...) welche Problema dabei entstehen. Als Pruumlfstein diente uns die technische Aktienanalyse und hier speziell die kurzfristige, das heiszligt tageweise, Kursprognose von Aktien. Der Grund fuumlr die Wahl Dieser Anwendung waren vorherige Untersuchungen, morre Aktienkursprognose mit Expertensystemen zu realisieren. Diese Bemuumlhungen waren trotz anfaumlnglicher Erfolge nicht ermutigend. Der Aufwand, der benoumltigt wird, das fuumlr die Kursprognose relevante Wissen zu akquirieren, umzusetzen und zu aktualisieren, waumlre enorm gewesen. Daher gaben wir diesen Ansatz zunaumlchst auf. Die Idee, das Problem der Kursprognose alternativ mit neuronalen Netzen anzugehen, kam uns, als wir erkannten, daszlig die Kurse der Aktien nichts anderes darstellen als chaotische Zeitreihen, morrer, então, chaotischer werden, je kuumlrzer der Prognosezeitraum ist. Liegt morre Prognosegrenze innerhalb weniger Minuten oder Stunden, morre Kurse wie vertauschte Signale aus. Selbst die tageweise Prognose, die wir genauer untersucht haben, muszlig starke kurzfristige Schwankungen beruumlcksichtigen und kann daher nur sehr begrenzt von den Methoden der klassischen technischen Aktienanalyse Gebrauch machen (é kommt nur sehr selten zu solch klassischen Gebilden wie Kopf Schulter-Formationen oder W - und M-Formationen, zudem werden Nacken - und Widerstandslinien praktisch taumlglich durchbrochen e Trendkanaumlle koumlnnen nur selten uumlber mehrere Tage angegeben werden. Konventionelle Prognose-Methoden arbeiten am besten dort, wo der Kursverlauf ohne Verlust der Vorhersagerelevanz durch statistische Verfahren geglaumlttet werden kann. Dies ist Bei mittelfristigen Anlagen etwa fuumlr Privatanleger, die Aktien gewoumlhnlich uumlber mehrere Wochen und Monate halten, realistisch und sinnvoll. Gute Statistikprogramme liefern fuumlr diese Bereiche Trefferquoten fuumlr die Prognose um 60 Prozent (plusmn10 Prozent). Groszliganleger und Haumlndler stehen aber in der Regel vor einem anderen Problem. Sie wollen und muumlssen groszlige Mengen von Aktien innerhalb weniger Tage ou Stunden kaufen und moumlglichst mit Gewinn wieder verkaufen. Der Gewinn kommt hier jedoch nicht wie be privaten Anleger durch den moumlglichst hohen Kurszuwachs weniger Aktien zustande, sondern durch den relativ kleinen Kursanstieg sehr vieler Aktien. Da die Kursschwankungen bei solch kurzen Zeitraumlumen aber in der Regel nur sehr gering sind (gewoumlhnlich nur wenige Mark), Wuumlrden statistische Verfahren, die zur Prognostica morrer Kurse zu stark glaumltten, gerade das vernachlaumssigen, foi morto por kurzfristige Vorhersage von zentraler Bedeutung ist: die Kleinen Kursveraumlnderungen. Unser Ansatz war daher, das Prognoseproblem alternativ als ein Reportes de problemas de interpretação. Kurse wurden von uns als Signale interpretiert, die verrauscht sind, wie man in der Nachrichtentechnik sagt. Das vertauschte Signal uumlberlagert nach unserer Interpretação do sinal tatsaumlchliche. Das tatsaumlchliche Signal ist die versteckte Kurstendenz, die es zu erkennen und zu prognostizieren dorado. Obwohl dieser Ansatz letztlich ebenfalls auf eine - wenn auch sehr viel feinere - Glaumlttung der Aktienkurse hinauslaumluft, hat doch der Ansatz com neuronalen Netzen einen erheblichen und unschaumltzbaren Vorteil gegenuumlber statistischen Methoden: Jedes Statistikprogramm muszlig explizit alle Faktoren, die es fuumlr die Prognose beruumlcksichtigt, zuvor Kennen. Der Programmierer ou Aktienanalyst muszlig alle als relevantes betrachteten Einfluszliggroumlszligen angeben, morre em Die Berechnung mit einflieszligen sollen. Ein neuronales Netz hingegen kann relevante Abhaumlngigkeiten und Einfluszliggroumlszligen bei geschicktem Treinamento e Design selbstaumlndig erkennen Es kann daher eventuell Zusammenhaumlnge herauskristallisieren und bei der Prognóstico verwenden, die zuvor noch niemand in dieser Forma beruumlcksichtigt hat. Zudem gewichtet is mittels der impliziten Lernalgorithmen selbstaumlndig die Einfluszliggroumlszligen so, daszlig die Fehler bei der Prognose insgesamt minimiert werden. Diese Eigenschaften neuronaler Netze sind alleine bereits eine detaillierte Untersuchung wert. Als Tools setzten wir mehrere Software-Simulações do programa fuumlr neuronale Netzwerke ein. Darunter Waren Neural Works Professional II (Neural Ware) e NeuroShell (Ward Systems Group, Inc.). Zur Umsetzung der Ein-Ausgabe, der Prozeszligkommunikation zwischen den Tools, der Handhabung der Lern - und Rezirkall-Daten, der Trefferauswertung, der Statistik und der Darstellung der Ergebnisse waren zusaumltzlich noch zirka 3000 Linhas de código em C zu realisieren. Wir haben die Prognosefaumlhigkeit neuronaler Netze an mehreren Netzwerkmodellen untersucht. Realisiert wurden unter anderem ein Adaline-Netzwerk, ein Madaline-Netzwerk (Abbildung 1), ein Perceptron-Netzwerk und ein Bach-Propagation-Netzwerk (siehe Abbildung 2). Als Test - und Trainingsdaten haben wir drei zufaumlllig gewaumlhlte Aktiencharts verwendet: BASF, Commerzbank e Mercedes. Der Trainingszeitraum fuumlr die Netzwerke betrug 40 Tage (vom 9.2.89 bis 18.4.89). Prognostitivista wurden nach den 40 trainierten Tagen das Kursverhalten der Aktien fuumlr die naumlchsten (máximo) 58 Tage. Die Eingabedaten muumlssen normiert sein Jeder Netzwerk-Typ setter eine gewisse Normierung der Eingabedaten voraus. Então, kann zum Beispiel ein Perceptron-Netzwerk nur binaumlre Eingaben (0 und 1) verarbeiten, ein Adaline-Netzwerk nur 1 und -1. Daher muszligten in einem ersten Schritt zunaumlchst Verfahren entwickelt werden, die Eingabewerte zu Normieren bzw. Zu Linearisieren, wie der Fachausdruck heiszligt. Zudem muszligten morre Eingabedaten festgelegt werden (der Eingabevektor). Als Eingabedaten haben wir pro Kurs an die Netzwerke angelegt: - K den aktuellen Kurswert des Tages - VV die absolute Veraumlnderung des Kurses zum Vortag - RV morre Richtung der Veraumlnderung (steigt, faumlllt) - RG die Richtung der Veraumlnderung zum Vor-Vortag - G Gravierende Veraumlnderungen gt 1 Prozent zum Vortag. Einige daraus resulttierende Linearisierungen sind in Abbildung 3 dargestellt. Der Eingabevektor fuumlr die Netzwerke hatte in den meisten Testfaumlllen eine Breite von 40, das heiszligt, bei jedem Lernschritt wurden 40 Daten paralelo a Die Eingabeschicht der Netzwerke angelegt. Die Bestandteile der Eingabevektoren wurden im Laufe der Untersuchungen nicht variiert. Der aktuelle Kurswert ist fuumlr den Lernprozeszlig der Netzwerke nicht unbedingt erforderlich, é genuumlgt morrer Eingabe der relativen Abweichung zum Vortag, wie e einigen Testreihen feststellen konnten. Es bleibt zu untersuchen, wie sie e Eingabevektoren auf die Prognosefaumlhigkeit auswirken. Die Prognoseergebnisse bei Adaline-Netzwerken waren teilweise sehr stark von der gewaumlhlten Linearisierung und der Anzahl der Lernschritte abhaumlngig. Als bestes Ergebnis erzielten wir fuumlr die BASF-Aktie bei Linearisierung c, d und 2500 Lernschritten eine Trefferquote von erstaunlichen 80 Prozent bezuumlglich einer Steigt-Faumlllt-Prognose fuumlr einen 10-Tage-Zeitraum. Die Commerzbank Aktie konnte mit Linearisierung d und ebenfalls 2500 Lernschritten sogar mit 90 Prozent und damit am besten vorhergesagt werden. Die Mercedes-Aktie erreichte bei Linearisierung a, b und e mit 2500 Lernschritten maximal 70 Prozent (siehe Abbildung 4). Auffallend bei diesen Ergebnissen ist, daszlig eine Zunahme der Lernschritte nicht unbedingt die Trefferquote erhoumlht, und daszlig die Trefferquote bei der Mercedes-Aktie deutlich niedriger ist als bei den beiden anderen Aktien. Letzteres ist zumindest teilweise dadurch zu erklaumlren, daszlig der Kurs der Mercedes-Aktie in dem Trainingszeitraum chaotischer verlaumluft als der der beiden anderen Aktien, die beinahe einen deckungsgleichen Verlauf zeigen. Wird die Prognose uumlber einen laumlngeren Zeitraum durchgefuumlhrt, ergibt sich zum Beispiel fuumlr die BASF-Aktie das em Abbildung 5 dargestellte Resultat. Dabei zeigt sich, daszlig die Trefferquote wieder stark von der gewaumlhlten Linearisierung abhaumlngt und daszlig die Trefferquote kontinuierlich mit der Laumlnge des Vorhersagezeitraums abnimmt. Dies war aber auch nicht anders zu erwarten. Interessant ist jedoch, daszlig einzelne Zehn-Tage-Perioden, wenn man sie isoliert betrachtet, in ihrer Trefferquote unabhaumlngig von dem Abstand zum aktuellen Datum sind. Die Trefferquote ist immer dann recht hoch, wenn ein Kursverlauf in der Zukunft einem Kursverlauf der Vergangenheit aumlhnelt. Abbildung 6 verdeutlicht morre. Die fette Linie kennzeichnet den zu Prognostizierenden Verlauf, die duumlnne Kurve das Trainingsintervall und die Punkte die Zehn-Tage-Prognosezeitraumlume. Die Gerade gibt morre Treffertendenz an. Der wesentliche Unterschied zwischen einem Madaline - und einem Adaline-Netzwerk ist, daszlig ein Madaline-Netzwerk gewissermaszligen aus mehreren Adaline-Elementen besteht. Die Anzahl der Adaline-Elemente em einem Madaline-Netzwerk kann man variieren. Morre haben wir getan. Die Auswirkungen auf die Trefferquoten zeigt Abbildung 7. Erstaunlich ist hierbei, daszlig eine Steigerung der Adaline-Elemente morre Trefferquote nicht notwendig verbessert. Die besten Ergebnisse ergaben sich bei BASF mit 15 und 17 Adaline-Elementen (68 Prozent), bei der Commerzbank mit 11, 17 und 19 Adaline-Elementen (je 74 Prozent) und bei Mercedes mit 5, 11 und 17 Elementen und 63 Prozent Treffern . Fuumlr morre Commerzbank-Aktie ersehen Sie die laumlngerfristige Prognóstico relativ zu den gewaumlhlten Linearisierungen und den Prozessorelementen aus Abbildung 8. Das Perceptron-Netzwerk zeigte insgesamt die schlechteste Prognosefaumlhigkeit. Das Beste Ergebnis lag bei 68 Prozent, aber dies erstaunlicherweise ge (...) sehr haumlufig bei der von (...) anderen Netzwerken nicht gut prognostizierten Mercedes. Aktie (siehe Abbildung 9). Back-Propagation-Netzwerke sind die zur Zeit wohl populaumlrsten Typen neuronaler Netzwerke. Der Grund dafuumlr ist, daszlig in solchen Netzwerken mit verdeckten Schichten (camada escondida) von Prozessorelementen gearbeitet werden kann. Diese Prozessorenschichten, die weder direkt mit der Eingabe noch mit der Ausgabe verbunden sind, koumlnnen interne Repraumlsentationen der impliziten Abhaumlngigkeiten zwischen den Elementen der Eingabeschicht lernen speichern. Dadurch erhaumllt (...) in der Regel sehr gute Approximationen der Realitaumlt. Entscheidend fuumlr die Leistungsfaumlhigkeit eines Bach-Propagation-Netzwerkes ist die Anordnung der Zwischenschichten und die verwendeten Transferfunktionen der Prozessoren, die den jeweils anliegenden Entrada eines Prozessorelementes des Netzwerkes zu einem lokalen Produção verarbeiten. Wir haben bei unseren Testes e transferência de dados morrem bewaumlhrte Sigmoid-Funktion (siehe Abbildung 10) und die Sinus-Funktion verwendet. Die Prozessorelemente mit der Sinus-Funktion hatten die Aufgabe Zyklen und relativ kleine Schwankungen im Kursverlauf zu erkennen und zu repraumlsentieren, waumlhrend die Sigmoid-Funktion vorwiegend aus historischen und technischen Gruumlnden gewaumlhlt wurde. Im Gegensatz zu den Adaline, Madaline e Perceptron-Netzwerken wurde mit den Bach-Propagation-Netzwerken nicht nur eine Steigt-Faumlllt-Prognose durchgefuumlhrt, sondern auch versucht, e tatsaumlchlichen Kursverlauf zu prognostizieren. Die erzielten Ergebnisse waren teilweise sehr gut. Es zeigte sich jedoch, daszlig im Vergleich zu den anderen Netzwerken zunaumlchst eine weit houmlhere Anzahl von Lernschritten und damit Rechenaufwand noumltig war. Gute Ergebnisse wurden erst mit 10 000 bis 20 000 Lernschritten erzielt. Ein Versuch, daruumlber hinaus eine weitere Verbesserung durch zusaumltzliches Lernen zu erreichen (200 000 Lernschritte), brachte nicht das erhoffte Ergebnis. Durch eine Optimierung der Struktur der Hidden-Layer konnten die noumltigen Lernschritte letztlich auf zirka 5000 reduziert werden. Eine Gegenuumlberstellung des tatsaumlchlichen Kursverlaufs und der Netzwerk-Prognose fuumlr morre Mercedes-Aktie ist in Abbildung 12 dargestellt. Ein neuronales Netzwerk muszlig nicht programmiert werden wie ein Programm, Es genuumlgt, dem Netzwerk die Lerndaten zu praumlsentieren und den gewuumlnschten Saída anzulegen (bei hetero-assoziativen Netzwerken). Das Netzwerk lernt dann selbstaumlndig den Entrada mit dem jeweils gewuumlnschten Saída zu korrelieren. Diese Tatsache darf aber nicht zu der truumlgerischen Annahme verleiten, daszlig der Aufwand fuumlr die Erstellung eines leistungsfaumlhigen und zuverlaumlssigen neuronalen Netzwerkes gering ist. Wir muszligten naumlmlich feststellen, daszlig der Aufwand Fuumlr das Design eines Netzwerkes sehr hoch sein kann. Waumlhlt man eine falsche Netzwerk-Topologie, sind die Ergebnisse unbrauchbar. Fuumlr das Auffinden einer geeigneten Topologie gibt es aber bislang keine Methodik und deshalb ist man auf eine eingehende mathematische Analisar angewiesen, deren Komplexitaumlt von der jeweiligen Problemstellung abhaumlngt. Fuumlr morre Aktienkursprognose ist eine mathematische Theorie neuronaler Netzwerke leider noch nicht in Sicht. Folglich ist man ausschlieszliglich auf eine Art Trial and error Methodik angewiesen. Befindet man sich auf dem richtigen Weg, kann die Loumlsung eventuell sehr schnell gefunden werden, andernfalls kann es monatelang dauern, bis man feststellt, weshalb nur frustrierenden Ergebnisse zustandekommen. Ein weiterer Problembereich waren die vielen Parâmetro, die beim Design eines Netzwerkes eine enscheidende Rolle spielen koumlnnen. Zu diesen Parametern gehoumlren zum Beispiel die Lernregel, die mittelfristige Lernstrategie, die Lernkoeffizienten, die Breite des Eingabevektors und des Ausgabevektors, die Linearisierung, die Anzahl der verwendeten Prozessoren, die Anzahl und die Verknuumlpfung der Hiden-Layersg, die Transfer - und Schwellenwertfunktionen, der Netzwerktyp etc. Im Mittel muszligten wir je Netzwerktyp etwa zwoumllf Parameter einsteigen, und selbst kleinste Aumlnderungen konnten die Prognosefaumlhigkeit erheblich negativ beeinflussen. Bei den komplexeren Netzwerktypen hatten wir es mit klassischen optimierungsaufgaben zu tun: die Netzwerke (vor allem das Back-Propagation-Netzwerk) tendieren dazu, in lokalen Minima (Maxima) haumlngenzubleiben. Es ist dann in der Regel sehr schwierig festzustellen, wodurch das lokale Minimum zustandegekommen ist und wie man es auf der Suche nach einem globalen Minimum umgehen kann. Trotz der nicht unerheblichen Probleme beim Design, Testen und Optimieren der neuronalen Netzwerke konnten mit vertretbarem Aufwand gute bis sehr gute Prognosen erstellt werden. Die Ergebnisse sind teilweise weit besser als mit konventionellen statistischen Verfahren. Bessere Ergebnisse sind noch zu erwarten Koumlnnen zukuumlnftig fundierte mathematische Analysen im Vorfeld zur Unterstuumltzung des Netzwerk-Designs entwickelt und eingesetzt werden, so sind sogar noch weit bessere Ergebnisse zu erwarten. Als wichtiger Vorteil neuronaler Netze hat sich waumlhrend der Untersuchungen gezeigt, daszlig der Aufwand fuumlr die Wartung und Weiterentwicklung im Sinne der Anpassung an neue Kursverlaumlufe bei neuronalen Netzwerken optimal loumlsbar ist. Die Netzwerke koumlnnen umgehend den neuen Entwicklungen angepaszligt werden, indem sie auf den neuen Daten trainiert werden. Ungeloumlst ist jedoch bislang das Problem, wie und ob falsche Prognosen des Netzwerkes durch zusaumltzliches Training auf den Fehlerdaten behoben werden koumlnnen. Die hier auszugsweise vorgestellten Untersuchungsergebnisse sind vollstaumlndig als Studie (zirka 100 Seiten) inklusive Demonstrationsprogramm bei Expert Informatik GmbH Postfach 13 38, D-7770 Uumlberlingen, Tel. 0 75 5140 73 erhaumlltlich. Als Anregung und Ausblick seien hier noch kurz zwei Ansaumltze erwaumlhnt, die zur Zeit von uns weiterverfolgt werden und sehr erfolgversprechend erscheinen. Man kann die Prognosefaumlhigkeit eines neuronalen Netzes erheblich durch die Auswahl der Trainingsdaten an der Eingabeschicht und des erwarteten Outputs an der Ausgabeschicht beeinflussen. Dazu benoumltigt man jedoch erhebliches Wissen daruumlber, wie man Netzwerke trainieren sollte. Legt man dieses Wissen in einem Expertensystem ab, so kann das Expertensystem dazu verwendet werden, das neuronale Netz zu unterrichten. Eine Wissensbasis fuumlr ein solches Expertensystem als Lehrer fuumlr diverse Netzwerke wird von uns zur Zeit mit der (AICorp.) entwickelt. Dieser Ansatz erscheint uns erfolgversprechender als der Versuch, Kurse mit Expertensystemen direkt zu prognostizieren. Da die Softwaresimulationen bei groszligen Netzwerken mit komplexen Transferfunktionen und Lernstrategien konventionelle Rechner stark belasten, Expertensystem-Shell KBMS empfiehlt sich zukuumlnftig die Untersuchung und Realisierung von Neuronalen Netzen auf Transputern oder anderen Parallelrechnern. In den USA gibt es bereits Programme, die Neuronale Netze auf Transputern simulieren. Eberhard Schoumlneburg ist Geschaumlftsfuumlhrer, Manfred Gantert und Michael Reiner sind Mitarbeiter der Expert Informatik GmbH, Uumlberlingen Artikel als PDF kaufen COMPUTERWOCHE und Dimension Data suchen fuumlr den Digital Leader Award die besten Digitalisierungsprojekte im Lande. Aktuelle Jobangebote Lead Engineer Netzmanagement und Tooling (mw) T-Systems International GmbH Senior Sales Manager HCM (mw) T-Systems International GmbH Senior Systemingenieur Public CRs (mw) T-Systems International GmbH Leiter (mw) Application Support ING-DiBa AG Teamleitung UnixLinux-Systeme (mw) Technische Informationsbibliothek (TIB) Aktuell finden Sie ber 500 ausgeschriebene Stellen im CW-Stellenmarkt Kostenlose Newsletter
Comments
Post a Comment