Forex 80 20 Strategie


80-20 Regel Die 80-20 Regel Die 80-20 Regel ist eine Faustregel, die besagt, dass 80 der Ergebnisse 20 von allen Ursachen für ein gegebenes Ereignis zugeschrieben werden können. Im Geschäft wird die 80-20 oft verwendet, um darauf hinzuweisen, dass 80 eines Unternehmens Umsatz von 20 seiner gesamten Kunden generiert wird. Daher wird die Regel dazu verwendet, den Führungskräften zu helfen, zu identifizieren und zu bestimmen, welche Betriebsfaktoren am wichtigsten sind und welche die größte Aufmerksamkeit auf der Grundlage einer effizienten Nutzung der Ressourcen erhalten sollten. Laden des Players. BREAKING DOWN 80-20 Regel Die 80-20 Regel ist auch als Pareto-Prinzip bekannt. Das Prinzip der Faktor sparsity und das Gesetz der Lebenswichtigen. In ihrem Kern ist die 80-20-Regel eine statistische Verteilung von Daten, die besagt, dass 80 eines spezifischen Ereignisses durch 20 der gesamten Beobachtungen erklärt werden können. Die 80-20-Regel wurde zuerst vom italienischen Ökonomen Vilfredo Pareto eingeführt, der 1906 beobachtete, dass 80 von Italys Land von 20 seiner Bevölkerung kontrolliert wurden. Von dort wurde es von Joseph Juran, ein 20. Jahrhundert Figur in der Studie der Management-Techniken und Grundsätze entwickelt. Jurin nahm die Regel und wandte sie auf eine Reihe von verschiedenen Facetten der Wirtschaft und der Wirtschaft. Es wird nun verwendet, um fast jede Art von Ausgang in der realen Welt zu beschreiben. Reale Welt Beispiel der 80-20-Regel Die 80-20-Regel in der Ökonomie z. B. verweist auf die Tatsache, dass 80 eines Landesvermögens in der Regel von 20 seiner Bevölkerung kontrolliert wird, obwohl dies manchmal durch den Gini-Index erklärt werden kann. Nigeria wurde am 22. Juni 2016 gefunden, diese genaue Verteilung des Vermögens innerhalb der Landesgrenzen zu haben. Das Mindestjahreseinkommen, das benötigt wird, um ein Leben in Nigeria zu erhalten, war 1.000 am 22. Juni 2016, doch mehr als 74 der Bevölkerung lebten unterhalb dieses Armutsniveaus. Diese Verteilung kam, nachdem die Landbevölkerung um 12 angestiegen war, während ihr BIP von 2010 bis 2014 um 54 anstieg. Allerdings war die Zuweisung des gestiegenen Vermögens nicht gleichmäßig, und es verschärfte die Einkommensungleichheit und damit das Pareto-Prinzip. Praktische Anwendung der 80-20 Regel Die 80-20 Regel wird am häufigsten für die Analyse von Vertrieb und Marketing verwendet. Wenn ein Unternehmen seine höchstverzehrenden Kunden identifizieren kann, kann es effektiv auf sie vermarkten, um bestehende Kunden zu behalten und ähnliche Verbraucher zu erwerben. Daher sollten Unternehmen sezieren ihre Einnahmen und verstehen, wer macht ihre Top 20 der Kunden. Von dort wurde festgestellt, dass die Top 4 eines Kundenstammes 64 des Gesamtumsatzes ausmachen, was bedeutet, dass je genauer ein Unternehmen in seiner Analyse erhalten kann, desto genauer wird das Verständnis seiner Kunden. Dies ermöglicht es Unternehmen, gezielte Marketing-Kampagnen, die darauf abzielen, mit den meisten einflussreichen Verbraucher zu starten. FOREX Strategien Forex-Strategie, einfache Strategie, Forex Trading-Strategie, Forex Scalping Forex-Strategie 80-20 8212 eine weitere sehr einfache und sehr interessante Strategie Forex Linda Raschke Zuvor sahen wir auf 2 ihrer Strategie: Schildkrötensuppe, Schildkrötensuppe plus eins), in der der Handel nur auf der Tagesstrecke (D1) durchgeführt wird und die Handelssignale nur während des 1. Handelstages sind. Die Untersuchung der Muster der Finanzmärkte, wurde festgestellt, dass, wenn der Preis auf dem Markt schließt am oberen oder unteren 10 -20 seiner täglichen Reichweite, dann gibt es eine Möglichkeit, und es ist 80 -90, am nächsten Morgen, der Preis wird Weiterhin in die gleiche Richtung zu bewegen (dh in Richtung der Schließung Kerzen), aber schließlich der Preis schließt sich über oder unter dieser Kerze in nur 50 Fällen. Dass eine bestimmte Tatsache (eine Chance, sich in der Mitte des 2. Tages nach dem Ende der 1. Tag Kerzen), und erlaubt 80-20 Strategie existieren und beliebt in den Finanzmärkten. Also, let8217s sehen, wie Angebote in Forex Strategy 80-20 gemacht werden. Ein Beispiel für die Transaktion auf den Kauf. Angenommen, wir öffnen heute ein Handels-Terminal MetaTrader 4 und beachten Sie, dass: 1) Yesterday8217s tägliche Kerze entdeckt wurde in den oberen 20 ihrer täglichen Reichweite und schloss in den unteren 20 ihrer täglichen Reichweite. Dh Wenn die tägliche Kerze in 5 Teile unterteilt, ist der Eröffnungspreis von gestern8217s täglich Kerze in der oberen 1 5 einer geschlossenen Kerze. Und der Schlusskurs ist unten 1 5 der geschlossenen Tageskerzen. Abbildung 1. Dedizierte baissige Kerze wurde in 1 5 des oberen Bereichs entdeckt und schloss bei 1 5 seines unteren Bereichs 2) Heute8217s täglich Kerze öffnet und der Preis auf dem Markt ging in die gleiche Richtung wie das Ende der vorherigen täglichen Kerze 8212 Dh für den Verkauf, vermutlich für mindestens 10-15 Punkte.





