Crossing Giving Durchschnitt Experte Berater

Simple Expert Advisor Problem 29. Erstellen Sie einen Trading Expert Advisor. Vorläufige Argumente Vor Beginn der Programmierung eines Trading Expert Advisor ist es notwendig, allgemeine Grundsätze eines zukünftigen Programms zu definieren. Es gibt kein strenges Programm, das Regeln erstellt. Allerdings, sobald ein Programm erstellt, ein Programmierer in der Regel weiter zu verbessern. Um das Programm in Zukunft problemlos verstehen zu können, muss es in Übereinstimmung mit einem gut durchdachten und leicht verständlichen Schema erstellt werden (es ist besonders wichtig, wenn ein Programm von einem anderen Programmierer weiter verbessert wird). Das bequemste Programm ist das, das aus Funktionsblöcken besteht, von denen jeder für seinen Teil der Berechnungen verantwortlich ist. Um einen Algorithmus eines Handels-Experten-Beraters zu erstellen, können wir analysieren, was ein Betriebsprogramm tun soll. Eine der wichtigsten Daten bei der Bildung von Handelsaufträgen ist die Information über Aufträge, die bereits in einem Client-Terminal vorhanden sind. Einige der Handelsstrategien erlauben nur eine unidirektionale Ordnung. Im Allgemeinen, wenn eine Handelsstrategie erlaubt, können mehrere Aufträge gleichzeitig in einem Terminal geöffnet sein, obwohl ihre Zahl vernünftigerweise begrenzt sein sollte. Bei der Verwendung einer Strategie sollten Handelsentscheidungen unter Berücksichtigung der aktuellen Situation getroffen werden. Bevor eine Handelsentscheidung in einem Programm getroffen wird, ist es notwendig zu wissen, welche Handelsaufträge bereits eröffnet oder platziert wurden. Zuerst muss ein Programm einen Block von Auftragsabrechnungen enthalten, der zu den ersten führt, die ausgeführt werden sollen. Während einer EA-Ausführung sollten Handelsentscheidungen getroffen werden, deren Umsetzung zur Durchführung von Handelsoperationen führt. Code-Teil verantwortlich für Handelsaufträge Bildung ist besser in einem separaten Block geschrieben. Ein Expert Advisor kann eine Handelsanforderung bilden, um eine neue anhängige oder Marktordnung zu öffnen, irgendwelche vorhandenen Aufträge zu schließen oder zu modifizieren oder überhaupt keine Aktionen durchzuführen. Ein EA muss auch die Auftragspreise je nach Wunsch des Anwenders berechnen. Handelsentscheidungen sollten in einem Programm auf der Grundlage von Handelskriterien getroffen werden. Der Erfolg des gesamten Programms hängt von der Korrektheit der Erkennung von Handelskriterien im Programm ab. Bei der Berechnung von Handelskriterien kann ein Programm alle Informationen berücksichtigen, die nützlich sein können. Beispielsweise kann ein Expert Advisor die Kombination von technischen Indikatorwerten, Zeit der wichtigen Pressemitteilungen, der aktuellen Zeit, der Werte einiger Preisniveaus usw. analysieren. Für die Bequemlichkeit sollte der für die Berechnung der Handelskriterien zuständige Programmteil separat geschrieben werden Block. Ein Trading Expert Advisor muss unbedingt Fehlerbearbeitungsblock enthalten. Die Analyse von Fehlern, die bei der Ausführung des Handelsbetriebes auftreten können, ermöglicht es einerseits, eine Handelsanforderung zu wiederholen und andererseits einen Benutzer über eine mögliche Konfliktsituation zu informieren. Aufbau eines einfachen Expertenberaters Im Folgenden ist ein strukturelles Schema eines einfachen Expertenberaters, der auf der Basis mehrerer Funktionsblöcke aufgebaut ist, in jedem Block einen gewissen freistehenden Teil der Berechnungen. Auf der folgenden EA-Entwicklungsstufe gibt es noch keinen Programmcode. Gleichzeitig wird der Algorithmus eines Programms weitgehend gebildet. Wie die EA auf den Grundlagen des angebotenen Schemas aufgebaut wird, kann leicht verstanden werden, einfach auf das Schema zu schauen und auf Blocknamen und Relationen Arrays (Kontrolle übergeben) zwischen ihnen zu orientieren. Nach dem Programmstart wird die Steuerung an den Block der Vorverarbeitung übergeben. In diesem Block können einige allgemeine Parameter analysiert werden. Zum Beispiel, wenn es nicht genügend Stäbe in einem Fenster gibt (Stäbe, die für die Berechnung von Parametern von technischen Indikatoren erforderlich sind), kann ein EA nicht in der Lage sein, angemessen zu funktionieren. In einem solchen Fall muss eine EA die Operation beenden, die vorläufig einen Benutzer darüber informiert und über den Grund der Kündigung berichtet. Wenn es keine Kontraindikaten eines allgemeinen Charakters gibt, wird die Kontrolle an den Auftragsbuchungsblock übergeben. Im Block der Buchhaltungsaufträge wird die Anzahl und Qualität der Aufträge, die in einem Client-Terminal für eine Sicherheit (an das Fenster, an dem die EA angeschlossen ist) vorhanden sind, erkannt. In diesem Block müssen Aufträge anderer Wertpapiere beseitigt werden. Wenn eine programmierte Handelsstrategie nur Marktaufträge erfordert (und keine ausstehenden Aufträge verwendet), muss die Tatsache der Anwesenheit ausstehender Aufträge festgestellt werden. Wenn eine Strategie nur eine Marktordnung zulässt und es tatsächlich mehrere Aufträge gibt, sollte diese Tatsache auch bekannt sein. Die Aufgabe des Auftragsabrechnungsblocks (in diesem Schema) besteht darin, festzustellen, ob die aktuelle Handelssituation mit einer erwarteten, dh derjenigen, in der die EA adäquat arbeiten kann, entspricht. Wenn die Situation zustimmt, muss die Steuerung an den nächsten Block übergeben werden, um den EAs-Vorgang fortzusetzen, wenn nicht, muss der EAs-Vorgang beendet werden und diese Tatsache muss einem Benutzer gemeldet werden. Wenn es keine Aufträge im Terminal gibt oder die Anzahl und Qualität der bestehenden Aufträge dem, was erwartet wurde, entspricht, wird die Kontrolle an den Block der Definition von Handelskriterien übergeben. In diesem Block werden alle für die Entscheidungsfindung notwendigen Kriterien berechnet, nämlich Kriterien für die Eröffnung, Schließung und Änderung von Aufträgen. Eine weitere Kontrolle wird an den Block der Abschlussaufträge übergeben. Es ist leicht zu verstehen, warum in dem angebotenen Schema der Block der Schlussaufträge früher als der Block der Eröffnungsaufträge ausgeführt wird. Es ist immer vernünftiger, erste bestehende Aufträge zu bearbeiten (zu schließen oder zu modifizieren) und erst danach neue Aufträge zu eröffnen. Im Allgemeinen ist es richtig, von dem Wunsch geleitet zu werden, so wenig Aufträge wie möglich zu haben. Bei der Ausführung dieses Bausteins müssen alle Aufträge, für die das Schlusskriterium aktiviert wurde, geschlossen werden. Nachdem alle notwendigen Aufträge geschlossen wurden, wird die Kontrolle an einen Block der neuen Auftragsgrößenberechnung übergeben. Es gibt viele Algorithmen zur Berechnung eines Auftragsvolumens. Die einfachste von ihnen ist mit einer konstanten, festen Losgröße. Es ist praktisch, diesen Algorithmus in einem Programm zum Testen von Strategien zu verwenden. Eine populärere Methode, eine Auftragsgröße zu definieren, setzt die Anzahl der Lose in Abhängigkeit von der Menge der freien Marge, zum Beispiel 30-40 davon. Wenn die freie Marge nicht ausreicht, beendet das Programm seinen Betrieb, indem er einen Benutzer über den Grund informiert hat. Nachdem die Anzahl der Lose zum Öffnen neuer Aufträge definiert ist, wird die Steuerung an den Auftragsöffnungsblock übergeben. Wenn irgendwelche Kriterien, die früher berechnet wurden, auf die Notwendigkeit der Eröffnung einer Bestellung eines bestimmten Typs hinweisen, wird in diesem Block eine Handelsanforderung zum Öffnen einer Bestellung gebildet. Es gibt auch Fehleranalyse Block in einem Expert Advisor. Wenn ein Handelsvorgang fehlgeschlagen ist, wird die Kontrolle (nur in diesem Fall) an den Fehlerverarbeitungsblock übergeben. Wenn ein von einem Server oder Client-Terminal zurückgegebener Fehler nicht entscheidend ist, wird ein weiterer Versuch unternommen, einen Handelsvorgang durchzuführen. Wenn ein entscheidender Fehler zurückgegeben wird (z. B. ist ein Konto gesperrt), muss ein EA seinen Betrieb beenden. Denken Sie daran, in MQL4 gibt es keine Möglichkeit des Programms, einen EAs-Vorgang in einem Sicherheitsfenster zu beenden (im Unterschied zu Skripten, siehe Sonderfunktionen). Was kann man in einer Programmweise machen, ist die Beendigung von start (). Bei einem Neustart der Funktion start () bei einem neuen Tick kann der Wert eines bestimmten Variablenflags, der den Handel verboten (in diesem Fall durch einen kritischen Fehler freigegeben) analysiert und kontrolliert werden kann, für die Beendigung des Sonderfunktion Betrieb, so Bildung von neuen Handel Anfrage ist nicht erlaubt. In dem angebotenen Schema wird der Flagwert im Block der Vorverarbeitung analysiert. Handelsstrategie Die Marktpreise bewegen sich ständig. Der Marktstaat kann zu jedem Zeitpunkt bedingt entweder als Trend - starke unidirektionale Preisänderung (Aufstieg oder Fall) oder als flach - laterale Preisbewegung mit schwachen Abweichungen von einem bestimmten Durchschnitt charakterisiert werden. Diese Marktmerkmale sind bedingt, da es keine klaren Kriterien gibt, nach denen Trend oder Flat identifiziert werden kann. Zum Beispiel lange seitliche Bewegungen mit starken Abweichungen, die weder auf eine Ebene noch auf einen Trend zurückverfolgt werden können. Generell wird davon ausgegangen, dass der Markt vor allem im Zustand der seitlichen Bewegung und Trends in der Regel stattfinden 15-20 der Zeit. Alle Handelsstrategien können auch konventionell in zwei Hauptgruppen unterteilt werden. Die erste Gruppe enthält flach orientierte Strategien. Der Grundgedanke solcher Strategien ist, dass nach einer offensichtlichen Abweichung der Preis auf die vorherige Position zurückkehren muss, deshalb werden die Aufträge in der Richtung entgegen der letzten Preisbewegung eröffnet. Die zweiten Gruppenstrategien sind Trendstrategien, wenn Aufträge in die gleiche Richtung wie die Salzpreisbewegung geöffnet werden. Es gibt kompliziertere (kombinierte) Strategien. Solche Strategien berücksichtigen viele verschiedene Faktoren, die den Markt charakterisieren, so dass der Handel sowohl auf flach als auch auf Trend durchgeführt werden kann. Es ist nicht schwer, den Handel nach dieser oder jener Strategie technisch umzusetzen - MQL4 enthält alle notwendigen Mittel dafür. Die Hauptarbeit bei der Schaffung einer einmaligen Strategie besteht in der Suche nach Handelskriterien. Trading Criteria In diesem Beispiel werden wir versuchen, einen Trend Expert Advisor zu konstruieren, d. h. derjenige, der Aufträge in der Preisbewegungsrichtung öffnen wird. Also, wir müssen unter verschiedenen technischen Indikatoren diejenigen, die einen Trend beginnen zu finden. Eine der einfachsten Methoden der Suche nach 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. Durchschnitte mit kleiner Mittelungsperiode (rote Linien) sind näher an einer Preisliste, Twisty und beweglich. Bewegungsdurchschnitte mit größerer Periodendauer (blaue Linie) sind inert, haben eine größere Verzögerung und liegen weiter von den Marktpreisen. Lets achten auf Orte, an denen MAs mit verschiedenen Mittelungsperioden kreuzen und versuchen zu entscheiden, ob die Tatsache der MA-Kreuzung als Lesekriterium verwendet werden kann. Feige. 111. Überquerung von MA (11) und MA (31), wenn sich die Preisbewegungsrichtung ändert. In Fig. 111 sehen wir einen Marktteil, wo Eröffnungsaufträge in Richtung Preisbewegung bei MA-Kreuzung gerechtfertigt sind. In Punkt A kreuzt die rote Linie die blaue von unten nach oben, danach wächst der Marktpreis für einige Zeit weiter. Eine weitere umgekehrte MA-Kreuzung zeigt die Preisbewegungsrichtungsänderung an. Wenn wir einen Kaufauftrag an Punkt A öffnen und ihn bei B schließen, erhalten wir Gewinn proportional zum Unterschied von A - und B-Preisen. Feige. 112. Überquerung von MA (11) und MA (31), wenn sich die Preisbewegungsrichtung ändert. Gleichzeitig gibt es andere Momente auf dem Markt, wenn das MA-Kreuz, aber dies führt nicht zu einem weiteren Preisanstieg oder - abfall (Abb. 112). Aufträge, die bei MA-Kreuzungen in solchen Momenten eröffnet werden, führen zu Verlusten. Wenn der Verkauf bei A eröffnet und bei B geschlossen wird, wird ein solcher Handel Verluste bringen. Dasselbe gilt für einen bei B eröffneten Kaufauftrag, der bei C geschlossen ist. Der Erfolg der gesamten Strategie, die auf der Basis der MA-Kreuzung durchgeführt wird, hängt von der Anzahl der Teile ab, die als Trend und flach charakterisiert werden können. In flach oft MA Kreuzung ist ein regelmäßiges Ereignis, das jede Trendstrategie beeinträchtigt. Zahlreiche falsche Signale führen in der Regel zu Verlusten. Aus diesem Grund kann diese Zeichenüberquerung von MAs mit unterschiedlicher Mittelungsperiode für den Aufbau von Handelsstrategien nur in Kombination mit anderen Zeichen, die einen Trend darstellen, genutzt werden. In diesem Beispiel (für den Aufbau eines einfachen Expertenberaters) müssen wir dieses Zeichen nicht verweigern. Wir werden ein anderes Zeichen benutzen. Analysieren visuell den Charakter der Preisveränderungen auf dem Markt, können wir sehen, dass eine lange Ein-Richtungs-Preisanstieg oder - abfall oft als Folge einer kurzen starken Bewegung auftritt. Mit anderen Worten, wenn innerhalb einer kurzen Zeit eine starke Bewegung geschehen ist, können wir erwarten, dass ihre Fortsetzung in einer mittelfristigen Periode. Feige. 113 zeigt die Marktperiode, in der eine starke Bewegung zur Fortsetzung der Preisänderung in die gleiche Richtung führte. Als Kontingent starke Bewegung können wir die Differenz der MAs mit unterschiedlichen Mittelungsperioden verwenden. Je stärker die Bewegung, desto größer ist die Verzögerung von MA mit größerer Mittelungsperiode von MA mit einer kleinen Periode der Mittelung. Darüber hinaus führen selbst starke diskontinuierliche Preisbewegungen mit weiterer Rückkehr nicht zu einem großen Unterschied zwischen den MAs, d. h. zahlreiche falsche Signale erscheinen nicht. Zum Beispiel führte der Preissprung um 50 Punkte mit weiterer Rückkehr (in der Mitte in Abb. 113) eine Zunahme der Differenz zwischen den MAs nur um 20 Punkte. Gleichzeitig hat eine wirklich starke Bewegung (die in der Regel nicht von einer beträchtlichen Korrektur begleitet wird) in Punkt A zu einer Differenzerhöhung von bis zu 25 - 30 Punkten geführt. Wenn der Kaufauftrag eröffnet wird, wenn ein bestimmter Unterschied zwischen den MAs erreicht wird, z. B. in A, ist die Bestellung wahrscheinlich rentabel, wenn ein Preis einen voreingestellten Stop-Bestellwert erreicht. Nutzen Sie diesen Wert als Trading-Kriterium in unserem Expert Advisor. Anzahl der Aufträge In diesem Beispiel analysieren wir einen Expert Advisor, der die Anwesenheit von nur einer Marktordnung zulässt, anstehende Aufträge werden nicht zur Verfügung gestellt. Ein solcher Ansatz ist nicht nur in diesem bestimmten Beispiel gerechtfertigt, sondern kann als Grundlage für jede Strategie verwendet werden. Ausstehende Aufträge werden in der Regel verwendet, wenn ein Entwickler ein recht zuverlässiges Kriterium für die Prognose der zukünftigen Preisänderung mit hoher Wahrscheinlichkeit hat. Wenn es kein solches Kriterium gibt, müssen keine ausstehenden Aufträge verwendet werden. Die Situation, wenn mehrere entgegengesetzte Aufträge für eine Sicherheit offen sind, kann auch nicht als vernünftig angesehen werden. Es wurde früher geschrieben, dass aus ökonomischer Sicht entgegengesetzte Aufträge als sinnlos betrachtet werden, vor allem, wenn die Auftragspreise gleich sind (siehe Schluss - und Löschvorgänge). In solch einem Fall sollten wir einen anderen von einem anderen schließen und auf ein Signal warten, um eine Marktordnung in einer bestimmten Richtung zu öffnen. Verknüpfung von Handelskriterien Aus dieser Position wird deutlich, welche Beziehungen zwischen den Handelskriterien möglich sind. Feige. 114 zeigt drei Varianten der Korrelation von Handelskriterien, wenn jedes Kriterium wichtig (gültig) ist. Aktionen (Eröffnung und Schließung von Marktaufträgen) finden im Uhrzeigersinn auf den folgenden Bildern statt. Feige. 114. Reihenfolge der Eröffnungs - und Schlusskriterien Korrelation (a und b - richtig, c - falsch). Die beliebteste Variante eines korrekt geformten Handelskriterien ist die Variante a. Nach der Eröffnung wird eine Marktordnung Buy bis zu dem Moment gehalten, in dem das Kriterium seine Schließungsauslöser erfordert. Danach tritt eine Pause auf, wenn keine Aufträge eröffnet werden. Weiterhin kann ein Marktauftrag verkauft werden. Die Bedingungen für die Schließung einer Verkaufsreihenfolge (nach korrekt geformten Kriterien) treten früher auf als die Bedingungen für die Eröffnung eines Kaufauftrags. Allerdings kann ein Kaufauftrag wieder geöffnet werden, wenn ein Handelskriterium dies erfordert. Aber nach dieser Variante kann eine Marktordnung nicht eröffnet werden, wenn es eine offene Marktordnung in entgegengesetzter Richtung gibt. Ähnliche Kriterien Korrelation ist in der Variante b. Der Unterschied besteht darin, dass ein Kriterium für die Eröffnung einer Marktordnung zugleich ein Kriterium für die Schließung der entgegengesetzten Reihenfolge ist. Diese Variante wie die Variante a erlaubt nicht, dass mehrere Aufträge gleichzeitig im Terminal auf einer Sicherheit geöffnet werden. Die Variante der Kriterienkorrelation ist falsch. Nach dieser Variante ist die Eröffnung einer Marktordnung erlaubt, wenn entgegenstehende Aufträge noch nicht geschlossen sind, was sinnlos ist. Es gibt seltene Fälle, wenn diese Variante teilweise gerechtfertigt ist. Die Eröffnung einer umgekehrten Reihenfolge ist manchmal für die Kompensation von Verlusten, die bei kleinen Korrekturen nach starken Kursbewegungen auftreten, akzeptabel. In solchen Fällen kann eine entgegengesetzte Reihenfolge von demselben oder kleineren Wert geöffnet werden, als der bereits vorhandene und dann geschlossen, wenn die Korrektur vorbei ist. Eine solche Taktik erlaubt es nicht, die in der Trendrichtung eröffnete Quote zu stören. Im allgemeinen sind auch mehrere Richtungsanordnungen möglich. Dies kann gerechtfertigt sein, wenn ein früher geöffneter Auftrag durch einen Stop-Auftrag geschützt ist und das Kriterium, das auf die Preisentwicklung in der gleichen Richtung hinweist, erneut ausgelöst wird. Bei der Schaffung einer solchen Strategie muss sich ein Entwickler jedoch bewusst sein, dass im Falle einer starken Preisbewegungsänderung die platzierten Stoppaufträge von einigen Brokern bei der ersten Preisuntersuchung nicht ausgeübt werden können. Und der Verlust wird proportional zum Gesamtwert der einseitigen Marktaufträge sein. In unserem Beispiel verwenden wir die Variante b der Trading-Kriterien-Korrelation. Alle eröffneten Marktaufträge werden entweder durch eine Stopp-Order oder nach einem Kriterium der Eröffnung einer Bestellung in entgegengesetzter Richtung ausgelöst (hier das Kriterium der Schließung Buy fällt mit dem der Öffnung Sell und umgekehrt). Größe der eröffneten Aufträge In jeder Handelsstrategie sollten die Bestellgrößen vernünftigerweise begrenzt werden. In einem einfachen Fall wird eine feste Auftragsgröße in einem Expert Advisor verwendet. Bevor der EA-Betrieb beginnt, kann ein Benutzer eine beliebige Größe von zukünftigen Aufträgen festlegen und ihn für einige Zeit unverändert lassen. Wenn sich die Balance ändert, kann ein Benutzer einen neuen Wert der Losnummern der geöffneten Aufträge einrichten. Eine zu geringe Auftragsgröße bietet mehr Vertrauen in den Betrieb bei der unvorhersehbaren Marktveränderung, aber der Gewinn im Erfolgsfall wird nicht so groß sein. Wenn die Auftragsgröße zu groß ist, kann ein großer Gewinn erworben werden, aber eine solche EA wird zu riskant sein. Normalerweise ist die Größe der geöffneten Aufträge so eingestellt, dass die Margin-Anforderungen nicht mehr als 2-35 Prozent des Saldos oder der freien Marge überschreiten (wenn eine Strategie nur eine geöffnete Order, Balance und freie Marge im Moment vor der Auftragsöffnung erlaubt gleich). In diesem Beispiel werden beide Varianten implementiert. Ein Benutzer kann entweder wählen, um direkt Werte von Aufträgen anzugeben oder den Wert in Prozent von der freien Marge festzulegen. Programmierdetails Ein einfacher Trend Expert Advisor tradingexpert. mq4, der auf der Basis früherer Argumente konstruiert wurde, kann so aussehen: Variablen beschreiben Ein weiteres Kriterium bei der Programmschätzung ist seine Lesbarkeit. Ein Programm gilt als richtig geschrieben, wenn es von anderen Programmierern leicht gelesen werden kann, deshalb müssen alle Hauptprogrammteile und Hauptmomente, die die Strategie charakterisieren, kommentiert werden. Aus diesem Grund empfiehlt es sich, alle Variablen zu Beginn des Programms zu deklarieren und zu kommentieren. Im Block 1-2 werden externe und globale Variablen beschrieben. Entsprechend den Regeln müssen externe und globale Variablen vor ihrem ersten Gebrauch geöffnet werden (siehe Variablentypen), deshalb werden sie im Programmkopfteil deklariert. Alle lokalen Variablen des Funktionsstarts () werden unmittelbar nach dem Funktionsheader im oberen Funktionsteil (Block 2-3) gesammelt und beschrieben. Regeln für die Erklärung der lokalen Variablen erfordern es nicht, aber auch nicht verbieten. Wenn ein Programmierer Schwierigkeiten beim Verständnis der Bedeutung einer Variablen beim Lesen des Programms hat, kann er sich auf den oberen Programmteil beziehen und die Bedeutung und den Typ einer beliebigen Variablen herausfinden. Es ist sehr praktisch in der Programmierpraxis. Block der Vorverarbeitung In diesem Beispiel besteht die Vorverarbeitung aus zwei Teilen (Block 3-4). Das Programm beendet den Betrieb, wenn nicht genügend Stäbe in einem Sicherheitsfenster vorhanden sind, in einem solchen Fall ist es unmöglich, die für die Berechnung der Kriterien notwendigen Werte für bewegte Mittelwerte korrekt zu erfassen (in Block 5-6). Außerdem wird hier der Wert der Variablen Work analysiert. Bei der normalen EA-Operation ist der Variablenwert immer wahr (er wird einmal während der Initialisierung gesetzt). Wenn im Programmbetrieb ein kritischer Fehler auftritt, wird dieser Variable false zugeordnet und start () beendet den Vorgang. Dieser Wert wird sich in Zukunft nicht ändern, deshalb wird der folgende Code nicht ausgeführt. In einem solchen Fall muss der Programmbetrieb gestoppt und der Grund für den kritischen Fehler erkannt werden (falls erforderlich, muss ein Handelszentrum kontaktiert werden). Nachdem die Situation gelöst ist, kann das Programm noch einmal gestartet werden, d. h. die EA kann an ein Sicherheitsfenster angeschlossen werden. Buchhaltungsaufträge Der beschriebene Expert Advisor ermöglicht die Arbeit nur mit einer Marktordnung. Die Aufgabe des Auftragsbuchhaltungsblocks (Block 4-5) besteht darin, Merkmale einer geöffneten Bestellung zu definieren, falls vorhanden. In der Schleife, die Aufträge für alle vorhandenen Märkte durchführt und ausstehende Aufträge überprüft werden, nämlich vom ersten (int i1) zum letzten (iampltOrdersTotal ()). In jeder Zyklus-Iteration wird die nächste Reihenfolge durch die Funktion OrderSelect () ausgewählt. Die Auswahl erfolgt aus einer Quelle geöffneter und ausstehender Aufträge (SELECTBYPOS). Wird die Auswahl erfolgreich durchgeführt (dh es gibt noch eine Bestellung im Terminal), so muss diese Reihenfolge und die Situation analysiert werden: ob die Bestellung für die Sicherheit eröffnet wird, an der die EA arbeitet, ob die Bestellung markt oder anhängig ist Es muss auch bei der Besetzung von Aufträgen berücksichtigt werden. In der Zeile: alle Aufträge für eine andere Sicherheit eröffnet werden eliminiert. Der Operator beendet die Iteration und die Merkmale eines solchen Auftrags werden nicht verarbeitet. Aber wenn der Auftrag für die Sicherheit geöffnet wird, an das Fenster, an dem die EA angeschlossen ist, wird es weiter analysiert. Wenn OrderType () den Wert mehr als 1 zurückgibt (siehe Typen von Trades), ist die ausgewählte Bestellung eine ausstehende. Aber in diesem Expert Advisor ist die Verwaltung von ausstehenden Aufträgen nicht vorgesehen. Es bedeutet, dass die Ausführung von start () beendet werden muss, da eine Konfliktsituation aufgetreten ist. In einem solchen Fall wird nach einer Meldung über die Operationsbeendigung start () die Ausführung durch den Operator zurückgesetzt. Wenn die letzte Überprüfung zeigte, dass die analysierte Bestellung eine Marktordnung ist, wird die Gesamtzahl der Aufträge für eine Sicherheit berechnet und analysiert. Für die ersten dieser Aufträge sind alle notwendigen Merkmale definiert. Wenn in der nächsten Iteration der Order Counter (Variable Total) die zweite Marktordnung findet, wird die Situation auch als Konflikt betrachtet, da die EA nicht mehr als eine Marktordnung verwalten kann. In einem solchen Fall wird die Start - () - Ausführung gestoppt, nachdem eine entsprechende Nachricht angezeigt wurde. Als Ergebnis der Auftragsabwicklung blockiert die Ausführung (wenn alle Schecks erfolgreich waren), behält die Variable Total ihren Nullwert bei, wenn es keine Marktaufträge gibt oder den Wert 1 erhält, wenn es eine Marktordnung für unsere Sicherheit gibt. Im letzteren Fall erhalten auch einige Variablen, die in Übereinstimmung mit den Auftragseigenschaften (Anzahl, Art, Eröffnungskurs, Stoppniveaus und Auftragswert) liegen, ihre Werte. Berechnen von Handelskriterien In der analysierten Beispieldefinition der Trading-Kriterien (Block 5-6) wird auf den Grundlagen der Differenz zwischen Moving Averages mit unterschiedlichen Perioden der Mittelung berechnet. Nach den akzeptierten Kriterien ist ein Diagramm bull-gerichtet, wenn der aktuelle Wert des MA mit kleinerer Periode größer ist als der Wert von MA mit größerer Periode, und die Differenz zwischen den Werten ist größer als ein bestimmter Wert. In einer Bärenbewegung ist MA mit kleinerer Periode niedriger als MA mit größerer Periode und die Differenz ist auch größer als ein bestimmter kritischer Wert. Bei den Blockanfangswerten von MAs mit Mittelungsperioden wird PeriodMA1 und PeriodMA2 berechnet. Die Bedeutung der Bedeutung eines Handelskriteriums wird über den Wert einer entsprechenden Variablen ausgedrückt. Variablen OpnB und Opns bezeichnen das Kriterium, das zum Öffnen von Kauf - und Verkaufsaufträgen, Variablen Cls und ClsS - zum Schließen auslöst. Wenn zum Beispiel ein Kriterium für das Öffnen von Buy nicht ausgelöst wurde, bleibt der Wert von OpnB falsch (bei der Variableninitialisierung gesetzt), wenn es ausgelöst hat, bekommt OpnB den Wert wahr. In diesem Fall stimmt das Kriterium für die Schließung des Verkaufs mit dem für die Eröffnung des Kaufs überein, das Kriterium für die Eröffnungsvereinbarung stimmt mit dem für das Schließen von Kauf überein. Die in diesem Beispiel akzeptierten Trading-Kriterien werden nur für Bildungszwecke verwendet und dürfen nicht als Leitfaden betrachtet werden, wenn sie auf einem realen Konto handeln. Schlussaufträge Es wurde früher geschrieben, dass dieser Sachverständige für den Betrieb nur mit einer Marktordnung für eine Sicherheit geöffnet ist, an welcher Fenster die EA angeschlossen ist. In dem Moment, in dem die Steuerung im Programm an den Auftragsschließungsblock übergeben wird, ist es sicher bekannt, dass es im laufenden Moment entweder keine Aufträge für die Sicherheit gibt oder es nur eine Marktordnung gibt. Thats, warum der Code in Aufträge Schließblock geschrieben wird, so dass nur eine Bestellung erfolgreich abgeschlossen werden kann. Dieser Block basiert auf der Endlosschleife, deren Körper aus zwei analogen Teilen besteht: eine zum Schließen eines Kaufauftrags, eine andere zum Schließen einer Verkaufsreihenfolge. Dabei wird hier zu dem Zweck verwendet, dass es im Falle eines Handelsbetriebsfehlers noch einmal wiederholt werden konnte. In der Kopfzeile des ersten Betreibers wird die Bedingung zum Schließen eines Buy-Order berechnet (Sell-Aufträge werden in analoger Weise geschlossen). Wenn die Art eines früheren geöffneten Auftrags dem Kauf entspricht (siehe Handelsarten) und das Zeichen für die Schließung von Kauf ist relevant, wird die Kontrolle an die Stelle des Betreibers übergeben, bei dem ein Antrag auf Schließung besteht. Als Auftragsabschlusspreis in der Funktion OrderClose () wird der Wert eines zweiseitigen Zitats, das der Auftragsart entspricht, angegeben (siehe Anforderung und Einschränkungen im Handel). Wenn ein Handelsvorgang erfolgreich ausgeführt wird, wird nach einer Meldung über den Auftragsabschluss der Strom angezeigt, während die Iteration gestoppt wird und die Ausführung des Auftragsschließungsblocks beendet ist. Wenn der Vorgang jedoch fehlschlägt, wird die benutzerdefinierte Funktion zur Bearbeitungsfehler FunError () aufgerufen (Block 10-11). Verarbeitungsfehler Als übergebener Parameter in FunError () wird der letzte von GetLastError () berechnete Fehlercode verwendet. Abhängig vom Fehlercode gibt FunError () 1 zurück, wenn der Fehler nicht kritisch ist und der Vorgang wiederholt werden kann und 0, wenn der Fehler kritisch ist. Kritische Fehler werden in zwei Typen unterteilt, die nach dem Ausführen einer Programmausführung fortgesetzt werden können (z. B. ein gemeinsamer Fehler) und diejenigen, nach denen die Ausführung von Handelsoperationen gestoppt werden muss (z. B. gesperrtes Konto). Wenn nach einer erfolglosen Handelsoperation die benutzerdefinierte Funktion 1 zurückgibt, wird der Strom bei Iteration beendet und bei der nächsten Iteration wird ein weiterer Versuch unternommen, den Vorgang auszuführen - um die Bestellung zu schließen. Wenn die Funktion 0 zurückgibt, wird die aktuelle start () - Ausführung gestoppt. Beim nächsten Tickstart () wird das Client-Terminal wieder gestartet und wenn die Bedingungen für den Auftragsabschluss beibehalten werden, wird ein weiterer Versuch, die Bestellung zu schließen, gemacht. Wenn bei der Fehlerbearbeitung festgestellt wird, dass eine weitere Programmausführung sinnlos ist (zB das Programm bei einer alten Clientterminalversion arbeitet), wird beim nächsten Start die Ausführung des Sonderfunktionsstarts () im Block der Vorverarbeitung beendet Analysieren den Wert der Variablen Arbeit. Berechnung der Anzahl der Lose für neue Aufträge Die Menge der Lose kann nach einer Benutzereinstellung nach einer der beiden Varianten berechnet werden. Die erste Variante ist ein bestimmter konstanter Wert, der von einem Benutzer eingerichtet wird. Nach der zweiten Variante wird die Menge der Lose auf der Grundlage einer Summe berechnet, die einem bestimmten Prozentsatz entspricht (der von einem Benutzer eingestellt ist) einer freien Marge. Am Anfang des Blocks der Festlegung der Menge der Lose für neue Aufträge (Block 7-8) werden notwendige Werte einiger Variablen berechnet - minimal zulässige Menge an Lose und Schritt der Losänderung, die von einem Makler, freie Marge und Preis von Eine Menge für die Sicherheit. In diesem Beispiel ist folgendes vorgesehen. Wenn ein Benutzer einen bestimmten Wert ungleich Null der externen Variablen Lts, z. B. 0,5, eingerichtet hat, wird er als die Menge an Lots Lts akzeptiert, wenn eine Handelsanforderung zum Öffnen einer Bestellung gebildet wird. Wenn 0 zu Lts zugeordnet ist, wird die Anzahl der Lose Lts auf der Basis der Variablen Prots (Prozentsatz), freie Marge und Bedingungen, die von einem Broker eingerichtet werden, definiert. Nachdem Lts berechnet ist, wird eine Prüfung durchgeführt. Wenn dieser Wert niedriger als der minimal zulässige Wert ist, wird der minimale zulässige Wert akzeptiert. Aber wenn der freie Rand nicht ausreicht, wird nach einer entsprechenden Meldung die start () execution beendet. Eröffnungsaufträge Der Block der Eröffnungsaufträge (Block 8-9) wie der Eröffnungsbefehl ist eine Endlosschleife. In der Kopfzeile des ersten Betreibers werden die Bedingungen für die Eröffnung eines Buy-Order berechnet: Wenn es keine Aufträge für die Sicherheit gibt (Variable Total ist gleich 0) und das Vorzeichen zum Öffnen eines Buy-Order ist relevant (OpnB ist wahr), Kontrolle Wird an den Bediener übergeben, um eine Bestellung zu eröffnen. In einem solchen Fall werden die Preise für die Stoppniveaus berechnet. Die Werte der Stopp-Stufen werden zunächst von einem Benutzer in den externen Variablen StopLoss und TakeProfit gesetzt. Im allgemeinen Fall kann ein Benutzer Werte für diese Parameter kleiner einstellen, die ein Broker erlaubt. Neben einem Makler kann die minimal erlaubte Distanz jederzeit ändern (es ist oft bei starken Marktbewegungen, zum Beispiel vor einer wichtigen Pressemitteilung). Das ist, warum vor jeder Auftragsöffnung Stopp-Levels unter Berücksichtigung von Werten, die auf einen Benutzer gesetzt sind, und dem minimal zulässigen Wert, der von einem Broker eingerichtet wurde, berechnet werden muss. Für die Berechnung der Stopp-Stufen wird die benutzerdefinierte Funktion NewStop () als übergebener Parameter verwendet. Der von einem Benutzer eingestellte Stopp-Level-Wert wird verwendet. In NewStop () wird zuerst die aktuelle minimal zulässige Distanz berechnet. Wenn der von einem Benutzer eingestellte Wert einem Broker entspricht, wird dieser Wert zurückgegeben. Wenn es kleiner als der zulässige Wert ist, wird der von einem Makler zulässige Wert verwendet. Die Preise der Stoppanforderungen werden aus dem entsprechenden zweiseitigen Zitat berechnet (siehe Anforderung und Einschränkungen bei der Herstellung von Trades). Mit der Funktion OrderSend () wird eine Handelsanfrage zur Eröffnung eines Auftrags gebildet. Für die Berechnung des Auftragsöffnungspreises und der Preise für Stoppanforderungen werden die der Auftragsart entsprechenden zweiseitigen Zitatwerte verwendet. Wenn ein Handelsvorgang erfolgreich war (d. h. ein Server hat die Nummer eines geöffneten Auftrags zurückgegeben), nachdem eine Nachricht über eine erfolgreiche Auftragsöffnung angezeigt wurde. Start () Ausführung ist beendet. Wenn eine Bestellung nicht geöffnet wurde und das Client-Terminal einen Fehler zurückgab, wird der Fehler nach dem zuvor beschriebenen Algorithmus verarbeitet. Einige Code-Besonderheiten Der analysierte Expert Advisor-Code orientiert sich an der Umsetzung einer bestimmten Strategie. Beachten Sie, einige Programmzeilen enthalten Variablen und Berechnungen, die geändert werden würden, wenn die Strategie geändert wurde. Zum Beispiel, nach der akzeptierten Strategie der Expert Advisor entwickelt, um nur mit einem Auftrag zu arbeiten. Dies erlaubte es, die Variable Ticket sowohl für die Identifizierung einer Schlussauftragsnummer (im Block des Verschlusses 6-7) als auch für die Identifizierung eines Erfolgs einer Handelsbetriebsausführung beim Öffnen einer Bestellung (im Block der Öffnung 8-9) zu verwenden ). In diesem Fall ist eine solche Lösung akzeptabel. Wenn wir jedoch den analysierten Code als Grundlage für die Implementierung einer anderen Strategie (z. B. entgegengesetzte Aufträge) verwenden, müssen wir eine oder mehrere Variablen einführen, um die Anzahl der geöffneten Aufträge erkennen und den Erfolg des Handelsgeschäftes identifizieren zu können. In weiteren Strategieänderungen müssen wir die Programmzeilen wechseln, die einen Teil der in der Quellstrategie enthaltenen Logik enthalten. Nämlich im Auftragsbuchungsblock müssen wir den Programmbetrieb nicht beenden, wenn es mehrere offene Aufträge für eine Sicherheit gibt. Außerdem werden sich auch die Bedingungen für das Öffnen und Schließen von Aufträgen ändern. Dies führt dazu, dass sich der Code in Blöcken von Öffnungs - und Schließaufträgen ändert. Auf der Grundlage dieser Analyse können wir leicht feststellen, dass der beschriebene einfache Expert Advisor nicht perfekt ist. 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. The Moving Average Cross Expert Advisor The moving average cross is one of the most popular basic trading strategies. It uses two or more moving averages of different periods to determine the direction of the trend. When the faster moving average(s) is above the slower moving average(s), a long position is opened, and vice versa for a short position. The moving average cross excels during long, sustained trends as a mediumlong-range trading strategy. Strategies based on the moving average cross have always been frequently requested by our clients, and thats why we offer the moving average cross expert advisor. You can now purchase this popular expert advisor for over 50 off Formerly 45, the deluxe Moving Average Cross expert advisor is now only 19.95 Up to 3 Moving Average Lines . Use two moving averages, or add a third to filter out long-term trends. Moving Average Types . Simple . Exponential . Smoothed or Linear Weighted . Price Data . Choose from Close, Open, High, Low, Median, Typical or Weighted Close . Shift . Shift the moving average lines forward or backward. Multiple Timeframes . Each moving average can be set to any chart timeframe. Money Management - The lot size is automatically calculated so that the maximum risk per trade is limited to a percentage of your equity. Trailing Stop Break Even Stop - Automatically adjust the stop loss as the trade moves into profit. Set minimum profit levels, step trailing stop in increments and more Daily Trade Timer - Limit your intraday trading to the hours that the market is most active. You can optionally close all open orders at the end of the day. Manual Order Control - Place manual orders on your chart with a specified trade comment, and the MA Cross EA will trail the stop loss and close the order automatically on an opposite cross. Run Once Per Bar or Every Tick . Choose how often to check order opening and closing conditions. You can trade on every tick, or only on the close of each bar. Close On Cross - Close the currently opened position on a moving average cross in the opposite direction. If disabled, orders will only close on a stop loss or manually. Robust . Full error handling and notification, retry on requotes, and much more. Fully compatible with ECN and 5-digit brokers. Alerts - Choose between audio alerts, the built-in alert dialog, email alerts or notifications sent to your smartphone. You can purchase the Moving Average Cross EA instantly for only 19.95Adjustable MA Expert Advisor Adjustable MA Forex expert advisor is a customizable moving average EA that offers flexible tuning of the traditional 2-MA cross strategy. You can set different MA periods, MA types, minimum difference, stop-loss, take-profit, trailing stop and slippage. This expert advisor always opens position on cross and closes it on the next cross. The back-test of the Adjustable MA MetaTrader expert advisor has shown 12.2 profit with 12.6 maximum drawdown during a 6-year period. The used position39s volume was set to 0.1 standard lots. The EA made 647 trades, of which 56.41 were profitable. The default settings were used in this back-test on EURUSD M5 chart. As you can see, the results are not very good. It is not recommended to use this EA on live account. What are the stop-loss and take-profit used by this EA By default it uses fixed stop-loss at 100 pips and take-profit at 70 pips. The trailing stop is turned off by default. How often does it trade On 5-minute EURUSD chart (the back-test settings) this EA will trade once every day on average. Any settings other than default can be used The limited forward test (which should be more reliable than a back-test) on AUDUSD M5 chart showed some profitable set-up for this expert advisor. These parameters should be changed from default: StopLoss mdash 30 TakeProfit mdash 50 TrailingStop mdash 20 Period1 mdash 50 Period2 mdash 10 This EA is ECN-compatible. You must set ECNMode input parameter to true in order to enable ECN-compatibility for this expert advisor. Otherwise, you will most likely be seeing OrderSend Error 130 messages when EA will be trying to open positions. This is because, if you are trading with an ECN broker (with market execution for orders), you cannot set SLTP on position opening. You have to open a position first without SLTP and only then modify it, adding stop-loss andor take-profit level. Discussion Warning Before you ask basic questions regarding installation of the expert advisors, please, read this MT4 Expert Advisors Tutorial to get the elementary knowledge on handling them. Do you have your own trading results or any other remarks regarding this expert advisor Discuss Adjustable MA with other traders and MQL programmers on the experts forums. Stochastic Oscillator EA v2 About the Stochastic Oscillator The Stochastic Oscillator Indicator was developed in the late 1950s by Dr. George Lane. The term stochastic refers to the point of a current price in relation to its price range over a period of time. The stochastic oscillator show 2 lines (Main and Signal line) and s support and resistance level. He is included in Metatrader. The default settings are: K 5, D 3 Slowing 3. Trade logic of this forex robot The Stochastic Oscillator EA is a forex robot based on the Stochastic Oscillator with its Main Line, Signal Line and the Support and Resistance levels. He included 5 Stochastic based entry and 3 exit strategies. Crossover in OversoldOverbought Level: Trades if the Main and Signal lines crosses above or below the Support and Resistance levels. Main Line BreakIn: Opens a long trade if the Main Line breaks into the above Level. Vice versa for short trade. Main Line BreakOut: Opens a long trade if the Main Line breaks out of the above Level. Vice versa for short trade. Signal Line BreakIn: Opens a long trade if the Signal Line breaks into the above Level. Vice versa for short trade. Signal Line BreakOut: Opens a long trade if the Signal Line breaks out of the above Level. Vice versa for short trade. Exit On Crossover: Closes the trade on a crossover of the main and signal lines. Main Line BreakThrough: Closes the trade if the Main Line crosses the predefined level. Signal Line BreakThrough: Closes the trade if the Signal Line crosses the predefined level. Stochastic Level Mode If you set the Stochastic Level Mode to 8220Use only buy level8221 the Sell Entry Level and Sell Exit Levels will be calculated based on the Buy Levels like this: Sell Entry Level 100-Buy Entry Level. Sell Exit Level 100-Sell Entry Level. Included functions All versions have variable Magic Number, Take Profit, Stop Loss, Lot Size and Slippage. Does the inverse strategy initiate trades on the same cross, i. e. crossing support from above or resistance from below. I bought your EA but am looking for an inverse stoch strategy that initiates a sell when stoch crosses down from above resistance and initates a buy when it crosses up from below support. Any way to use this EA to do that I would also like to add an MACD filter ( only when buying, 8211 only when selling) This is the closest I8217ve gotten to any EA that would do this for me. Could I pay you to Mod it for these specs The inverse strategy works exactly the same way as the normal strategy does, but it only opens a sell trade instaed of a buy trade and a buy instaed of a sell. I am not planning to add a MACD filter. But I can make a modification for you. Please contact me here .


Comments

Popular Posts