Moving average experten berater code




Moving average experten berater codeMetaTrader 4 - Experts Moving Average - Experte fur MetaTrader 4 Der Moving Average Experte fur die Bildung von Handelssignalen verwendet einen gleitenden Durchschnitt. Das Offnen und Schlie?en von Positionen erfolgt, wenn der gleitende Durchschnitt den Preis an der kurzlich gebildeten Bar erfullt (Barindex entspricht 1). Die Losgro?e wird nach einem speziellen Algorithmus optimiert. Der Gutachter analysiert die Ubereinstimmung zwischen dem gleitenden Durchschnitt und dem Marktpreisdiagramm. Die Uberprufung wird von der Funktion CheckForOpen () durchgefuhrt. Wenn der gleitende Durchschnitt auf die Bar trifft, so dass der erste hoher ist als der offene Preis, aber niedriger als der Schlusskurs, wird die BUY-Position geoffnet. Wenn der gleitende Durchschnitt auf die Bar trifft, so dass ersterer niedriger ist als der offene Preis, aber hoher als der Schlusskurs, wird die SELL-Position geoffnet. Das im Experten verwendete Money Management ist sehr einfach, aber effektiv: Die Kontrolle uber jedes Positionsvolumen wird in Abhangigkeit von den bisherigen Transaktionsergebnissen durchgefuhrt. Dieser Algorithmus wird durch die Funktion LotsOptimized () implementiert. Die Basis-Losgro?e wird auf Basis des maximal zulassigen Risikos berechnet: Der Parameter MaximumRisk zeigt fur jede Transaktion den Grundrisikoprozentsatz an. Sie besitzt ublicherweise einen Wert zwischen 0,01 (1) und 1 (100). Wenn beispielsweise die freie Marge (AccountFreeMargin) 20.500 betragt und die Regeln des Kapitalmanagements das Risiko von 2 verwenden, wird die Grundlosgro?e 20500 0,02 1000 0,41 betragen. Es ist sehr wichtig, die Losgro?engenauigkeit zu kontrollieren und das Ergebnis mit den zulassigen Werten zu normalisieren. Normalerweise sind Fraktionen mit einer Stufe von 0,1 erlaubt. Eine Transaktion mit einem Volumen von 0,41 wird nicht durchgefuhrt. Zur Normalisierung wird die NormalizeDouble () - Funktion mit Genauigkeit bis zu einem Zeichen nach dem Punkt verwendet. Dies fuhrt zu der Grundmenge von 0,4. Die Basispreisberechnung auf Basis der freien Marge erlaubt es, die Betriebsvolumina je nach Handelserfolg zu erhohen, d. h. den Handel mit Reinvestitionen zu handeln. Dies ist der grundlegende Mechanismus mit obligatorischem Kapitalmanagement zur Steigerung der Effizienz des Handels. DecreaseFactor ist das Ausma?, in dem die Losgro?e nach dem unrentablen Handel reduziert wird. Normale Werte sind 2,3,4,5. Wenn die vorhergehenden Transaktionen unrentabel waren, verringern sich die nachfolgenden Volumina um einen Faktor von DecreaseFactor, um durch die unrentable Periode zu warten. Dies ist der Hauptfaktor im Kapitalmanagementalgorithmus. Die Idee ist sehr einfach: Wenn der Handel erfolgreich wachst, arbeitet der Experte mit dem Grundposten, der maximalen Profit macht. Nach der ersten unrentablen Transaktion wird der Experte die Geschwindigkeit reduzieren, bis eine neue positive Transaktion erfolgt. Der Algorithmus erlaubt es, die Geschwindigkeitsreduzierung zu deaktivieren, dafur muss man DecreaseFactor 0 angeben. Die Hohe der letzten aufeinanderfolgenden unrentablen Transaktionen wird in der Handelsgeschichte berechnet. Das Basislos wird auf dieser Basis neu berechnet: Der Algorithmus erlaubt es also, das durch eine Reihe von unrentablen Transaktionen auftretende Risiko effektiv zu reduzieren. Die Losgro?e wird am Ende der Funktion obligatorisch auf die minimal zulassige Losgro?e uberpruft Konnen die zuvor durchgefuhrten Berechnungen zu Los 0 fuhren: Der Experte ist hauptsachlich fur den taglichen Arbeitsablauf und im Testmodus bestimmt - fur die Durchfuhrung zu engen Preisen. Es wird nur beim Offnen einer neuen Bar handeln, deshalb werden die Modi der Tick-Modellierung nicht benotigt. Tatsachlich konnen zwei gleitende Durchschnitte verwendet werden, um eine Forex-Strategie (EA fur MT4) mit diesen Regeln zu erstellen: Kaufen Sie, wenn der kurzzeitige gleitende Durchschnitt uber dem langperiodischen gleitenden Durchschnitt liegt. Verkaufen Sie, wenn die lange Zeit in Bewegung ist Durchschnitt liegt uber dem kurzeren Periodendurchschnittsdurchschnitt Auf der folgenden Grafik vom MetaTrader Terminal ist die gelbe Linie der kurzlebige gleitende Durchschnitt (Periode 9) und die rote Linie der langperiodische gleitende Durchschnitt (Periode 18). Analysieren Sie die Grafik, konnten wir die Handelsregeln oder Forex-Signale umschreiben als: Kaufen, wenn die gelbe Linie uber der roten Linie ist Verkaufen, wenn die gelbe Zeile unter der roten Linie ist Anstatt eine lange Zeit Kodierung dieser Forex-Strategie mit Molanis Strategy Builder Konnen Sie ein Handelsdiagramm erstellen, das die gleitende Durchschnittsstrategie in Minuten darstellt. Einfach per Drag & Drop zwei Technical Analysis-Blocke, einen Buy-Block und einen Sell Block. Verbinden Sie sie und setzen Sie die Blockparameter, um ein Diagramm wie das folgende zu erhalten: Dieses Handelsdiagramm hat zwei Handelspfade. Die linke ist hervorgehoben. Es geht vom START-Block zum END-Block. Man konnte es wie folgt lesen: Kaufen Sie 1 Lot von EURCAD (mit einem 100 Pip Take Profit und 50 Pip Stop Loss), wenn der kurzlebige gleitende Durchschnitt (9) uber dem langjahrigen gleitenden Durchschnitt liegt (18). Denken Sie daran, das Handelsdiagramm in der entgegengesetzten Richtung zum Handelsfluss zu lesen. Der richtige Handelspfad kann folgenderma?en gelesen werden: Verkaufen Sie 1 Lots of EURCAD (mit 100 Pip Take Profit und 50 Pip Stop Loss), wenn der Langzeitdurchschnitt (18) uber dem Kurzzeitdurchschnitt liegt (9). Generieren des MQL-Codes fur MetaTrader mit nur einem Klick Klicken Sie im Trading-Diagramm-Menu auf Generate MQL4 Code, um das MQL4-Code-Fenster zu erhalten. Mit Molanis Strategy Builder konnen Sie Ihren Expertenberater direkt mit MetaTrader offnen oder als MQ4-Datei speichern. Verpassen Sie nicht unsere Video-Tutorial onSimple Expert Advisor Problem 29. Erstellen Sie einen Handel Expert Advisor. Vorlaufige Argumente Bevor Sie mit dem Programmieren eines Trade Expert Advisor beginnen, mussen Sie allgemeine Grundsatze fur ein zukunftiges Programm definieren. Es gibt keine strengen Programmerstellungsregeln. Allerdings, sobald ein Programm erstellt, ein Programmierer in der Regel weiter zu verbessern. Um das Programm in Zukunft gut verstehen zu konnen, muss es nach einem gut durchdachten und leicht verstandlichen Schema erstellt werden (es ist besonders wichtig, dass ein Programm von einem anderen Programmierer weiter verbessert wird). Das bequemste Programm ist das, das aus Funktionsblocken besteht, von denen jedes fur seinen Teil der Berechnungen verantwortlich ist. Um einen Algorithmus eines Trading Expert Advisor zu erstellen, konnen Sie analysieren, was ein Betriebsprogramm tun soll. Eines der wichtigsten Daten bei der Bildung von Handelsauftragen ist die Information uber Auftrage, die bereits in einem Client-Terminal vorhanden sind. Einige der Handelsstrategien erlauben nur eine unidirektionale Ordnung. Im Allgemeinen, wenn eine Handelsstrategie erlaubt, konnen mehrere Auftrage in einem Terminal zur gleichen Zeit geoffnet sein, obwohl ihre Anzahl angemessen begrenzt sein sollte. Bei jeder Strategie sollten Handelsentscheidungen unter Berucksichtigung der aktuellen Situation getroffen werden. Bevor eine Handelsentscheidung in einem Programm getroffen wird, ist es notwendig zu wissen, welche Handelsauftrage bereits eroffnet oder platziert wurden. Zunachst muss ein Programm eine Auftragsblockbuchhaltung enthalten, die zu den ersten auszufuhren ist. Wahrend einer EA-Durchfuhrung sollten Handelsentscheidungen getroffen werden, deren Durchfuhrung zur Ausfuhrung von Handelsoperationen fuhrt. Code-Teil verantwortlich fur Trade Orders Bildung ist besser in einem separaten Block geschrieben. Ein Expert Advisor kann eine Handelsanfrage erstellen, um eine neue ausstehende oder Marktorder zu eroffnen, bestehende Auftrage zu schlie?en oder zu modifizieren oder gar keine Aktionen auszufuhren. Ein EA muss auch die Auftragspreise je nach Wunsch des Benutzers berechnen. Handelsentscheidungen sollten in einem Programm auf der Grundlage der Handelskriterien getroffen werden. Der Erfolg des gesamten Programms hangt von der Korrektheit der Erkennung von Handelskriterien im Programm ab. Bei der Berechnung von Handelskriterien kann ein Programm alle Informationen berucksichtigen (und muss), die nutzlich sein konnen. Beispielsweise kann ein Expert Advisor die Kombination von technischen Indikatorwerten, die Zeit wichtiger Pressemitteilungen, die aktuelle Zeit, Werte einiger Preisniveaus usw. analysieren. Aus Grunden der Einfachheit sollte der fur die Berechnung der Handelskriterien verantwortliche Programmteil separat geschrieben werden Block. Ein Trade Expert Advisor muss unbedingt Fehlerverarbeitungsblock enthalten. Die Analyse von Fehlern, die bei der Ausfuhrung von Handelsoperationen auftreten konnen, ermoglicht es einerseits, eine Handelsanforderung zu wiederholen und andererseits einen Benutzer uber eine mogliche Konfliktsituation zu informieren. Struktur eines einfachen Expertenberaters Hier ist ein Strukturschema eines einfachen Expertenberaters, der auf der Basis von mehreren Funktionsblocken aufgebaut ist, in jedem Block ein bestimmter Teil der Berechnungen. Auf der folgenden EA-Entwicklungsstufe gibt es noch keinen Programmcode. Gleichzeitig wird der Algorithmus eines Programms weitgehend gebildet. Wie die auf den Grundlagen des angebotenen Schemas aufgebaute EA funktionieren kann, kann leicht verstanden werden, indem man einfach auf das Schema blickt und auf Blocknamen und Relationenmatrizen (Kontrolle ubergeben) zwischen ihnen hin orientiert. Nach dem Programmstart wird die Steuerung an den Block der Vorverarbeitung ubergeben. In diesem Block konnen einige allgemeine Parameter analysiert werden. Wenn zum Beispiel nicht genugend Balken in einem Fenster vorhanden sind (Balken, die fur die Berechnung der Parameter der technischen Indikatoren erforderlich sind), kann ein EA nicht in der Lage sein, adaquat zu operieren. In einem solchen Fall muss eine EA den Betrieb beenden, der vorlaufig einen Benutzer daruber informiert und uber den Grund der Kundigung berichtet. Wenn es keine Kontraindikatons von allgemeinem Charakter gibt, wird die Kontrolle an den Abrechnungsblock weitergegeben. Im Block der Buchhaltungsauftrage wird die Anzahl und Qualitat der Auftrage, die in einem Clientterminal fur ein Wertpapier vorhanden sind (an dem Fenster, an dem die EA angeschlossen ist) erfasst. In diesem Block mussen Auftrage anderer Wertpapiere eliminiert werden. Wenn eine programmierte Handelsstrategie nur Marktauftrage erfordert (und keine ausstehenden Auftrage verwendet), muss die Tatsache der Anwesenheit von ausstehenden Auftragen erkannt werden. Wenn eine Strategie nur eine Marktordnung zulasst und es tatsachlich mehrere Auftrage gibt, sollte diese Tatsache auch bekannt sein. Die Aufgabe des Auftragsabrechnungsblocks (in diesem Schema) besteht darin, festzustellen, ob die aktuelle Handelssituation mit einem erwarteten ubereinstimmt, d. H. Dem, in dem der EA ausreichend arbeiten kann. Wenn die Situation entspricht, muss die Steuerung an den nachsten Block weitergeleitet werden, um die EAs-Operation fortzusetzen, wenn nicht, muss die EAs-Operation beendet werden, und diese Tatsache muss einem Benutzer gemeldet werden. Wenn im Terminal keine Auftrage vorhanden sind oder die Anzahl und Qualitat der bestehenden Auftrage den Erwartungen entspricht, wird die Kontrolle an den Block der definierenden Handelskriterien ubergeben. In diesem Block werden alle fur die Durchfuhrung von Handelsentscheidungen notwendigen Kriterien, namlich Kriterien fur das Offnen, Schlie?en und Andern von Auftragen, berechnet. Eine weitere Steuerung wird an den Block der Schlie?auftrage weitergegeben. Es ist leicht zu verstehen, warum in dem angebotenen Schema der Block von Schlussauftragen fruher ausgefuhrt wird als der Block der Offnungsbefehle. Es ist immer sinnvoller, erste Auftrage zu bearbeiten (schlie?en oder andern) und erst danach neue Auftrage zu eroffnen. Im allgemeinen ist es richtig, sich von dem Wunsch leiten zu lassen, moglichst wenig Befehle zu haben. Bei der Ausfuhrung dieses Satzes mussen alle Auftrage, fur die das Schlie?kriterium aktiviert wurde, geschlossen werden. Nachdem alle notwendigen Auftrage geschlossen wurden, wird die Steuerung an einen Block der Gro?enordnung der neuen Auftrage ubergeben. Es gibt viele Algorithmen zur Berechnung eines Auftragsvolumens. Die einfachste von ihnen ist mit einer konstanten, festen Losgro?e. Es ist praktisch, diesen Algorithmus in einem Programm zum Testen von Strategien zu verwenden. Die popularere Methode, eine Auftragsgro?e zu definieren, ist das Festlegen der Anzahl der Lots abhangig von der Menge an freiem Rand, zum Beispiel 30-40 davon. Wenn die freie Marge nicht ausreicht, beendet das Programm seinen Betrieb, indem er einen Benutzer uber den Grund informiert hat. Nachdem die Anzahl der Lose fur die Eroffnung neuer Auftrage definiert ist, wird die Steuerung an den Auftragsoffnungsblock ubergeben. Wenn irgendeine der zuvor ermittelten Kriterien auf die Notwendigkeit hinweist, eine Bestellung eines bestimmten Typs zu eroffnen, wird in diesem Block eine Handelsaufforderung zum Offnen einer Bestellung gebildet. Es gibt auch Fehleranalyse-Block in einem Experten-Berater. Wenn eine Handelsoperation fehlgeschlagen ist, wird die Steuerung (nur in diesem Fall) an den Fehlerverarbeitungsblock ubergeben. Wenn ein von einem Server oder Client-Terminal zuruckgegebener Fehler nicht entscheidend ist, wird ein weiterer Versuch unternommen, eine Handelsoperation auszufuhren. Wenn ein wichtiger Fehler zuruckgegeben wird (z. B. ein Konto gesperrt ist), muss ein EA seinen Vorgang abbrechen. Denken Sie daran, in MQL4 gibt es keine Moglichkeit der Programmabschluss einer EAs-Operation in einem Sicherheitsfenster (anders als Skripte, siehe Sonderfunktionen). Was man auf Programmebene machen kann, ist die Beendigung von start (). Bei einem Neustart der Funktion start () auf einem neuen Tick kann der Wert eines bestimmten Variablen-Flag-Verbotshandels (in diesem Fall als Folge eines kritischen Fehlers aktiviert) analysiert und die Steuerung fur die Beendigung des Vorgangs ubergeben werden Sonderfunktion Betrieb damit Bildung von neuen Handelsanfrage ist nicht zulassig. In dem angebotenen Schema wird der Merkerwert im Block der Vorverarbeitung analysiert. Handelsstrategie Die Marktpreise bewegen sich standig. Der Marktstatus kann zu jedem Zeitpunkt entweder als trend - starke unidirektionale Preisveranderung (Anstieg oder Abfall) charakterisiert werden, oder als flach - laterale Kursbewegung mit schwachen Abweichungen von einem bestimmten Durchschnitt. Diese Marktmerkmale sind bedingt, da es keine eindeutigen Kriterien gibt, nach denen Trend oder Wohnung identifiziert werden konnen. Beispielsweise lange Seitenbewegungen mit starken Abweichungen, die weder auf eine Ebene noch auf einen Trend zuruckzufuhren sind. Im Allgemeinen wird davon ausgegangen, dass der Markt ist vor allem in den Zustand der seitlichen Bewegung und Trends in der Regel statt 15-20 der Zeit. Alle Handelsstrategien konnen auch konventionell in zwei Hauptgruppen aufgeteilt werden. Die erste Gruppe enthalt flachorientierte Strategien. Der Grundgedanke solcher Strategien ist, dass nach einem offensichtlichen Abweichungspreis zur vorherigen Position zuruckkehren muss, deshalb werden Auftrage in die Richtung entgegen der letzten Kursbewegung geoffnet. Die zweiten Gruppenstrategien sind Trendstrategien, bei denen Auftrage in die gleiche Richtung wie die Salzpreisbewegung eroffnet werden. Es gibt kompliziertere (kombinierte) Strategien. Solche Strategien berucksichtigen viele verschiedene Faktoren, die charakterisieren Markt als Ergebnis Handel kann sowohl auf Flach-und Trend durchgefuhrt werden. Es ist nicht schwer, den Handel nach dieser oder dieser Strategie technisch zu implementieren - MQL4 enthalt alle notwendigen Mittel dafur. Die wichtigste Arbeit in der Schaffung von einmal eigene Strategie besteht aus der Suche nach Handel Kriterien. Trading-Kriterien In diesem Beispiel werden wir versuchen, einen Trend Expert Advisor zu konstruieren, d. H. Diejenige, die Auftrage in der Kursbewegungsrichtung offnen wird. So mussen wir finden unter verschiedenen technischen Indikatoren diejenigen, die einen Trend zu erkennen. Eine der einfachsten Methoden zum Suchen von Handelskriterien basiert auf der Analyse der Kombination von MAs mit unterschiedlichen Mittelungsperioden. Feige. 111 und Fig. 112 zeigen die Position von zwei verschiedenen MA (mit Perioden der Mittelung 11 und 31) auf verschiedenen Marktteilen. Mittelwerte mit kleinen Mittelungszeit (rote Linien) sind naher an einem Preisdiagramm, twisty und beweglich. Gleitende Mittelwerte mit gro?eren Mittelwerten (blaue Linie) sind inert, haben gro?ere Verzogerungen und liegen weiter von den Marktpreisen entfernt. Lets Aufmerksamkeit auf Orte, wo MAs mit unterschiedlichen Mittelungsperioden Kreuz und versuchen zu entscheiden, ob die Tatsache der MA Kreuzung kann als Lesekriterium verwendet werden. Feige. 111. Kreuzung von MA (11) und MA (31), wenn sich die Kursbewegungsrichtung andert. In Fig. 111 sehen wir einen Marktteil, bei dem Auftrage in Richtung der Kursbewegung bei der MA-Kreuzung gerechtfertigt sind. In Punkt A kreuzt die rote Linie die blaue von unten nach oben, danach steigt der Marktpreis fur eine gewisse Zeit an. Weitere Ruckwarts-MA-Kreuzung zeigt die Kursbewegungsanderung an. Wenn wir einen Kaufauftrag am Punkt A offnen und ihn bei B schlie?en, erhalten wir Profit proportional zur Differenz von A und B Preisen. Feige. 112. Kreuzung von MA (11) und MA (31), wenn sich die Kursbewegungsrichtung andert. Gleichzeitig gibt es weitere Momente auf dem Markt, wenn MA kreuzt, aber dies fuhrt nicht zu einem weiteren erheblichen Preisanstieg oder - ruckgang (Abb. 112). Auftrage bei MA Kreuzung in solchen Momenten zu Verlusten fuhren. Wenn Sell bei A eroffnet und bei B geschlossen wird, fuhrt dies zu Verlusten. Dasselbe gilt fur einen bei B eroffneten und bei C geschlossenen Kaufauftrag. Der Erfolg der gesamten auf MA-Crossing umgesetzten Strategie hangt von der Anzahl der Teile ab, die als Trend und flach charakterisiert werden konnen. In flachen oft MA Kreuzung ist ein regelma?iges Ereignis, das jede Trendstrategie stort. Zahlreiche falsche Signale fuhren in der Regel zu Verlusten. Aus diesem Grund kann diese Zeichenuberquerung von MAs mit unterschiedlicher Mittelungsperiode fur den Aufbau von Handelsstrategien nur in Kombination mit anderen Trendzeichen verwendet werden. In diesem Beispiel (fur den Aufbau eines einfachen Expertenberaters) mussen wir dieses Zeichen ablehnen. Wir verwenden ein anderes Zeichen. Analysieren visuell den Charakter der Preisveranderungen auf dem Markt, konnen wir sehen, dass eine lange Ein-Richtung Preisanstieg oder-fallen oft als Folge einer kurzen starken Bewegung erscheint. Mit anderen Worten, wenn innerhalb einer kurzen Zeit eine starke Bewegung geschehen ist, konnen wir erwarten, dass ihre Fortsetzung in einem mittelfristigen Zeitraum. Feige. 113 zeigt die Marktperiode, in der eine starke Bewegung zur Fortsetzung der Preisanderung in die gleiche Richtung fuhrte. Als Kontingent starke Bewegungquot konnen wir die Differenz von MAs mit unterschiedlichen Mittelungsperioden. Je starker die Bewegung, desto gro?er ist die Verzogerung von MA mit einer gro?eren Mittelungsperiode von MA mit einer kleinen Periode der Mittelung. Daruber hinaus fuhren selbst starke diskontinuierliche Preisbewegungen mit weiterer Ruckkehr nicht zu einem gro?en Unterschied zwischen den MAs, d. h. zahlreiche falsche Signale treten nicht auf. Beispielsweise fuhrte der Preissprung um 50 Punkte mit weiterer Ruckkehr (in der Mitte in 113) zu einer Erhohung der Differenz zwischen den MAs nur um 20 Punkte. Gleichzeitig fuhrte eine wirklich starke Bewegung (die in der Regel nicht von einer betrachtlichen Korrektur begleitet wird) in Punkt A zu einer Erhohung der Differenz um 25 - 30 Punkte. Wenn Kaufauftrag eroffnet wird, wenn ein bestimmter Wert der Differenz zwischen den MAs erreicht wird, zum Beispiel in A, wird die Bestellung hochstwahrscheinlich rentabel sein, wenn ein Preis einen voreingestellten Stop-Auftragswert erreicht. Wir verwenden diesen Wert als Handelskriterium in unserem Expertenrat. Anzahl der Auftrage In diesem Beispiel analysieren wir einen Expert Advisor, der die Anwesenheit von nur einer Marktordnung zulasst und keine ausstehenden Auftrage vorliegen. Ein solcher Ansatz ist nicht nur in diesem bestimmten Beispiel gerechtfertigt, sondern kann als Grundlage fur jede Strategie verwendet werden. Ausstehende Auftrage werden meist verwendet, wenn ein Entwickler ein recht zuverlassiges Kriterium fur die Prognose der zukunftigen Preisanderung mit hoher Wahrscheinlichkeit hat. Wenn es kein solches Kriterium gibt, mussen keine ausstehenden Auftrage verwendet werden. Die Situation, in der mehrere entgegengesetzte Auftrage fur ein Wertpapier offen sind, kann auch nicht als vernunftig betrachtet werden. Es wurde schon fruher geschrieben, da? aus der okonomischen Perspektive entgegengesetzte Anordnungen als sinnlos gelten, besonders wenn die Orderpreise gleich sind (siehe Closing and Deleting Orders). In einem solchen Fall sollten wir einen Befehl durch einen anderen schlie?en und auf ein Signal warten, um eine Marktordnung in einer bestimmten Richtung zu offnen. Relation der Handelskriterien Aus dieser Position wird deutlich, welche Beziehungen zwischen Handelskriterien moglich sind. Feige. 114 zeigt drei Varianten der Korrelation der Handelskriterien, wenn jedes Kriterium wichtig ist (gultig). Aktionen (Offnen und Schlie?en von Marktauftragen) finden im Uhrzeigersinn auf den folgenden Bildern statt. Feige. 114. Ordnungs - und Schlusskriterienkorrelation (a und b - korrekt, c - falsch). Die beliebteste Variante eines richtig geformten Trading-Kriteriums ist die Variante a. Nach dem Offnen wird ein Marktauftrag Kauf bis zu dem Moment, wenn das Kriterium, das seine Schlie?ung auslost, gehalten. Danach erfolgt eine Pause, wenn keine Auftrage geoffnet werden. Weiterhin kann ein Marktauftrag Sell geoffnet werden. Voraussetzungen fur den Abschluss eines Verkaufsauftrags (nach korrekt festgelegten Kriterien) sind fruher als die Bedingungen fur die Eroffnung eines Kaufauftrags. Ein Kaufauftrag kann jedoch erneut geoffnet werden, wenn ein Handelskrite - rium dies erfordert. Aber nach dieser Variante kann eine Marktordnung nicht geoffnet werden, wenn es eine offene Marktordnung in der entgegengesetzten Richtung gibt. Ahnliche Kriterien Korrelation ist in der Variante b. Der Unterschied besteht darin, dass ein Kriterium fur die Eroffnung einer Marktordnung zugleich ein Kriterium fur das Schlie?en der entgegengesetzten Reihenfolge ist. Diese Variante wie die Variante a ermoglicht es nicht, mehrere Auftrage gleichzeitig im Terminal auf einem Wert zu eroffnen. Die Variante der Kriterienkorrelation ist falsch. Nach dieser Variante ist die Offnung einer Marktordnung erlaubt, wenn gegensatzliche Auftrage noch nicht abgeschlossen sind, was sinnlos ist. Es kann nur selten vorkommen, dass diese Variante teilweise gerechtfertigt ist. Das Offnen einer entgegengesetzten Reihenfolge ist manchmal akzeptabel, um Verluste zu kompensieren, die bei kleinen Korrekturen nach starken Preisbewegungen auftreten. In solchen Fallen kann eine entgegengesetzte Reihenfolge des gleichen oder eines kleineren Wertes als die bereits vorhandene geoffnet und dann geschlossen werden, wenn die Korrektur vorbei ist. Eine solche Taktik erlaubt es nicht, die in der Trendrichtung eroffnete quadratische Reihenfolge zu storen. Im allgemeinen sind auch mehrere Einrichtungsanweisungen moglich. Dies kann gerechtfertigt sein, wenn eine fruhere geoffnete Bestellung durch eine Stop-Order geschutzt wird und das Kriterium auf die Preisentwicklung in derselben Richtung erneut ausgelost wird. Bei der Erstellung einer solchen Strategie muss sich ein Entwickler jedoch bewusst sein, dass im Falle einer starken Preisbewegungsanderung die platzierten Stopauftrage bei einigen Brokern bei der ersten Preissenkung nicht ausgefuhrt werden konnen. Und der Verlust wird proportional zum Gesamtwert von ein-direktionalen Marktauftragen. In unserem Beispiel verwenden wir Variante b der Handelskriterienkorrelation. Alle geoffneten Marktauftrage werden entweder durch einen Stoppauftrag oder nach einem Kriterium der Eroffnung eines Auftrages in entgegengesetzter Richtung ausgelost (hier gilt das Kriterium des abschlie?enden Kaufs mit dem des Eroffnungsverkaufs und umgekehrt). Gro?e der eroffneten Auftrage In jeder Handelsstrategie sollten die Bestellmengen angemessen begrenzt sein. In einem einfachen Fall wird eine feste Auftragsgro?e in einem Expertenrat verwendet. Vor dem Start des EA-Vorgangs kann ein Benutzer beliebige Gro?en zukunftiger Auftrage festlegen und ihn fur einige Zeit unverandert lassen. Wenn der Saldo geandert wird, kann ein Benutzer einen neuen Wert der Losnummern der geoffneten Bestellungen einrichten. Eine zu geringe Auftragsgro?e bietet mehr Vertrauen in den Betrieb bei der unvorhersehbaren Marktveranderung, aber der Gewinn im Erfolgsfall wird nicht so gro? sein. Wenn die Auftragsgro?e zu gro? ist, kann ein gro?er Gewinn erworben werden, aber eine solche EA ist zu riskant. Normalerweise ist die Gro?e der eroffneten Auftrage so festgelegt, dass die Margin-Anforderungen nicht mehr als 2-35 Prozent des Gleichgewichts oder der freien Marge (wenn eine Strategie nur eine geoffnete Reihenfolge, Balance und freie Marge im Moment vor der Orderoffnung erlaubt gleich). In diesem Beispiel sind beide Varianten implementiert. Ein Benutzer kann wahlen, ob er direkt Werte von Auftragen angibt oder den Wert in Prozent vom freien Rand festlegt. Programmierdetails Ein einfacher Trend Expert Advisor tradingexpert. mq4, der auf der Basis vorheriger Argumente aufgebaut ist, kann so aussehen: Variablen beschreiben Ein weiteres Kriterium bei der Programmschatzung ist seine Lesbarkeit. Ein Programm gilt als korrekt geschrieben, wenn es von anderen Programmierern leicht gelesen werden kann, deshalb mussen alle Hauptprogrammteile und Hauptmomente, die die Strategie charakterisieren, kommentiert werden. Aus diesem Grund wird empfohlen, alle Variablen zu Beginn des Programms zu deklarieren und zu kommentieren. Im Block 1-2 werden externe und globale Variablen beschrieben. Nach Regeln mussen externe und globale Variablen vor ihrer ersten Verwendung geoffnet werden (siehe Variablentypen), deshalb werden sie im Programmhauptteil deklariert. Alle lokalen Variablen der Funktion start () werden im oberen Funktionsteil (Block 2-3) unmittelbar nach dem Funktions-Header gesammelt und beschrieben. Regeln fur die Deklaration lokaler Variablen erfordern es nicht, aber auch nicht zu verbieten. Wenn ein Programmierer Schwierigkeiten beim Verstehen der Bedeutung einer Variablen beim Lesen des Programms hat, kann er sich auf den oberen Programmteil beziehen und die Bedeutung und den Typ einer Variablen herausfinden. Es ist sehr praktisch in der Programmierung der Praxis. Block der Vorverarbeitung In diesem Beispiel besteht die Vorverarbeitung aus zwei Teilen (Block 3-4). Das Programm beendet den Betrieb, wenn nicht genugend Balken in einem Sicherheitsfenster vorhanden sind, in solch einem Fall ist es unmoglich, korrekte (in Block 5-6) Werte von gleitenden Durchschnittswerten, die fur die Berechnung von Kriterien erforderlich sind, zu erfassen. Dabei wird der Wert der Variablen Arbeit analysiert. Im normalen EA-Betrieb ist der Variablenwert immer wahr (er wird einmal wahrend der Initialisierung gesetzt). Wenn im Programmvorgang ein kritischer Fehler auftritt, wird dieser Variable false zugewiesen und start () beendet ihre Operation. Dieser Wert wird sich in Zukunft nicht andern, deshalb wird der folgende Code nicht ausgefuhrt. In einem solchen Fall muss der Programmablauf gestoppt und der Grund fur den kritischen Fehler erkannt werden (bei Bedarf muss ein Handelscenter kontaktiert werden). Nachdem die Situation gelost ist, kann das Programm erneut gestartet werden, d. h. das EA kann an ein Sicherheitsfenster angeschlossen werden. Buchfuhrungsauftrage Der beschriebene Sachverstandige ermoglicht es, nur mit einem Marktauftrag zu arbeiten. Die Aufgabe des Auftragsabrechnungsblocks (Block 4-5) besteht darin, Merkmale einer geoffneten Bestellung zu definieren, sofern vorhanden. In der Schleife durchlaufen Auftrage fur alle bestehenden Markt und ausstehende Auftrage werden uberpruft, namlich vom ersten (int i1) bis zum letzten (iampltOrdersTotal ()). In jeder Zyklus-Iteration wird die nachste Reihenfolge durch die Funktion OrderSelect () ausgewahlt. Die Auswahl erfolgt aus einer Quelle geoffneter und ausstehender Auftrage (SELECTBYPOS). Wenn die Selektion erfolgreich durchgefuhrt wird (dh es ist eine weitere Bestellung im Terminal vorhanden), muss diese Reihenfolge und die Situation analysiert werden: ob die Order fur die Sicherheit geoffnet wird, bei der die EA operiert, ob die Order auf dem Markt ist oder anhangig ist Es muss auch bei der Zahlung von Auftragen berucksichtigt werden. In der Zeile: Alle Auftrage fur ein anderes Sicherheitssystem werden eliminiert. Der Operator beendet die Iteration und die Merkmale einer solchen Bestellung werden nicht verarbeitet. Aber wenn die Bestellung fur die Sicherheit geoffnet ist, an dem Fenster, an dem die EA angeschlossen ist, wird es weiter analysiert. Wenn OrderType () einen Wert gro?er als 1 zuruckgibt (siehe Typen von Trades), ist der ausgewahlte Auftrag noch ausstehend. Aber in diesem Expert Advisor Verwaltung von ausstehenden Bestellungen nicht zur Verfugung gestellt. Es bedeutet, dass die Ausfuhrung von start () beendet werden muss, da eine Konfliktsituation eingetreten ist. In einem solchen Fall wird nach einer Meldung uber die Operationsbeendigung start () die Ausfuhrung durch die Ruckkehr des Operators gestoppt. Wenn die letzte Uberprufung zeigt, dass es sich bei dem analysierten Auftrag um eine Marktordnung handelt, wird die Gesamtzahl der Auftrage fur ein Wertpapier berechnet und analysiert. Fur die erste dieser Auftrage werden alle notwendigen Merkmale definiert. Wenn bei der nachsten Iteration der Orderzahler (variable Total) die zweite Marktordnung findet, gilt die Situation auch als Konflikt, da die EA nicht mehr als eine Market Order verwalten kann. In einem solchen Fall wird die start () - Ausfuhrung gestoppt, nachdem eine entsprechende Meldung angezeigt wird. Aufgrund der Auftragsausfuhrungsblockausfuhrung (wenn alle Prufungen erfolgreich waren) erhalt die Variable Total ihren Nullwert, wenn es keine Marktauftrage gibt oder den Wert 1 erhalt, wenn es eine Marktorder fur unsere Sicherheit gibt. Im letzteren Fall erhalten auch einige Variablen, die in Ubereinstimmung mit den Auftragseigenschaften (Anzahl, Typ, Eroffnungs - preis, Stopplevel und Auftragswert) gesetzt wurden, ihre Werte. Berechnen von Handelskriterien Im analysierten Beispiel wird die Definition der Handelskriterien (Block 5-6) auf den Grundlagen der Differenz zwischen Bewegungsdurchschnitten mit unterschiedlichen Zeitraumen berechnet. Entsprechend den akzeptierten Kriterien ist ein Diagramm bull-directed, wenn der aktuelle Wert des MA mit kleinerer Periode gro?er als der MA-Wert mit gro?erer Periode ist und die Differenz zwischen den Werten gro?er als ein bestimmter Wert ist. Bei einer Barenbewegung ist MA mit kleinerer Periode niedriger als MA mit gro?erer Periode und die Differenz ist auch gro?er als ein bestimmter kritischer Wert. Am Blockanfang werden Werte von MAs mit Mittelungsperioden PeriodMA1 und PeriodMA2 berechnet. Die Tatsache der Bedeutung eines Handelskriteriums wird uber den Wert einer entsprechenden Variable ausgedruckt. Die Variablen OpnB und OpnS bezeichnen das Kriterium fur die Eroffnung von Kauf - und Verkaufsauftragen, die Variablen Cls und ClsS - zum Schlie?en. Wenn zum Beispiel ein Kriterium fur die Offnung von Buy nicht ausgelost wurde, bleibt der Wert von OpnB falsch (gesetzt bei der Variableninitialisierung), wenn er ausgelost hat, erhalt OpnB den Wert true. In diesem Fall fallt das Kriterium fur das Schlie?en des Verkaufs mit dem fur die Offnung des Kaufs zusammen, das Kriterium fur die Offnung des Verkaufs entspricht dem fur das Schlie?en des Kaufs. Trading-Kriterien, die in diesem Beispiel akzeptiert werden, werden nur fur padagogische Zwecke verwendet und durfen nicht als Leitlinie betrachtet werden, wenn sie auf einem realen Konto handeln. Closing Orders Es wurde fruher geschrieben, dass diese Expert Advisor fur den Betrieb nur mit einer Marktordnung fur eine Sicherheit eroffnet, fur die Fenster der EA beigefugt ist bestimmt ist. Bis zu dem Zeitpunkt, an dem die Steuerung im Programm an den Auftragsschlie?block ubergeben wird, ist es sicher bekannt, dass es im Moment keine Auftrage fur die Sicherheit gibt oder es nur eine Marktordnung gibt. Das ist, warum der Code im Auftragsschlie?ungsblock geschrieben wird, damit nur ein Auftrag erfolgreich geschlossen werden kann. Dieser Block basiert auf der Endlosschleife, wahrend der Korper aus zwei analogen Teilen besteht: einer zum Schlie?en eines Kaufauftrags, ein weiterer zum Schlie?en eines Verkaufsauftrags. Wahrend es hier fur den Zweck verwendet wird, dass es im Falle eines Handelsbetriebsausfalls noch einmal wiederholt werden konnte. In der Kopfzeile des ersten Betreibers wird die Bedingung fur den Abschluss eines Kaufauftrags berechnet (Verkaufsabschlusse werden in analoger Weise geschlossen). Wenn der Typ einer fruher geoffneten Bestellung Kauf entspricht (siehe Handelsarten) und das Vorzeichen fur den Abschluss von Kauf relevant ist, wird die Kontrolle an die Stelle des Betreibers weitergeleitet, bei dem ein Antrag auf Schlie?ung gebildet wird. Als Auftragsschlusskurs in der Funktion OrderClose () wird der Wert eines zweiseitigen Angebots, der der Auftragsart entspricht, angezeigt (siehe Anforderungen und Einschrankungen beim Making Trades). Wenn ein Trade-Vorgang erfolgreich ausgefuhrt wird, wird nach einer Meldung uber den Auftragsabschluss die aktuelle Iteration gestoppt und die Ausfuhrung des Auftragsschlie?ungsblocks beendet. Wenn die Operation jedoch fehlschlagt, wird die benutzerdefinierte Funktion zur Verarbeitung von Fehlern FunError () aufgerufen (Block 10-11). Processing Errors Als ubergebener Parameter in FunError () wird der letzte von GetLastError () berechnete Fehlercode verwendet. Abhangig vom Fehlercode gibt FunError () 1 zuruck, wenn der Fehler nicht kritisch ist und die Operation wiederholt werden kann, und 0, wenn der Fehler kritisch ist. Kritische Fehler werden in zwei Arten unterteilt - nach denen eine Programmausfuhrung fortgesetzt werden kann (z. B. ein haufiger Fehler) und nach denen die Ausfuhrung von Handelsoperationen gestoppt werden muss (z. B. blockiertes Konto). Wenn nach einer erfolglosen Handelsoperation die benutzerdefinierte Funktion 1 zuruckgibt, wird der Strom wahrend der Iteration beendet und wahrend der nachsten Iteration wird ein weiterer Versuch unternommen, den Vorgang auszufuhren - um die Bestellung zu schlie?en. Wenn die Funktion 0 zuruckgibt, wird die aktuelle start () - Ausfuhrung gestoppt. Beim nachsten Tick wird start () vom Client-Terminal erneut gestartet und wenn die Bedingungen fur den Auftragsabschluss beibehalten werden, wird ein weiterer Versuch, die Bestellung zu schlie?en, durchgefuhrt. Wenn bei der Fehlerbearbeitung herausgefunden wird, da? die weitere Programmausfuhrung sinnlos ist (zB wenn das Programm auf einer alten Client-Terminalversion arbeitet), wird im nachsten Block die Ausfuhrung der Sonderfunktion start () im Block der Vorverarbeitung beendet Analysieren des Werts der Variablen Work. Berechnung von Lotsmengen fur neue Auftrage Die Lotsanzahl kann gema? einer Benutzereinstellung nach einer der beiden Varianten berechnet werden. Die erste Variante ist ein bestimmter konstanter Wert, der von einem Benutzer eingerichtet wird. Gema? der zweiten Variante wird die Menge der Partien auf der Grundlage einer Summe berechnet, die einem bestimmten Prozentsatz (von einem Benutzer) einer freien Marge entspricht. Am Anfang des Blocks der Festlegung der Menge der Lose fur neue Auftrage (Block 7-8) werden notwendige Werte von einigen Variablen berechnet - minimal zulassige Menge von Losen und Schritt der Losanderung durch einen Makler, freie Marge und Preis von gesetzt Ein Los fur die Sicherheit. In diesem Beispiel ist Folgendes vorgesehen. Wenn ein Benutzer einen bestimmten Wert ungleich Null der externen Variablen Lts, beispielsweise 0,5, eingerichtet hat, wird er als die Menge von Lots akzeptiert, wenn eine Handelsanfrage zum Offnen einer Bestellung gebildet wird. Wenn 0 Lts zugeordnet ist, wird die Anzahl der Lots Lts auf der Basis der Variablen Prots (Prozentsatz), der freien Marge und der Bedingungen festgelegt, die von einem Broker eingerichtet werden. Nachdem Lts berechnet ist, wird eine Uberprufung durchgefuhrt. Wenn dieser Wert niedriger als der minimale zulassige Wert ist, wird der minimale zulassige Wert akzeptiert. Aber wenn die freie Marge nicht ausreicht, wird nach einer entsprechenden Meldung die start () - Ausfuhrung abgebrochen. Offnungsauftrage Der Block von Offnungsbefehlen (Block 8-9) wie der Kerl von Offnungsbefehlen ist eine Endlosschleife. In der Kopfzeile des ersten Betreibers werden Konditionen fur die Eroffnung eines Kaufauftrags errechnet: Wenn es keine Auftrage fur die Sicherheit gibt (Variable Summe ist gleich 0) und das Vorzeichen fur die Eroffnung eines Kaufauftrags relevant ist (OpnB ist wahr) Wenn ein Bediener einen Auftrag eroffnet hat. In einem solchen Fall werden die Preise fur die Haltestellen errechnet. Die Werte der Stopplevel werden zunachst von einem Benutzer in den externen Variablen StopLoss und TakeProfit festgelegt. Im allgemeinen Fall kann ein Benutzer Werte fur diese Parameter festlegen, die ein Broker erlaubt. Au?er einem Makler kann die minimale erlaubte Entfernung jederzeit andern (es ist ein haufig Fall bei starken Marktbewegungen, zB, bevor wichtige Nachrichten Freigabe). Thats, warum vor jedem Auftrag Eroffnung Stop Ebenen mussen unter Berucksichtigung der Werte bu ein Benutzer und der minimale zulassige Wert von einem Makler eingerichtet zu berechnen. Zur Berechnung von Stopp-Pegeln wird als benutzerdefinierte Funktion NewStop () als ubergebener Parameter der von einem Benutzer eingestellte Stopp-Pegelwert verwendet. In NewStop () wird zuerst der aktuelle minimal erlaubte Abstand berechnet. Wenn der vom Benutzer festgelegte Wert einem Brokerbedarf entspricht, wird dieser Wert zuruckgegeben. Wenn er kleiner als der zulassige Wert ist, wird der von einem Broker zugelassene Wert verwendet. Die Preise fur Stopp-Anfragen werden aus dem entsprechenden zweiseitigen Angebot berechnet (siehe Anforderungen und Einschrankungen in Making Trades). Mit der Funktion OrderSend () wird eine Handelsaufforderung zum Offnen einer Bestellung gebildet. Fur die Berechnung des Orderoffnungspreises und der Preise fur Stopanforderungen werden die zweiseitigen Quotierungswerte verwendet, die der Orderart entsprechen. Wenn eine Handelsoperation erfolgreich war (d. h. ein Server hat die Nummer einer geoffneten Bestellung zuruckgegeben), nachdem eine Nachricht uber eine erfolgreiche Auftragsoffnung angezeigt wurde. Die Ausfuhrung von start () ist abgeschlossen. Wenn eine Bestellung nicht geoffnet wurde und das Client-Terminal einen Fehler zuruckgegeben hat, wird der Fehler gema? dem zuvor beschriebenen Algorithmus verarbeitet. Einige Code-Besonderheiten Der analysierte Expert Advisor-Code ist auf die Umsetzung einer bestimmten Strategie ausgerichtet. Beachten Sie, dass einige Programmzeilen Variablen und Berechnungen enthalten, die geandert werden, wenn die Strategie geandert wurde. Zum Beispiel, nach der akzeptierten Strategie der Expert Advisor entwickelt, um nur mit einem Auftrag arbeiten. Dies ermoglichte es, das variable Ticket sowohl fur die Identifikation einer abschlie?enden Auftragsnummer (im Block der Schlie?ung 6-7) als auch fur die Identifizierung eines Erfolgs einer Handelsoperationsausfuhrung beim Offnen einer Bestellung (im Block der Offnung 8-9) zu verwenden ). In diesem Fall ist eine solche Losung akzeptabel. Wenn wir jedoch den analysierten Code als Grundlage fur die Implementierung einer anderen Strategie nehmen (z. B. entgegengesetzte Auftrage), mussen wir eine oder mehrere Variablen einfuhren, um die Anzahl der eroffneten Auftrage erkennen und den Erfolg der Handelsaktivitaten identifizieren zu konnen. In further strategy modifications we will have to change come program lines containing part of logics contained in the source strategy. Namely in the order accounting block we will not have to terminate the program operation if there are several open orders for a security. Besides, conditions for opening and closing orders will alslo change. This will entail the code changing in blocks of opening and closing orders. On the basis of this analysis we can easily conclude that the described simple Expert Advisor is not perfect. In a general case, for the implementation of order accounting one should use a universal function based on using data arrays and not containing logics of a certain strategy. The same can be said about the blocks of opening and closing orders. A more complete program must contain a main analytical function, all other user-defined functions must be subordinate to it. This analytical function must contain a program code, in which all conditions for the implementation of any strategy are analyzed all subordinate functions must perform limited actions. The function of accounting orders must only account orders, functions of opening and closing orders must only open and close orders, and the analytical function must quotthinkquot and manage all other functions, i. e. call them when needed.