Monday, 30 October 2017

Einfach Gleitender Durchschnitt Ea Mq4


MetaTrader 4 - Experts Moving Average - Experte für MetaTrader 4 Der Moving Average Experte für die Bildung von Handelssignalen verwendet einen gleitenden Durchschnitt. Das Öffnen und Schließen von Positionen erfolgt, wenn der gleitende Durchschnitt den Preis an der kürzlich geformten Bar erfüllt (Barindex entspricht 1). Die Losgröße wird nach einem speziellen Algorithmus optimiert. Der Fachberater analysiert die Übereinstimmung des gleitenden Durchschnitts und des Marktpreisplans. Die Überprüfung erfolgt durch die Funktion CheckForOpen (). Wenn der gleitende Durchschnitt die Bar so trifft, dass der erstere höher als der offene Preis ist, aber niedriger als der Preis ist, wird die KAUF-Position eröffnet. Wenn der gleitende Durchschnitt die Bar so trifft, dass der erstere niedriger ist als der offene Preis, aber höher als der Preis, wird die SELL-Position eröffnet. Money Management, das im Experten verwendet wird, ist sehr einfach, aber effektiv: Die Kontrolle über jedes Positionsvolumen wird in Abhängigkeit von den bisherigen Transaktionsergebnissen durchgeführt. Dieser Algorithmus wird durch die Funktion LotsOptimized () implementiert. Die grundsätzliche Losgröße wird auf Basis des maximal zulässigen Risikos berechnet: Der Parameter MaximumRisk zeigt den Grundrisikoprozentsatz für jede Transaktion an. Es besitzt gewöhnlich einen Wert zwischen 0,01 (1) und 1 (100). Zum Beispiel, wenn freie Marge (AccountFreeMargin) entspricht 20.500 und Regeln der Kapitalverwaltung verschreiben, um das Risiko von 2 zu verwenden, wird die grundlegende Losgröße 20500 0,02 1000 0,41 machen. Es ist sehr wichtig, über die Losgrößengenauigkeit zu kontrollieren und das Ergebnis mit den zulässigen Werten zu normalisieren. Normalerweise sind Bruchstücke mit einem Schritt von 0,1 erlaubt. Eine Transaktion mit einem Volumen von 0,41 wird nicht durchgeführt. Zur Normalisierung wird die Funktion NormalizeDouble () mit Genauigkeit bis zu 1 Zeichen nach dem Punkt verwendet. Daraus ergibt sich das Grundgehalt von 0,4. Die grundsätzliche Losberechnung auf Basis der freien Marge ermöglicht es, die Betriebsvolumina je nach Handelserfolg zu erhöhen, d. H. Mit dem Reinvestieren zu handeln. Dies ist der grundlegende Mechanismus mit obligatorischem Kapitalmanagement für die Erhöhung der Handelsdurchdringung. DecreaseFactor ist das Ausmaß, in dem die Losgröße nach dem unrentablen Handel reduziert wird. Normalwerte sind 2,3,4,5. Wenn die vorangegangenen Transaktionen unrentabel waren, werden die nachfolgenden Volumina um den Faktor DecreaseFactor abnehmen, um durch die unrentable Periode zu warten. Dies ist der Hauptfaktor im Kapitalmanagement-Algorithmus. Die Idee ist ganz einfach: Wenn der Handel erfolgreich steigt, arbeitet der Experte mit dem Grundsatz, der maximalen Gewinn macht. Nach der ersten unrentablen Transaktion wird der Experte die Geschwindigkeit reduzieren, bis eine neue positive Transaktion erfolgt. Der Algorithmus erlaubt es, die Geschwindigkeit zu reduzieren, um es zu tun, man muss DecreaseFactor 0 angeben. Die Anzahl der letzten aufeinanderfolgenden, unrentablen Transaktionen wird in der Handelsgeschichte berechnet. Das Basis-Los wird auf dieser Basis neu berechnet: So erlaubt der Algorithmus, das durch eine Reihe von unrentablen Transaktionen auftretende Risiko effektiv zu reduzieren. Die Losgröße wird zwingend auf die minimal zulässige Losgröße am Ende der Funktion überprüft Die bisher vorgenommenen Berechnungen können zu Los 0 führen: Der Experte ist vor allem für die Arbeit mit der täglichen Periode und im Testmodus gedacht - um zu engen Preisen zu arbeiten. Es wird nur bei der Eröffnung einer neuen Bar handeln, deshalb werden die Modi der Every-Tick-Modellierung nicht benötigt. Testing Ergebnisse sind in der Bericht dargestellt. Typisch können zwei gleitende Mittelwerte verwendet werden, um eine Forex-Strategie (EA für MT4) mit diesen Regeln zu erstellen: Kaufen, wenn die kurze Periode gleitenden Durchschnitt ist über dem langen Zeitraum gleitenden Durchschnitt Verkaufen, wenn die lange Zeit in Bewegung Durchschnitt ist oberhalb der kurzen Periode gleitender Durchschnitt Auf der folgenden Grafik von MetaTrader Terminal ist die gelbe Linie die kurze Periode gleitenden Durchschnitt (Periode9) und die rote Linie ist die lange Periode gleitenden Durchschnitt (Zeitraum 18). Analysieren Sie den Graphen, können wir die Handelsregeln oder Forex-Signale umschreiben als: Kaufen, wenn die gelbe Linie über der roten Linie ist Verkaufen Sie, wenn die gelbe Linie unter der roten Linie ist Statt einer langjährigen Kodierung dieser Forex-Strategie mit Molanis Strategy Builder Sie können ein Handelsdiagramm erstellen, das die gleitende durchschnittliche Strategie in Minuten darstellt. Einfach per Drag & Drop zwei Technical Analysis-Blöcke, ein Buy-Block und ein 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 könnte es als lesen: Kaufen Sie 1 Los EURCAD (mit einem 100 Pip Take Profit und 50 Pip Stop Loss), wenn die kurze Periode gleitenden Durchschnitt (9) über dem langen Zeitraum gleitenden Durchschnitt (18) ist. Denken Sie daran, das Handelsdiagramm in entgegengesetzter Richtung zum Handelsfluss zu lesen. Der richtige Handelspfad könnte als gelesen werden: Verkaufen Sie 1 Los EURCAD (mit einem 100 Pip Take Profit und 50 Pip Stop Loss), wenn die lange Periode gleitenden Durchschnitt (18) über dem kurzen Zeitraum gleitenden Durchschnitt (9) liegt. Erzeugen des MQL-Codes für MetaTrader mit nur einem Klick Im Trading-Diagramm-Menü klicken Sie auf MMS4-Code generieren, um das MQL4-Code-Fenster zu erhalten. Mit Molanis Strategy Builder können Sie Ihren Fachberater direkt mit MetaTrader öffnen oder als MQ4-Datei speichern. Verpassen Sie nicht unsere Video-Tutorial onSimple 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 weitergegeben. 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. On the next tick start() will be started by the client terminal again and if conditions for order closing are preserved, another attempt to close the order will be made. If during error processing it is found out that further program execution is senseless (for example the program operates on an old client terminal version) during the next start the execution of the special function start() will be terminated in the block of preliminary processing when analyzing the value of the variable Work. Calculating Amount of Lots for New Orders Amount of lots can be calculated in accordance with a users settings following one of the two variants. The first variant is a certain constant value set up by a user. According to the second variant the amount of lots is calculated on the basis of a sum equal to a certain percentage (set by a user) of a free margin. At the beginning of the block of defining the amount of lots for new orders (block 7-8) necessary values of some variables are calculated - minimal allowed amount of lots and step of lot change set up by a broker, free margin and price of one lot for the security. In this example the following is provided. If a user has set up a certain non-zero value of the external variable Lts, for example 0.5, it is accepted as the amount of lots Lts when a trade request to open an order is formed. If 0 is assigned to Lts, the number of lots Lts is defined on the basis of the variable Prots (percentage), free margin and conditions set up by a broker. After Lts is calculated, a check is conducted. If this value is lower than the minimal allowed value, the minimal allowed value is accepted. but if free margin is not enough, after a corresponding message the start() execution is terminated. Opening Orders The block of opening orders (block 8-9) like the bloke of opening orders is an infinite loop while. In the header of the first operator if conditions for opening a Buy order are calculated: if there are no orders for the security (variable Total is equal to 0) and the sign for opening a Buy order is relevant (OpnB is true ), control is passed to if operator body for opening an order. In such a case after rates are refreshed prices for stop levels are calculated. Values of stop levels are initially set by a user in external variables StopLoss and TakeProfit. In a general case a user can set values for this parameters smaller that a broker allows. Besides a broker may change the minimal allowed distance at any moment (it is an often case at strong market movements, for example, before important news release). Thats why before each order opening stop levels must be calculate taking into account values set bu a user and the minimal allowed value set up by a broker. For calculating stop levels the user-defined function NewStop() is used as a passed parameter the stop level value set by a user is used. In NewStop() first the current minimal allowed distance is calculated. If the value set by a user corresponds to a brokers requirements, this value is returned. If it is smaller than the allowed value, the value allowed by a broker is used. Prices of stop requests are calculated from the corresponding two-sided quote (see Requirements and Limitations in Making Trades ). A trade request to open an order is formed using the function OrderSend(). For the calculation of order opening price and prices of stop requests the two-sided quote values corresponding to the order type are used. If a trade operation was successful (i. e. a server returned the number of an opened order) after a message about a successful order opening is shown. start() execution is finished. If an order was not opened and the client terminal returned an error, the error is processed according to the algorithm described earlier. Some Code Peculiarities The analyzed Expert Advisor code is oriented to the implementation of a certain strategy. Note, some program lines contain variables and calculations that would be changed, if the strategy were changed. For example, according to the accepted strategy the Expert Advisor is developed to work only with one order. This allowed to use the variable Ticket both for the identification of a closing order number (in block of closing 6-7) and for the identification of a success of a trade operation execution when opening an order (in the block of opening 8-9). In this case such a solution is acceptable. However, if we take the analyzed code as the basis for the implementation of another strategy (for example allow opposite orders) we will have to introduce one or several variables to be able to recognize numbers of opened orders and identify the success of trade operations. 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. EA Moving Average And if you use the colors to make the EA Ex: when the blue line crossing over the red line, close buy open sell. When the blue line crossing below the red line, close sell open buy . If it works. Please, send me a copy. rodrigokaus: We wanna EA with the determined parameters: 1 - TO DEVELOP EA OPENS The ORDERS CORRECTLY Thus The MAIN DIRECTION IS IDENTIFIED WHEN The SHORT MOVING AVERAGE CROSSES WITH the LONG One In The HOURLY DETERMINED ONES. 2 - LOTS, TRAILLING STOP, STOP LOSS And TAKE PROFIT FUNCTIONING CORRECTLY 3 - CLOSED EA FOR DETERMINED PAIR AND SCHEDULE (WITH POSSIBILITY OF ALTERATION FOR CHANGE) Already, I tested some versions of EAs of crossing of moving averages, including EMA, EMACROSS, LSMA, etc, but none of them opens the positions correctly when the short average crosses the long average. I send the chart to see the correct momento to the exatly moment of EA OPEN and CLOSE the positions. Couse anybody help me, I thank this

No comments:

Post a Comment