3) in diesem Moment, wenn der Preis bereits unterhalb gestern8217s niedrig ist und wir haben Clearance platziert werden, bevorstehende Bestellung platziert werden, setzen wir die ausstehende Bestellung, um den Typ kaufen Stop kaufen bei yesterday8217s niedrigen Preis Abbildung 2. Dies ist die gleiche Kerze wie in Abbildung 1, nur das stündliche Intervall. Setzen Sie die ausstehende Bestellung zu einem Zeitpunkt zu kaufen, wenn der Preis der 2. Stunde Kerze fällt unterhalb gestern8217s niedrig. 4) Nach der Eröffnung der Handelspositionen im Kauf, werden wir eine Sicherheits-Stop-Loss-Aufträge unter ein paar Punkte (3-5) segodneshnego Minimum zu etablieren. 5) Als nächstes verwenden Sie einen nachlaufenden Anschlag (Universal-Endanschlag, der Standard in Metatrader 4 oder einen nachlaufenden Anschlag auf dem ersten Absatz), um Gewinne zu sperren und unseren Stop-Loss in einer sicheren Distanz zu festigen, die Sie für sich selbst definieren Auf das gewählte Währungspaar und die Volatilität im Devisenmarkt. Zum Beispiel, wenn die Menge der täglichen Kerzen 100-200 Punkte und die nachfolgende Haltestelle sollte in einem Abstand von 50-70-100 Punkten platziert werden. Kerze 50-70 Punkte 8212 Tryling-Stop: 25-30 Punkte. 6) Wenn Sie es vorziehen, können Sie ein Gewinnziel in einem Abstand von mindestens 3,2-fachen des ursprünglichen Stop-Loss (wie von unserem Money Management Forex erforderlich) setzen. Oder Rekordgewinne auf den wichtigen Fibonacci-Levels. Gebaut von der ersten Kerze (38,2, 61,8) 7) Oder Sie können einfach die Position der Null-Ebene neu anordnen. Sobald Sie sehen, passen und lassen Sie das Geschäft bis zum Ende des Handelstages, und dann schauen, um es zu schließen oder offen zu lassen. Aber ich persönlich glaube, dass es besser ist, einen schleppenden Stop zu verwenden, um Gewinne zu sperren. Für Transaktionen auf Verkauf 8212 die Regeln der gegenüberliegenden Abbildung 3. Vystalyaem ausstehende Bestellung zu verkaufen Sell Stop, wenn der Preis brach gestern makismum. Stop-Verlust ist 10-15 Punkte höher als dieses Maximum, weil der Preis ist nicht zu weit weg von ihm und drehte sich um. Hinweis: Die Transaktionen in dieser Strategie sind nicht so üblich, aber wenn Sie die Gesetze von mehreren Währungspaaren zu beobachten, wird die Wahrscheinlichkeit der Bedingungen und der Markteintritt wird oben durch diese Strategie, Forex-Handel können Sie kaufen Hinweis: Wenn Sie Möchten Sie Updates erhalten Expert Advisor - LEAVE positives Feedback in der Filiale Plati. ru ohne Angabe von E-Mails im Körper der Bewertungen E-Mail bitte auf der Zahlungsseite 8212 angeben, die angibt, wo die Ware geliefert wird Vorbehaltlich strikter Einhaltung von Regeln Der Forex-Strategie 80-20, erhalten wir ungefähr die folgenden Handelsergebnisse (Testergebnisse Adviser 80-20 Strategie): 1) Teststrategien forex 80-20 8212 EURUSD (D1) mit Expert Advisor 80-20 Strategie 2) Teststrategien forex 80-20 8212 EURJPY (D1) mit Expert Advisor 80-20 Strategie 3) Teststrategien forex 80-20 8212 USDCAD (D1) mit Expertenratgeber 80-20 StrategieMetaTrader 5 - Handelssysteme 80-20 Handelsstrategie Einleitung 80-20 ist ein Name einer der Handelsstrategien (TS), die im Buch "Street Smarts: High Probability Short-Term Trading Strategies" von Linda Raschke und Laurence Connors beschrieben sind. Ähnlich wie die in meinem vorherigen Artikel diskutierten Strategien. Die Autoren es dem Stadium zuzuschreiben, wenn der Preis die Bereichsgrenzen prüft. Es konzentriert sich auch auf den Gewinn von falschen Breakouts und Roll-Backs von den Grenzen. Aber diesmal analysieren wir die Kursbewegung auf einem deutlich kürzeren Historienintervall mit nur dem Vortag. Die Lebensdauer eines erhaltenen Signals ist auch relativ kurz, da das System für den Intraday-Handel bestimmt ist. Das erste Ziel des Artikels ist es, die Entwicklung der 80-20 Trading-Strategie Signal-Modul mit MQL5 Sprache zu beschreiben. Dann werden wir dieses Modul mit der leicht veränderten Version des grundlegenden Handelsroboters verbinden, der im vorherigen Artikel der Serie entwickelt wurde. Außerdem werden wir das gleiche Modul für die Entwicklung eines Indikators für den manuellen Handel verwenden. Wie bereits erwähnt, zielt der in der Artikelserie vorgesehene Code in erster Linie auf leicht fortgeschrittene Programmierer. Daher ist der Code, neben seinem Hauptziel, entworfen, um von der prozeduralen Programmierung zu der objektorientierten zu bewegen. Der Code enthält keine Klassen. Stattdessen wird es vollständig umzusetzen Strukturen, die einfacher zu meistern sind. Ein weiteres Ziel des Artikels ist es, Werkzeuge zu entwickeln, die es uns erlauben, zu überprüfen, ob die Strategie heute noch lebensfähig ist, da Raschke und Connors das Marktverhalten am Ende des letzten Jahrhunderts bei der Schaffung des Marktes genutzt haben. Ein paar EA-Tests auf der Grundlage der aktuellen Historiendaten werden am Ende des Artikels präsentiert. 80-20 Handelssystem Die Autoren nennen George Taylors die Taylor Handelstechnik. Sowie Steve Moores arbeitet an der Computeranalyse von Futures-Märkten und Derek Gipsons Handelserfahrung als theoretische Grundlage für ihre eigene Arbeit. Das Wesen der Handelsstrategie kann wie folgt kurz beschrieben werden: Liegen die vorherigen Tage Open und Close an den gegenüberliegenden Tagesbereichsgebieten, so ist die Wahrscheinlichkeit einer Umkehrung in Richtung der vorherigen Tage sehr hoch. Die vorherigen Tage öffnen und schließen Preise sollten in der Nähe der Reichweite Grenzen zu finden. Die Stornierung sollte den aktuellen Tag beginnen (nicht vor dem letzten Tag Kerze geschlossen). Die Strategie Regeln für den Kauf sind wie folgt: 1. Stellen Sie sicher, dass der Markt in den oberen 20 eröffnet und schloss in den unteren 20 des täglichen Bereichs gestern 2. Warten bis heute Tief bricht die vorherigen Tage eine mindestens von 5 Zecken 3. Legen Sie einen Kauf Pending Order auf dem unteren Rand des yesterdays Bereich 4. Sobald die ausstehende Order triggers, setzen ihre anfänglichen StopLoss an den Tagen Low 5. Verwenden Sie nachlaufende Stop, um den erhaltenen Gewinn zu schützen Verkauf Eintrag Regeln sind ähnlich, aber die gestern Bar sollte Bullish sein, sollte ein Kaufauftrag an der oberen Grenze der Bar sein, während StopLoss auf dem heutigen High platziert werden sollte. Ein weiteres wichtiges Detail ist die Größe einer geschlossenen Tagesbar. Nach Linda Raschke, sollte es groß genug sein - mehr als die durchschnittliche Größe der täglichen Bars. Sie legt jedoch nicht fest, wie viele Historientage bei der Berechnung der durchschnittlichen täglichen Reichweite berücksichtigt werden sollten. Wir sollten auch bedenken, dass die TS ist ausschließlich für Intraday-Handel Beispiele in der Buch-M15-Charts gezeigt konzipiert. Der Signalblock und der Indikator, der ein Layout gemäß der Strategie bildet, werden nachfolgend beschrieben. Sie können auch sehen, ein paar Screenshots mit dem Indikator Betriebsergebnisse. Sie zeigen eindeutig Muster, die den Systemregeln und den mit den Mustern verknüpften Handelsebenen entsprechen. Die Musteranalyse sollte dazu führen, dass ein Kauf pending order. Entsprechende Handelsniveaus werden am M1-Zeitrahmen besser gesehen: Ähnliches Muster mit der entgegengesetzten Handelsrichtung auf M5-Zeitrahmen: Seine Handelsebenen (M1-Zeitrahmen): Signalmodul Ermöglicht das Hinzufügen einer Gewinnniveauberechnung, um das Hinzufügen neuer Optionen zu einem benutzerdefinierten TS zu veranschaulichen. Es gibt kein solches Niveau in der ursprünglichen Version, da nur ein nachlaufender Halt zum Schließen einer Position verwendet wird. Lets make Take Profit abhängig von der benutzerdefinierten minimalen Breakout-Ebene (TS8020ExtremumBreak) werden wir es durch die benutzerdefinierte Verhältnis TS8020TakeProfitRatio multiplizieren. Folgende Elemente der feGetEntrySignal-Signalbaugruppe werden benötigt: Stromsignalstatus, berechnete Ein - und Ausstiegsebenen (Stop Loss und Take Profit) sowie gestern Bereichsgrenzen. Alle Ebenen sind über Links auf die Variablen an die Funktion erhalten, während die Signale Status zurückgeben, die Liste der Optionen aus dem vorherigen Artikel verwendet: enum ENUMENTRYSIGNAL ENTRYBUY, kaufen ENTRYSELL Signal, Signal ENTRYNONE verkaufen, kein Signal ENTRYUNKNOWN Status nicht definiert ENUMENTRYSIGNAL feGetEntrySignal ( D1 Zweikanalmusteranalyse datetime tTime, aktuelle Zeit double amp dEntryLevel, Einstiegsebene (Verknüpfung zur Variablen) double amp dSL, StopLoss Level (Link zur Variable) double amp dTP, TakeProfit Level (Link zur Variablen) double amp dRangeHigh , High von den Mustern 1 st bar (link zur Variablen) double amp dRangeLow Low von den Mustern 1 st bar (Link zur Variablen) Um ein Signal zu erkennen, müssen wir die letzten beiden Balken des D1 Zeitrahmens analysieren. Beginnt von dem ersten, wenn es die TS-Kriterien nicht erfüllt, besteht keine Notwendigkeit, den zweiten Balken zu überprüfen. Es gibt zwei Kriterien: 1. Die Balkengröße (Differenz zwischen High und Low) sollte den Durchschnittswert für die letzten XX Tage überschreiten (durch die benutzerdefinierte Einstellung TS8020D1AveragePeriod festgelegt). 2. Die Bar Open und Close Level sollten sich an der gegenüberliegenden Stelle von 20 befinden Der Stabbereich Wenn diese Bedingungen erfüllt sind, sollten hohe und niedrige Preise für weitere Verwendung gespeichert werden. Da sich die ersten Balkenparameter nicht innerhalb des ganzen Tages ändern, gibt es keinen Sinn, sie bei jedem Funktionsaufruf zu überprüfen. Hier können sie speichern in statischen Variablen: benutzerdefinierte Einstellungen Eingang uint TS8020D1AveragePeriod 20 80-20: Anzahl der Tage für uint TS8020ExtremumBreak die durchschnittliche tägliche Bereichseingang Berechnen von 50 80-20: Minimum Ausbruch des Yesterdays extremum (in Punkten) statisch ENUMENTRYSIGNAL sePossibleSignal ENTRYUNKNOWN Muster zuerst bar Signalrichtung statische Doppelgrößen für das berechnete zwischen Speichern von Zecken sdEntryLevel 0, SDSL 0. SDTP 0, sdRangeHigh 0. sdRangeLow 0 check die Muster ersten Takt auf D1: if (sePossibleSignal ENTRYUNKNOWN) stLastD1Bar tCurrD1Bar 1. bar ändert sich nicht, diesen Tag durchschnittlich Tagesbereich Doppel dAverageBarRange fdAverageBarRange (TS8020D1AveragePeriod, PERIODD1. TTime) if (maRates 0.high maRates 0.low lt dAverageBarRange) 1 st bar ist nicht groß genug, um sePossibleSignal ENTRYNONE bedeutet kein Signal heute return (sePossibleSignal) Doppel d20Percents 0.2 (maRates 0.high MaRates 0.low) 20 der gestrigen Reichweite wenn ((bearish bar: maRates 0.open gt maRates 0.high d20Percents bar geöffnet in den oberen 20 ampamp maRates 0.close lt maRates 0.low d20Percents und geschlossen in den unteren 20) (Bullish: maRates 0.close gt maRates 0.high d20Percents bar geschlossen in den oberen 20 ampamp maRates 0.open lt maRates 0.low d20Percents und öffnete in den unteren 20)) 1 st bar entspricht den Bedingungen definieren todays trading Richtung für Die Muster 1. Stufe: sePossibleSignal maRates 0.open gt maRates 0.close. ENTRYBUY. ENTRYSELL Markteintrittsstufe: sdEntryLevel dEntryLevel sePossibleSignal ENTRYBUY. MaRates 0.low. maRates 0.high Muster 1 st Barserie Grenzen: sdRangeHigh dRangeHigh maRates 0.high sdRangeLow dRangeLow maRates 0.low sonst 1. bar öffnenschliessen Ebenen sePossibleSignal ENTRYNONE bedeutet kein Signal heute return (sePossibleSignal) Anzeige der Funktion zum Definieren der Bedingungen nicht übereinstimmen Durchschnitt bar Bereich innerhalb der angegebenen Anzahl von Bars auf dem angegebenen Zeitraum von der angegebenen Zeitfunktion beginnen: Doppel fdAverageBarRange (. Berechnen durchschnittliche bar Größe int iBarsLimit, wie viele Bars ENUMTIMEFRAMES eTF PERIODCURRENT berücksichtigen Zeitraum Datumzeit TTime WRONGVALUE Barren wenn die Berechnung zu starten) Doppel dAverageRange 0 Variable für Werte summiert if (iBarsLimit lt 1) return (dAverageRange) MqlRates maRates bar info Array aus dem angegebenen Geschichte Intervall erhalten bar info: if (TTime WRONGVALUE) TTime TimeCurrent () int iPriceBars CopyRates (Symbol eTF, TTime, iBarsLimit. , MaRates) if (iPriceBars WRONGVALUE) if (LogLevel gt LOGLEVELNONE) PrintFormat (s: Kopierschutz: Fehler u. FUNKTION. LetzteFehlerNr) return (dAverageRange) if (iPriceBars lt iBarsLimit) if (LogLevel gt LOGLEVELNONE) Printformat (s: CopyRates: kopiert u Stäbe u FUNCTION iPriceBars, iBarsLimit) Summe der Bereiche:.. Int iBar iPriceBars während (iBar-- gt 0 ) DAverageRange maountsiBar. high maRatesiBar. low Durchschnittlicher Wert: return (dAverageRange double (iPriceBars)) Es gibt nur ein Kriterium für die Muster zweiten (aktuellen) Barausbruch des yesterdays Bereichsgrenze sollte nicht kleiner sein als die in den Einstellungen TS8020ExtremumBreak). Sobald der Pegel erreicht ist, erscheint ein Signal für die Plazierung eines ausstehenden Auftrags: Überprüfen Sie die Muster 2. (aktueller) Balken auf D1: if (sePossibleSignal ENTRYBUY) sdSL dSL maPrüfungen 1.low StopLoss auf die heutigen High if (TS8020TakeProfitRatio gt 0 ) SDTP dTP dEntryLevel Punkt TS8020ExtremumBreak TS8020TakeProfitRatio Takeprofit return (ist der Ausbruch nach unten maRates 1.close lt maRates 0.low Punkt TS8020ExtremumBreak ENTRYBUY. ENTRYNONE) if (sePossibleSignal ENTRYSELL) SDSL dSL maRates 1.high Stoploss auf den heutigen Low if (TS8020TakeProfitRatio gesehen deutlich gt 0) SDTP dTP dEntryLevel Punkt TS8020ExtremumBreak TS8020TakeProfitRatio Takeprofit return (ist der Ausbruch nach oben maRates 1.close gt maRates klar 0 gesehen. high Punkt TS8020ExtremumBreak ENTRYSELL. ENTRYNONE) speichern Sie die beiden oben genannten Funktionen (feGetEntrySignal und fdAverageBarRange erwähnt) und die benutzerdefinierten Einstellungen in Bezug auf Empfangen eines Signals an die mqh-Bibliotheksdatei. Die vollständige Liste ist unten angebracht. Hier können Sie die Datei Signal80-20.mqh benennen und in das entsprechende Verzeichnis des Terminal-Datenordners (MQL5IncludeExpertSignal) legen. Indikator für manuelles Handeln Wie bei der EA ist auch das oben beschriebene Signalmodul zu verwenden. Der Indikator sollte einen Händler darüber informieren, dass er ein anstehendes Order-Placement-Signal erhält und die berechneten Ebenen Order Placement, Take Profit und Stop Loss Level zur Verfügung stellt. Ein Benutzer kann eine Benachrichtigungsmethode ein Standard-Popup-Fenster, E-Mail-Benachrichtigung oder Push-Benachrichtigung auswählen. Es ist möglich, alle auf einmal oder jede Kombination, die Sie mögen, zu wählen. Ein weiteres Indikatorziel ist ein Handelsgeschichtslayout nach 80-20 TS. Das Kennzeichen ist es, die täglichen Balken hervorzuheben, die den Systemkriterien entsprechen. Die Pegellinien zeigen, wie sich die Situation im Laufe der Zeit entwickelt hat. Für mehr Klarheit können wir tun, wie folgt: Wenn der Preis die Signalleitung berührt, wird diese durch eine ausstehende Bestellzeile ersetzt. Wenn der ausstehende Auftrag aktiviert ist, wird seine Zeile durch die Gewinn - und Stop-Loss-Linien ersetzt. Diese Zeilen werden unterbrochen, wenn der Preis eine davon berührt (die Bestellung ist geschlossen). Dieses Layout macht es leichter, die Effizienz der Handelssystemregeln zu bewerten und zu definieren, was verbessert werden kann. Beginnen wir mit der Deklaration der Puffer und deren Anzeigeparameter. Zuerst müssen wir die beiden Puffer mit der vertikalen Flächenfüllung (DRAWFILLING) deklarieren. Der erste ist, den vollen täglichen Stabbereich des vorhergehenden Tages hervorzuheben, während ein anderer ist, den inneren Bereich nur zu markieren, um ihn von den oberen und unteren 20 des Bereichs zu unterscheiden, der in TS verwendet wird. Danach deklarieren Sie die beiden Puffer für die mehrfarbige Signalleitung und die anstehende Auftragszeile (DRAWCOLORLINE). Ihre Farbe hängt von der Handelsrichtung ab. Es gibt andere zwei Zeilen (Take Proft und Stop Loss) mit ihrer Farbe bleiben die gleiche (DRAWLINE) sie sind die gleichen Standard-Farben zugewiesen werden, um ihnen im Terminal. Alle ausgewählten Darstellungsarten, mit Ausnahme einer einfachen Linie, benötigen zwei Puffer also ein jeder der Code sieht wie folgt aus: Eigenschaft indicatorchartwindow Eigenschaft indicatorbuffers 10 Immobilien indicatorplots 6 Eigenschaft indicatorlabel1 1. Bar des Musters Eigenschaft indicatortype1 DRAWFILLING Eigenschaft indicatorcolor1 clrDeepPink. ClrDodgerBlue Eigenschaft indicatorwidth1 1 Eigenschaft indicatorlabel2 1 St Balken der Mustereigenschaft indicatortype2 DRAWFILLING Eigenschaft indicatorcolor2 clrDeepPink. ClrDodgerBlue Eigenschaft indicatorwidth2 1 property indicatorlabel3 Signalpegeleigenschaft indicatortype3 DRAWCOLORLINE Eigenschaft indicatorstyle3 STYLESOLID Eigenschaft indicatorcolor3 clrDeepPink. ClrDodgerBlue Eigenschaft indicatorwidth3 2 property indicatorlabel4 Einstiegseigenschaft indicatortype4 DRAWCOLORLINE Eigenschaft indicatorstyle4 STYLEDASHDOT Eigenschaft indicatorcolor4 clrDeepPink. clrDodgerBlue Eigenschaft indicatorwidth4 2 Eigenschaft indicatorlabel5 Stop-Loss-Eigenschaft indicatortype5 DrawLine Eigenschaft indicatorstyle5 STYLEDASHDOTDOT Eigenschaft indicatorcolor5 clrCrimson Eigenschaft indicatorwidth5 1 Objekt indicatorlabel6 Profit Immobilien indicatortype6 DrawLine Eigentum Nehmen indicatorstyle6 STYLEDASHDOTDOT Eigenschaft indicatorcolor6 clrLime Eigenschaft indicatorwidth6 1 Lets Händler bieten die Möglichkeit, die Füllung der täglichen Muster zu deaktivieren Ersten Balken, wählen Sie Signal Benachrichtigung Optionen und begrenzen die Historie-Layout-Tiefe. Alle Trading-Systemeinstellungen des Signalmoduls sind hier ebenfalls enthalten. Dazu müssen wir die im Modul verwendeten Variablen vorläufig aufzählen, auch wenn einige von ihnen nur im EA verwendet werden und im Indikator nicht erforderlich sind: include ltExpertSignalSignal80- 20.mqhgt 80-20 TS Signalmoduleingang Bool ShowOuter true 1 St Balken des Musters: Zeigen Sie den vollen Bereich Eingang bool ShowInner true 1 St Balken des Musters: Zeigen Sie den inneren Bereich Eingang bool AlertPopup true Alert: Zeigen Sie ein Popup-Fenster Eingang bool AlertEmail false Alert: E-Mail senden AlertEmailSubj Alert-Eingabestring: E-Mail Betreff Eingang Bool AlertPush wahr Alarm: eine Push-Benachrichtigung Eingang senden uint BarsLimit 2000 Geschichte Layout Tiefe (in der aktuellen TF Balken) ENUMLOGLEVEL LogLevel LOGLEVELNONE Logging-Modus Doppel buff1stBarOuter, buff1stBarOuterZero, Puffer für die gesamte Palette der Muster Plotten 1 st bar buff1stBarInner, buff1stBarInnerZero, Puffer, um den internen 60 der Muster 1 st bar buffSignal, buffSignalColor zum Plotten, Signalleitungspuffer buffEntry, buffEntryColor, noch nicht erledigten Auftrag Zeilenpuffer buffSL, buffTP, Stoploss und Takeprofit Linien Puffer gdExtremumBreak 0 TS8020ExtremumBreak in Symbol Preise int giD1AveragePeriod 1. korrekten Wert für TS8020D1AveragePeriod giMinBars WRONGVALUE minimal erforderliche Anzahl von Takten für die erneute Berechnung int OnInit () prüfen Sie die eingegebene TS8020D1AveragePeriod Parameter: giD1AveragePeriod int (fmin (1. TS8020D1AveragePeriod)) Umwandlung Punkte auf Symbol Preise: gdExtremumBreak TS8020ExtremumBreak Punkt minimal erforderliche Anzahl Bars für Neuberechnung Anzahl der Balken des aktuellen TF innerhalb eines Tages giMinBars int (86400 PeriodSeconds ()) Indikator Puffer Ziel: 1. Bars vollständige Palette Rechteck SetIndexBuffer (0 buff1stBarOuter, INDICATORDATA) PlotIndexSetDouble (0 PLOTEMPTYVALUE. 0) SetIndexBuffer (1. buff1stBarOuterZero, INDICATORDATA) 1. Bars inneren Bereich Rechteck SetIndexBuffer (2. buff1stBarInner, INDICATORDATA) PlotIndexSetDouble (1. PLOTEMPTYVALUE. 0) SetIndexBuffer (3. buff1stBarInnerZero, INDICATORDATA) Signalleitung SetIndexBuffer (4. buffSignal, INDICATORDATA) PlotIndexSetDouble (2. PLOTEMPTYVALUE. 0) SetIndexBuffer (5. buffSignalColor, INDICATORCOLORINDEX) noch nicht erledigten Auftrag Bestücklinie SetIndexBuffer (6. buffEntry, INDICATORDATA) PlotIndexSetDouble (3. PLOTEMPTYVALUE. 0) SetIndexBuffer (7. buffEntryColor, INDICATORCOLORINDEX) SL Linie SetIndexBuffer (8. buffSL, INDICATORDATA) PlotIndexSetDouble (4. PLOTEMPTYVALUE. 0) TP Linie SetIndexBuffer (9. buffTP, INDICATORDATA) PlotIndexSetDouble (5. PLOTEMPTYVALUE. 0) IndicatorSetInteger (INDICATORDIGITS. Digits) IndicatorSetString (INDICATORSHORTNAME. 80-20 TS) Platzieren Sie den Haupt-Code-Programme Auf die eingebaute OnCalculate-Funktion die Schleife für die Iteration über die aktuellen Zeitrahmen von der Vergangenheit in die Zukunft suchen sie für ein Signal mit der Funktion aus dem Signal-Modul. Deklarieren und initialisieren Sie die notwendigen Variablen mit Initialwerten. Definiert die älteste Schleifenleiste für die erste Berechnung unter Berücksichtigung eines benutzerdefinierten History-Tiefenlimits (BarsLimit). Bei nachfolgenden Anrufen werden alle Balken des aktuellen Tages (anstelle des letzten Taktes) neu berechnet, da das Zwei-Balken-Muster tatsächlich unabhängig vom aktuellen Zeitrahmen zum D1-Diagramm gehört. Außerdem sollten wir gegen die sogenannten Phantome schützen: Wenn wir bei der Neuinitialisierung kein erzwungenes Indikatorpuffer-Clearing durchführen, bleiben beim Umschalten von Zeitrahmen oder Symbolen nicht mehr relevante gefüllte Bereiche auf dem Bildschirm. Das Puffer-Clearing sollte an den ersten OnCalculate-Funktionsaufruf nach der Indikatorinitialisierung gebunden werden. Die standardmäßig vorberechneten Variablen reichen jedoch nicht aus, um festzustellen, ob der Aufruf der erste ist, da er nicht nur während des ersten Funktionsaufrufs, sondern auch beim Ändern der Prüfsumme Null enthalten kann. Lets verbringen einige Zeit, um dieses Problem ordnungsgemäß zu lösen, indem Sie die Struktur nicht durch die Einstellung der vorberechneten Variable auf Null. Die Struktur dient zum Speichern und Verarbeiten von Daten, die häufig in den Indikatoren verwendet werden: - Flag der Funktion OnCalculate zum ersten Start - der Zähler der berechneten Balken, der beim Ändern der Prüfsumme - Flag der Änderung der Checksum - Flag des Beginns von Eine neue Bar - aktuelle Bar Startzeit. Die Struktur, die alle diese Daten kombiniert, soll auf globaler Ebene deklariert werden. Es sollte in der Lage sein, zu sammeln oder präsentieren Daten von jeder eingebauten oder benutzerdefinierten Funktionen. Nennen Sie diese Struktur Brownie. Er kann am Ende des Anzeigecodes platziert werden. Eine einzige globale Typ Strukturobjekt namens goBrownie ist auch dort erklärt werden: struct BROWNIE Datetime tLastBarTime Zeit der letzten verarbeiteten bar int iPrewCalculated Anzahl der berechneten Bars Bool bFirstRun ersten Bool Start Flag bHistoryUpdated Geschichte Update-Flag Bool bIsNewBar neue bar Öffnungs Flagge BROWNIE ( Standardwerte): tLastBarTime 0 iPrewCalculated WRONGVALUE bFirstRun bIsNewBar wahr bHistoryUpdated falsevoid fReset (bool bResetFirstRun true) Standardwerte: tLastBarTime 0 iPrewCalculated WRONGVALUE if (bResetFirstRun) bFirstRun wahr auf Null gesetzt, wenn die Erlaubnis bIsNewBar wahr bHistoryUpdated ist fUpdate falsevoid (int iNewPrewCalculated WRONGVALUE) flag zuerst der OnCalculate eingebaute Funktion aufrufen, wenn (bFirstRun ampamp iPrewCalculated gt 0) bFirstRun falsch neue Bar Datetime tThisBarTime TimeCurrent () - TimeCurrent () PeriodSeconds () bIsNewBar tLastBarTime tThisBarTime die aktuelle Bar Zeit aktualisieren, wenn (bIsNewBar) tLastBarTime tThisBarTime if (iNewPrewCalculated gt - 1) gibt es irgendwelche Veränderungen in der Geschichte bHistoryUpdated iNewPrewCalculated 0 ampamp iPrewCalculated gt WRONGVALUE Verwendung prewcalculated bei OnCalculate 1. Aufruf if (iPrewCalculated WRONGVALUE) iPrewCalculated iNewPrewCalculated oder wenn es keine Geschichte Update else if (iNewPrewCalculated gt 0) iPrewCalculated iNewPrewCalculated BROWNIE GoBrownie Informieren Sie den Brownie über das Indikator-Deinitialisierungsereignis: void OnDeinit (const int reason) goBrownie. fReset () inform Brownie Falls nötig, kann die Datenmenge, die vom Brownie gespeichert wird, erweitert werden, wenn benutzerdefinierte Funktionen oder Klassen Preise und Volumen benötigen Oder die aktuelle Balkenbreite (Open, High, Low, Close, tickvolume, volume, spread). Es ist bequemer, fertige Daten aus der OnCalculate-Funktion zu verwenden und über Brownie zu übertragen, anstatt die Zeitreihen-Kopierfunktionen (CopyOpen, CopyHigh etc. oder CopyRates) zu verwenden, dies erspart die CPU-Ressourcen und eliminiert die Notwendigkeit, die Verarbeitung von Fehlern zu arrangieren Dieser Sprachfunktionen. Rückkehr zur Hauptanzeigefunktion. Variablen und zur Vorbereitung der Arrays Deklarieren der Blick goBrownie Struktur wie folgt verwendet: goBrownie. fUpdate (prevcalculated) feed Daten zu Brownie int iPeriodBar 0. Hilfszähler iCurrentTFBar ratestotal - int (BarsLimit) bar Index des aktuellen TF Schleife statischen Datetime stLastD1Bar 0 Mal starten der zuletzt bearbeiteten Balken des Paares von D1 Bars (Muster 2 nd bar) static int si1stBarofDay 0 Index der aktuellen Tage ersten Takt if (goBrownie. bFirstRun) die Puffer während der erneuten Initialisierung löschen: ArrayInitialize (buff1stBarInner, 0) ArrayInitialize ( buff1stBarInnerZero, 0) ArrayInitialize (buff1stBarOuter, 0) ArrayInitialize (buff1stBarOuterZero, 0) ArrayInitialize (buffEntry, 0) ArrayInitialize (buffEntryColor, 0) ArrayInitialize (buffSignal, 0) ArrayInitialize (buffSignalColor, 0) ArrayInitialize (buffTP, 0) ArrayInitialize (buffSL, 0) stLastD1Bar 0 si1stBarofDay 0ese datetime tTime TimeCurrent () minimale Neuberechnungstiefe - ab dem Vortag: iCurrentTFBar ratestotal - Balken (Symbol. ZEITSCHRIFT. TTime - tTime 86400. tTime) - 1ENUMENTRYSIGNAL eSignal ENTRYUNKNOWN Signal doppelt dSL WRONGVALUE. SL-Ebene dTP WRONGVALUE. TP-Ebene dEntryLevel WRONGVALUE. Einstieg dRangeHigh WRONGVALUE. dRangeLow WRONGVALUE Grenzen der Muster 1 st Barserie Datetime tCurrD1Bar 0. Strom D1 bar Zeit (Muster 2 nd bar) tD1BarToFill 0 D1 bar Zeit gefüllt werden (Muster 1 st bar) sicherstellen, dass die anfängliche Neuberechnung bar Index innerhalb akzeptabel ist Bereich: iCurrentTFBar int (fmax (0 fmin (iCurrentTFBar, ratestotal - giMinBars))) Überprüfen Sie das Vorhandensein eines Signals während (iCurrentTFBar lt ratestotal ampamp IsStopped ().) ist die Hauptprogrammschleife hier befindet, wenn über die aktuelle Iteration Zeitraum Bars: eSignal feGetEntrySignal (Time iCurrentTFBar, dEntryLevel, dSL, DTP-, dRangeHigh, dRangeLow) if (eSignal gt 1) während des Tages kein Signal weiterhin die Bar gehört wenn ein Signal an einem neuen Tag erste Bar, der Bereich der Die vorherige Tagesbar sollte ausgefüllt werden. Der Wert der tD1BarToFill-Variable vom Datetime-Typ wird als Flag verwendet. Wenn es gleich WRONGVALUE ist, ist keine Füllung auf dieser Leiste erforderlich. Die Signalleitung sollte am gleichen ersten Balken beginnen, lässt sie aber zur besseren Layout-Wahrnehmung auf den letzten Balken des Vortags erweitern. Da die Berechnungen von einer Signalleitung, sowie Linie und Füllung Farben für bullish und bearish Bars unterschiedlich sind, können zwei ähnliche Blöcke machen: tCurrD1Bar Zeit iCurrentTFBar Zeit iCurrentTFBar 86400 Beginn des Tages gehört die Bar zu, wenn (stLastD1Bar lt tCurrD1Bar) tD1BarToFill Zeit iCurrentTFBar 1Time iCurrentTFBar 186.400 si1stBarofDay iCurrentTFBar sonst tD1BarToFill WRONGVALUE vorherigen Tages-Bar, keine neue Füllung erforderlich stLastD1Bar tCurrD1Bar erinnern, wenn (tD1BarToFill WRONGVALUE) Befüllen der Vortage D1 bar: iPeriodBar iCurrentTFBar if (dEntryLevel lt dRangeHigh) if (ShowOuter), während (--iPeriodBar gt 0), wenn (Time iPeriodBar lt tD1BarToFill) brechen buff1stBarOuterZeroiPeriodBar dRangeLow buff1stBarOuteriPeriodBar dRangeHigh if (ShowInner) iPeriodBar iCurrentTFBar während (--iPeriodBar gt 0), wenn (Time iPeriodBar lt tD1BarToFill) brechen buff1stBarInnerZeroiPeriodBar dRangeLow 0,2 (dRangeHigh dRangeLow) buff1stBarInneriPeriodBar dRangeHigh 0,2 (dRangeHigh dRangeLow ) start of the signal line from the previous days last bar buffSignaliCurrentTFBar buffSignaliCurrentTFBar 1dRangeLow gdExtremumBreak buffSignalColoriCurrentTFBar buffSignalColoriCurrentTFBar 10else if (ShowOuter) while (--iPeriodBar gt 0 ) if ( Time iPeriodBar lt tD1BarToFill) break buff1stBarOuterZeroiPeriodBar dRangeHigh buff1stBarOuteriPeriodBar dRangeLow if (ShowInner) iPeriodBar iCurrentTFBar while (--iPeriodBar gt 0 ) if ( Time iPeriodBar lt tD1BarToFill) break buff1stBarInnerZeroiPeriodBar dRangeHigh 0.2 (dRangeHigh dRangeLow) buff1stBarInneriPeriodBar dRangeLow 0.2 (dRangeHigh dRangeLow) start of the signal line from the previous days last bar buffSignaliCurrentTFBar buffSignaliCurrentTFBar 1dRangeHigh gdExtremumBreak buffSignalColoriCurrentTFBar buffSignalColoriCurrentTFBar 11 else continue All the remaining layout lines are to be plotted inside the current timeframes bars iteration loop. As already mentioned, the signal line should end at the bar where the price touched it. The pending order line should start at the same bar and end on the bar, at which the contact with the price occurs. Take Profit and Stop Loss lines should start at the same bar. The layout of the pattern is finished at the bar, at which the price touches one of them: Signal line till crossed by a bar: iPeriodBar iCurrentTFBar if (dEntryLevel lt dRangeHigh) while (iPeriodBar lt ratestotal) if ( Time iPeriodBar gt tCurrD1Bar 86399 ) break buffSignaliPeriodBar dRangeLow gdExtremumBreak buffSignalColoriPeriodBar 0 if (dRangeLow gdExtremumBreak gt Low iPeriodBar) break else while (iPeriodBar lt ratestotal) if ( Time iPeriodBar gt tCurrD1Bar 86399 ) break buffSignaliPeriodBar dRangeHigh gdExtremumBreak buffSignalColoriPeriodBar 1 if (dRangeHigh gdExtremumBreak lt High iPeriodBar) break Entry line till crossed by a bar: if (dEntryLevel lt dRangeHigh) while (iPeriodBar lt ratestotal) if ( Time iPeriodBar gt tCurrD1Bar 86399 ) break buffEntryiPeriodBar dRangeLow buffEntryColoriPeriodBar 0 if (dRangeLow lt High iPeriodBar) if (buffEntryiPeriodBar 10 .) start and end on a single bar, extend by 1 bar to the past buffEntryiPeriodBar 1dRangeLow buffEntryColoriPeriodBar 10break else while (iPeriodBar lt ratestotal) if ( Time iPeriodBar gt tCurrD1Bar 86399 ) break buffEntryiPeriodBar dRangeHigh buffEntryColoriPeriodBar 1 if (dRangeHigh gt Low iPeriodBar) if (buffEntryiPeriodBar 10 .) start and end on a single bar, extend by 1 bar to the past buffEntryiPeriodBar 1dRangeHigh buffEntryColoriPeriodBar 11break TP and SL lines till one of them is crossed by a bar: if (dEntryLevel lt dRangeHigh) SL is equal to the Low since the beginning of a day: dSL Low ArrayMinimum ( Low. si1stBarofDay, iPeriodBar si1stBarofDay) while (iPeriodBar lt ratestotal) if ( Time iPeriodBar gt tCurrD1Bar 86399 ) break buffSLiPeriodBar dSL buffTPiPeriodBar dTP if (dTP lt High iPeriodBar dSL gt Low iPeriodBar) if (buffSLiPeriodBar 10 .) start and end on a single bar, extend by 1 bar to the past buffSLiPeriodBar 1dSL buffTPiPeriodBar 1dTP break else SL is equal to the High since the beginning of a day: dSL High ArrayMaximum ( High. si1stBarofDay, iPeriodBar si1stBarofDay) while (iPeriodBar lt ratestotal) if ( Time iPeriodBar gt tCurrD1Bar 86399 ) break buffSLiPeriodBar dSL buffTPiPeriodBar dTP if (dSL lt High iPeriodBar dTP gt Low iPeriodBar) if (buffSLiPeriodBar 10 .) start and end on a single bar, extend by 1 bar to the past buffSLiPeriodBar 1dSL buffTPiPeriodBar 1dTP break Lets place the call code of the fDoAlert signal notification function out of the loop. In fact, it has slightly wider opportunities as compared to the ones involved in this indicator the function is able to work with audio files meaning that this option can be added to custom settings. The same is true for the ability to select separate files for buy and sell signals. Function listing: void fDoAlert( Function for sending signals and notifications string sMessage, alert message bool bAlert true. show a pop-up window bool bSound false. play a sound file bool bEmail false. send an eMail bool bNotification false. send a push notification string sEmailSubject . eMail subject string sSound alert. wav sound file ) static string ssPrevMessage there was silence previous alert message static datetime stPrevTime previous alert bar time datetime tThisBarTime TimeCurrent () PeriodSeconds () PeriodSeconds () current bar time if (ssPrevMessage sMessage stPrevTime tThisBarTime) another andor 1 st at this bar remember: ssPrevMessage sMessage stPrevTime tThisBarTime form a message string: sMessage StringFormat ( s s s s , TimeToString ( TimeLocal (), TIMESECONDS ), local time Symbol. symbol StringSubstr ( EnumToString ( ENUMTIMEFRAMES ( Period )), 7 ), TF sMessage message ) activate notification signal: if (bAlert) Alert (sMessage) if (bEmail) SendMail (sEmailSubject Symbol. sMessage) if (bNotification) SendNotification (sMessage) if (bSound) PlaySound (sSound)The code for checking the need for calling the function and forming the text for it located in the program body before completion of the OnCalculate event handler: alert iPeriodBar ratestotal 1 current bar if (AlertPopup AlertEmail AlertPush 0 ) return (ratestotal) all is disabled if (buffSignaliPeriodBar 0 ) return (ratestotal) nothing to catch yet (or already) if ( buffSignaliPeriodBar gt High iPeriodBar buffSignaliPeriodBar lt Low iPeriodBar ) return (ratestotal) no signal line touching message text: string sMessage StringFormat ( TS 80-20: needed s s, TP: s, SL: s , buffSignalColoriPeriodBar gt 0. BuyStop. SellStop , DoubleToString (dEntryLevel, Digits ), DoubleToString (dTP, Digits ), DoubleToString (dSL, Digits ) ) notification: fDoAlert(sMessage, AlertPopup, false. AlertEmail, AlertPush, AlertEmailSubj) return (ratestotal) complete OnCalculate operation The entire source code of the indicator can be found in the attached files (TS80-20.mq5). The trading layout according to the system is best seen on minute charts. Please note that the indicator uses the bar data rather than tick sequences inside bars. This means if the price crossed several layout lines (for example, Take Profit and Stop Loss lines) on a single bar, you cannot always define which of them was crossed first. Another uncertainty stems from the fact that the start and end lines cannot coincide. Otherwise, the lines from the buffer of DRAWLINE and DRAWCOLORLINE types will simply be invisible to a user. These features reduce the layout accuracy but it still remains quite clear. Expert Advisor for testing the 80-20 trading strategy The basic EA for testing strategies from the book Street Smarts: High Probability Short-Term Trading Strategies was described in details in the first article. Lets insert two significant changes in it. First, the signal module is to be used in the indicator as well meaning it would be reasonable to set trading levels calculation in it. We have already done this above. Apart from the signal status, the feGetEntrySignal function returns order placement, Stop Loss and Take Profit levels. Therefore, lets remove the appropriate part of the code from the previous EA version adding the variables for accepting levels from the function and edit the function call itself. The listings of the old and new code blocks can be found in the attached file (strings 128-141). Another significant addition to the basic EA code is due to the fact that, unlike the previous two, this TS deals with a short-term trend. It assumes that the roll-back happens once a day and is unlikely to be repeated. This means that the robot has to make only one entry ignoring the existing signal all the rest of the time until the next day. The easiest way to implement that is to use a special flag static or global variable of bool type in the program memory. But if the EA operation is interrupted for some reason (the terminal is closed, the EA is removed from the chart, etc.), the flag value is lost as well. Thus, we should have the ability to check if todays signal was activated previously. To do this, we may analyze the history of trades for today or store the date of the last entry in the terminal global variables rather than in the program. Let us use the second option since it is much easier to implement. Provide users with the ability to manage one entry per day option and set an ID of each launched version of the robot it is needed to use global variables of the terminal level: input bool OneTrade false One position per day input uint MagicNumber 2016 EA magic number Lets add the variables necessary to implement one entry per day option to the programs global variables definition block. Initialize them in the OnInit function: string gsPrefix identifier of (super)global variables bool gbPositionToday false , gbPendingToday false Create a prefix of (super)global variable names: gsPrefix StringFormat ( SSB s u s. Symbol. MagicNumber, MQLInfoInteger ( MQLTESTER ). t . ) Has the robot worked with market or pending orders today gbPositionToday int ( GlobalVariableGet (gsPrefix LastPositionDate )) TimeCurrent () TimeCurrent () 86400 gbPendingToday int ( GlobalVariableGet (gsPrefix LastPendingDate )) TimeCurrent () TimeCurrent () 86400 Here the robot reads the values of global variables and compares the written time with the day start time, thus defining if the todays signal has already been processed. Time is written to the variables in two places lets add the appropriate block to the pending order installation code (additions highlighted): if (iTry - 10 ) if (LogLevel gt LOGLEVELNONE) Print ( Pending order placing error ) the distance from the current price is not enough :( if (LogLevel gt LOGLEVELERR) PrintFormat ( Pending order cannot be placed at the s level. Bid: s Ask: s StopLevel: s , DoubleToString (dEntryLevel, Digits ), DoubleToString (goTick. bid, Digits ), DoubleToString (goTick. ask, Digits ), DoubleToString (gdStopLevel, Digits ) ) else to update the flag: GlobalVariableSet ( in the terminal global variables gsPrefix LastPendingDate , TimeCurrent () TimeCurrent () 86400 ) gbPendingToday true in the program global variables The second block is placed after the code defining a newly opened position: if ( PositionSelect ( Symbol )) if ( PositionGetDouble ( POSITIONSL ) 0 .) if (gbPositionToday) update the flag: GlobalVariableSet ( in the terminal global variables gsPrefix LastPositionDate , TimeCurrent () TimeCurrent () 86400 ) gbPositionToday true in the program global variables . These are the only significant changes in the previous EA version code. The finalized source code of the new version is attached below. Strategy backtesting In order to illustrate the trading system viability, its authors use patterns detected on the charts from the end of the last century. Therefore, we need to check its relevance in todays market conditions. For testing, I took the most popular Forex pair EURUSD, the most volatile pair USDJPY and one of the metals XAUUSD. I increased the indents specified by Raschke and Connors 10 times, since four-digit quotes were used when the book was written, while I tested the EA on five-digit ones. Since there is no any guidance concerning the trailing parameters, I have selected the ones that seem to be most appropriate to daily timeframe and instrument volatility. The same applies to the Take Profit calculation algorithm added to the original rules the ratio for its calculation was chosen arbitrarily, without deep optimization. The balance chart when testing on the five-year EURUSD history with the original rules (no Take Profit): The same settings and Take Profit: The balance chart when testing the original rules on the five-year USDJPY history: The same settings and Take Profit: The balance chart when testing the original rules on the daily gold quotes for the last 4 years: The full data on the robot settings used in each test can be found in the attached archive containing the complete reports. Conclusion The rules programmed in the signal module match the 80-20 trading system description provided by Linda Raschke and Laurence Connors in their book Street Smarts: High Probability Short-Term Trading Strategies. However, we have extended the original rules a bit. The tools (the robot and the indicator) are to help traders draw their own conclusions concerning the TS relevance in todays market. In my humble opinion, the TS needs a serious upgrade. In this article, I have tried to make some detailed comments on developing the code of the signal module, as well as the appropriate robot and indicator. I hope, this will help those who decide to do the upgrade. Apart from modifying the rules, it is also possible to find trading instruments that fit better to the system, as well as signal detection and tracking parameters. Il pattern 80-20 Si tratta di un pattern di prezzo proposto da Linda Raschke e Laurence Connors, nel libro Street Smarts. La strategia viene utilizzata soprattutto per il day trading, facendo riferimento al manuale di George Douglass Taylor The Taylor Trading Technics. Nel suo manuale Taylor mette in evidenza come esista un ritmo naturale del mercato fatto di giornate rialziste, giornate ribassiste e giornate da shortare. Questo pattern viene poi ripreso, analizzato e testato dal centro di ricerca Moore, precisamente da Steve Moore. Steve Moore prende in considerazione quelle giornate in cui il titolo chiude nella parte superiore del range di giornata ed esattamente larea che rappresenta il 10 superiore della seduta. Poi comincia a testare la percentuale di volte in cui il mercato, nella seduta successiva, supera il massimo preso in considerazione e quante volte dopo averlo superato vi chiude sopra. Viceversa per il minimo. Questa ricerca mette in evidenza che quando un titolo chiude in prossimit del suo minimo o massimo, ed esattamente nel 10 superiore o inferiore del range ha l80-90 di probabilit di continuare nella stessa direzione nella seduta successiva, ma solo nel 50 dei casi chiude al di soprasotto il massimominimo violato. Tutto questo implica che ci possa essere una inversione nella seduta successiva a quella presa in considerazione. Dere Gipson, nota successivamente che il mercato ha pi probabilit di invertire la sua tendenza se nella seduta successiva a quella presa in considerazione, il prezzo apre al di soprasotto della seduta considerata, aggiungendo cos un elemento in pi rispetto alla tecnica originale di Taylor. Affinch si possano creare pi opportunit di trading i due autori, spostano il range da prendere in considerazione dal 10 al 20 in quanto questa variazione non incide sulle probabilit di successo della strategia. Gli autori sottolineano inoltre che non bisogna prendere in considerazione le sessioni notturne (after hours) del titolo in questione, ma solo i dati della giornata. Ora vediamo nello specifico qual il setup. Nella seduta di ieri il prezzo apre nel 20 superiore del range di giornata e chiude nel 20 inferiore. Nella seduta odierna il prezzo apre 5-15 ticks pi in basso rispetto al minimo di ieri. Il valore in tick dato come linea guida e viene lasciato a nostra discrezione. In pratica andremo ad osservare lo strumento preso in considerazione e sulla base della osservazione empirica andremo a determinare quale sia il valore migliore in ticks. Si immette un ordine buy stop al livello del minimo di ieri e contestualmente un ordine di stop loss sotto il minimo realizzato prima di aprire la posizione. Ieri il prezzo apre nel 20 inferiore del range giornaliero e chiude nel 20 superiore. Oggi il prezzo apre 5-15 ticks al di sopra del massimo di ieri. Si immette un ordine sell stop al livello del massimo di ieri e uno stop sopra il massimo realizzato prima di aprire la posizione. Vediamo graficamente come composto il pattern. Quello che precede un grafico daily del titolo Eni. Come vediamo nella giornata del 3 luglio si forma una candela di espansione. A colpo docchio possiamo notare che ci sono tutte le condizioni richieste per il nostro pattern: il prezzo apre nel 20 inferiore al range giornaliero e chiude nel 20 superiore al range di giornata. In questo caso non dobbiamo neanche sforzarci di calcolare alcunch, in quanto il prezzo di apertura coincide con il minimo di giornata e il prezzo di chiusura quasi con il massimo. Il giorno successivo abbiamo unapertura lievemente superiore al massimo della seduta precedente. I prezzi cominciano subito a scendere dopo lapertura, andando a colpire il nostro ordine sell esattamente a 17,54 per raggiungere un minimo di giornata a 17,18, esattamente un 2 di ribasso. Per analizzare meglio la dinamica della strategia prendiamo lo stesso grafico e osserviamolo a 120 minuti, in modo che possiamo vedere esattamente come si mosso il prezzo: Tutta la serie di candele verdi tracciate con la linea discontinua si sono create nella giornata del 3 luglio, abbiamo avuto una seduta fortemente rialzista. Il giorno successivo il prezzo ha aperto sopra il massimo e subito sceso andando a colpire il nostro ordine di vendita e proseguendo nella discesa fino a raggiungere un -2. Luscita dalla posizione, come sempre, per ognuno discrezionale secondo le proprie regole di money management. Di seguito invece mostriamo un setup long sempre sul titolo Eni. Anche qui a colpo docchio possiamo notare che la barra di espansione negativa che si realizza sui minimi potrebbe essere una candela di esaurimento. Vediamo a colpo docchio che rispetta tutte le condizioni del pattern per un setup long. La candela apre sui massimi e chiude sui minimi di giornata, anche in questo caso possiamo evitare di fare calcoli essendo evidente che la candela apre e chiude nel 20 superiore e inferiore del range di giornata. Il giorno successivo il prezzo apre in lieve gap down, scende ancora, realizza un minimo e poi comincia a risalire andando a colpire il nostro ordine buy a 23,22, che il minimo della giornata precedente. Anche in questo caso il titolo mette a segno un bel rialzo, oltre il 3,5. Ich CFD sono prodotti a leva. Il trading con i CFD potrebbe non essere appropriato per tutti e pu determinare perdite che eccedono i vostri depositi accertatevi di aver pienamente compreso i rischi in cui potreste incorrere. IG united commerce IG Markets Ltd, con Sede legale ein Londra, Cannon-Brücke Haus, 25 Dowgate Hill, London, EC4R 2YA. IG Markets Ltd. autorizzata und regolata dalla FCA von Londra (geb. 195355) ed iscritta al n. 72 del Registro delle Imprese di Investimento In Verbindung stehende Artikel Con Succursale tenuto dalla CONSOB. P. iva 06233800967. IG Italia ha sede in Via Paolo da Cannobio 33, 20122 Milano, Italia. Die Kontaktdaten entnehmen Sie bitte Ihrer Buchungsbestätigung. Das Hotel behält sich das Recht vor, eine Autorisierung der Kreditkarte vor Anreise vorzunehmen. Wichtige Informationen Beim Check-in werden ein Lichtbildausweis und eine Kreditkarte oder eine Kaution in bar für unvorhergesehene Aufwendungen verlangt. Le informazioni contenute nel presente sito non sono destinate n intese alla distribuzione, o allutilizzo da parte di soggetti residenti in una giurisdizione o paese in cui tale utilizzo o distribuzione sarebbero contrari alla legge o normativa locale applicabile. Ich CFD sono prodotti a leva. Il trading con i CFD potrebbe non essere appropriato per tutti e pu determinare perdite che eccedono il vostro investimento iniziale accertatevi di aver pienamente compreso i rischi a cui potreste incorrere.

Comments