English Русский 中文 Español 日本語 Português
Das Meta COT Projekt - Neue Horizonte für die CFTC Berichtsanalyse in MetaTrader 4

Das Meta COT Projekt - Neue Horizonte für die CFTC Berichtsanalyse in MetaTrader 4

MetaTrader 4Beispiele | 20 April 2016, 16:28
3 575 0
Vasiliy Sokolov
Vasiliy Sokolov

Einführung

Die Bewegung der Marktkurse wird nicht verursacht von Elliott Wellen, Gann Linien und Fibonacci Ebenen oder durch technische Indikatoren. Nicht davon enthält irgendwelche neuen Informationshappen, verglichen mit dem Kurs-Chart im OHLCV-Format. Die Kursbewegung wird durch das fundamentale Gesetz von Angebot und Nachfrage bestimmt. Egal wie banal dies erscheinen mag, aber Angebot und Nachfrage bestimmen den Kurs.

Der Kurs ist das Ergebnis der Interaktion von Käufern und Verkäufern. Viele Trader wissen das, aber nur wenige nutzen es. Die praktische Anwendung dieses umfassenden Markt-Gesetzes kann für jeden sehr nützlich sein, der es jemals gewagt hat Vorhersagen über zukünftige Kurse zu treffen. Dieser Artikel ist eine Art "Führer" von theoretischen Postulaten der Ökonomie zu ihrer Anwendung für den Handel an den Futures- und Rohstoffmärkten.

Die Wirtschaftstheorie macht Aussagen über die Möglichkeit der Existenz der "Überkauften" und "überverkauften" Phasen des Marktes. Diese Phasen sind entscheidend für den Markt. Eine weitere Aufwärts-Kursbewegung in dem "überverkauften" Bereich wird schwieriger, aufgrund des zunehmenden Wettbewerbs bei der Versorgung. Eine weitere Abwärts-Kursbewegung in dem "überverkauften" Bereich wird ebenfalls immer schwieriger, durch den steigenden Druck der Nachfrage. In beiden Fällen ist der Markt in der Nähe einer langfristigen Umkehr. Diese Aussagen können einfach und so nutzlos erscheinen, aufgrund der Tatsache, dass die Wirtschaftstheorie keine Verfahren vorschlägt, um diese Marktphasen zu bestimmen. Allerdings existieren diese Verfahren und, wie so oft, wurden bereits vor langer Zeit von erfolgreichen Tradern entwickelt.

Dieser Artikel ist eine Brücke zwischen Theorie und Praxis. Er führt den Leser ein in die Methoden zur Bestimmung der Marktphasen, basierend auf einfachen Indikatoren, beschrieben in dem Buch "Trade Stocks and Commodities With the Insiders: Secrets of the COT Report", geschrieben von dem berühmten Larry Williams. Dennoch wurde das Buch nicht sehr populär und die Materialien wurden nicht weit verbreitet. Einer der Hauptgründe dafür ist die Tatsache, dass alle in dem Buch vorgestellten Konzepte theoretisch blieben.

Nach mehr als zwei Jahren, nach der Übersetzung des Buches in Russisch, war keine universelle, nützliche und offene Software für die Konzeption in dem MetaTrader 4 Client Terminal, der beliebteste Handelsplattform in Russland, geplant. Dieser Artikel füllt diese Lücke. Jetzt kann jeder die Larry Willliams Theorie testen und verwenden, und in der Praxis mit seinem eigenen MetaTrader 4 Client Terminal nutzen.

Die Methode der aktuellen Marktanalyse mit dem Commitments of Traders Report kann als fundamentale Analyse betrachtet werden. Es ist kein Geheimnis, das die meiste Trader die technische Analyse für das reale Trading verwenden. Dies begründet sich durch die Tatsache, dass die fundamentale Analyse häufig mit der Veröffentlichung von Marktnachrichten verbunden ist, und es ist unmöglich die Reaktion des Marktes auf die Nachrichten zu prognostizieren.

Zweitens, diese Analyse ist nicht parametrisiert und somit sehr subjektiv.

Drittens ist die fundamentale Analyse potentiell endlos. Das heißt, Sie können nur einen bestimmten Teil der ökonomischen Effekte analysieren, die den Markt beeinflussen können, und der andere Teil wird nicht immer von dem Händler, aber von dem Markt berücksichtigt. Die Verwendung des CFTC Reports beseitigt automatisch alle Schwächen der fundamentalen Analyse, und Larry Williams Methode für diese Berichtsanalyse bringt die besten Eigenschaften der technischen Analyse in diese Technologie. Das bedeutet zum Ersten, dass alle wesentlichen wirtschaftlichen Effekte indirekt durch die Beobachtung der Handlungen von drei Gruppen von Marktteilnehmern berücksichtigt werden.

Zweitens, können alle diese Beobachtungen auf einfache technische Indikatoren reduziert werden, mit Reduzierung der Subjektivität und Mehrdeutigkeit.

Es ist möglich einen Expert Advisor zu erstellen, der einfache Regeln der fundamentalen Analyse für das Trading verwendet. Eine solche Entwicklung wird hier vorgestellt. Ich denke, dass es für jeden hilfreich sein kann, der sich entscheidet den CFTC Report für das Trading zu nutzen.


Der erste Teil des Artikels befasst sich mit der Wirtschaftstheorie über Angebot und Nachfrage. Mit einfachen Beispielen wird das Markt-Modell beschrieben, die mögliche Existenz der verschiedenen Marktphasen wird bewiesen. Der zweite Teil handelt über Methoden der Datenanalyse, die zur Bestimmung der aktuellen Marktphase erforderlich sind. Er beinhaltet die Beschreibung eines Satzes für die Analyse von Interaktionen zwischen Käufern und Verkäufern benötigter Indikatoren. Er basiert vor allem auf Larry Williams Buch, in dem die praktische Verwendung dieser Indikatoren in Einzelheiten dargestellt ist. Der dritte Teil befasst sich mit der Umsetzung des MetaTrader COT Projekts. Er enthält eingehende Informationen über die Verwendung des Expert Advisors, die Nutzung von Indikatoren und Skripten, die in das Projekt eingeschlossen sind, und wie man die erforderlichen Informationen herunterlädt. Der vierte ist der abschließende Teil. Wir werden den Expert Advisor untersuchen und die Effektivität des in dem Artikel vorgestellten Konzepts. Das abschließende Fazit wird präsentiert und einige konstruktive Anregungen werden vorgeschlagen.


1. Der Markt als Ausgleichende Funktion der Kurse

1.1 Das Gesetz von Angebot und Nachfrage

Der Markt ist eine Institution oder ein Mechanismus, der Käufer (Nachfrage) und Verkäufer (Lieferanten) bestimmter Güter, Dienstleistungen oder Ressourcen zusammenbringt. [3]

Es gibt keine genauere Definition des Marktes, als die oben angegebene. In der Tat, die Hauptaufgabe eines offenen Marktes ist das Zusammenbringen von Käufern und Verkäufern. Die Beziehung zwischen Käufern und Verkäufern wird durch das Gesetz von Angebot und Nachfrage reguliert. Dieses grundlegende Gesetz lässt Aktienkurse steigen oder fallen, was es wiederum Händlern ermöglicht Gewinne oder Verluste aus den Kursunterschieden zwischen den zukünftigen und den gegenwärtigen Kursen zu erzielen. Händler sollten den Mechanismus des ausgleichenden Wechsels zwischen dem Angebot und der Nachfrage kennen, also betrachten wir die folgende Tabelle [3]:


Gesamtangebot

Preis pro Scheffel (U.S.)

Gesamtnachfrage pro Woche

Überschuss (+) oder Mangel (-)

12 000

5

2 000

+10 000

10 000

4

4 000

+6 000

7 000

3

7 000

0

4 000

2

11 000

-7 000

1 000

1

16 000

-15 000


Tabelle 1-1. Das Markt-Angebot und die Nachfrage von Korn (in tausend Scheffel)

Hier ist die Verbindung zwischen Korn-Verkäufern und Käufern, ausgedrückt in Bezug auf den Preis und die Liefermenge. Verkäufer möchten ihre Waren so teuer wie möglich verkaufen, und Käufer möchten so billig wie möglich kaufen. In diesem Fall, bei einem Kornpreis von $ 5 pro Scheffel, gibt es viele Verkäufer die verkaufen wollen. Deren Gesamtangebot beträgt 12.000 Scheffel. Das Problem der Verkäufer ist aber, dass es nicht so viele Käufer gibt, die bereit sind bei einem derart hohen Preis zu kaufen. Es gibt Käufer bereit sind nur 2.000 Scheffel bei einem solch hohen Preis zu kaufen. Die anderen 10.000 Scheffel (1.2000 - 2.000 = 10.000) bleiben unerfüllt, verursachen einen Warenüberschuss bei den Verkäufern und einen Warenmangel von Käufern. Dieser Preis ist nicht in der Lage am Markt zu bestehen. Viele Verkäufer werden ihren Preis kürzen, nur um den Warenüberschuss loszuwerden, auch wenn sie weniger, aber reales Geld erhalten. Sie werden sich anderen Verkäufern anschließen, die ihren Mitbewerbern zuvorkommen wollen. Der Wettbewerb unter den Verkäufern beginnt, die ihre Preise senken [3].

Betrachten wir nun die Gegenseite. Zu diesem Zeitpunkt nehmen wir an, dass der Kornpreis sehr niedrig ist - $ 1 pro Scheffel. Ein solcher Kornpreis wird für Käufer sehr anziehend sein, es wird viele Käufer geben, die kaufen wollen. Deren Gesamtnachfrage ist 16.000 Scheffel. Es wird aber viel weniger Verkäufer geben, die zu diesem Preis verkaufen wollen. Die Menge des Gesamtangebots (Verkäufe) beträgt nur 1.000 Scheffel, was wiederum einen Warenmangel unter den Käufern in Höhe von 15.000 Scheffel verursacht, und Überschüsse von den Verkäufern. Der Preis ist wieder nicht in der Lage auf dem Markt z bestehen. Einige der Käufer werden das Korn zu höheren Preisen kaufen, um ihre benötigten Waren zu erhalten. Diese Käufer werden sich ihren Kollegen anschließen und weiterem Wachstum der Preise vorgreifen, und wollen die ersten sein, die relativ billig gekauft haben. Der Wettbewerb unter den Käufern beginnt, was den Preis steigen lässt [3].

Um es klar zu machen, zeichnen wir die Funktion von Angebot und Nachfrage in das Diagramm:



Figure 1-2. Demand and Supply as function of the price

Abbildung 1-2. Angebot und Nachfrage als Funktion des Preises



Wir haben nur die extremen Fälle der Verteilung zwischen Angebot und Nachfrage betrachtet. In den ersten Fall. wird der Preis fallen, in dem zweiten Fall, wird der Preis steigen. Beide dieser Fälle werden zu einem bestimmten Gleichgewichtspunkt kommen, an dem die Nachfrage gleich dem Angebot sein wird. An diesem Punkt gibt es keinen Mangel an Waren unter den Käufern, oder den Überschuss von Verkäufern. In unserer Tabelle befindet sich dieser Punkt bei 3 Dollar. Bei diesem Preis ist das Gesamtangebot, sowie die Gesamtnachfrage 7.000 Scheffel, bei diesem Preis gibt es ein Gleichgewicht im Austausch zwischen Käufern und Verkäufern, ohne nicht verkaufte Waren oder auftretendem Defizit.

Im echten Leben ändern sich Angebot und Nachfrage unter dem Einfluss voon vielen Faktoren, angefangen bei fundamentalen Gründen bis bis zu zufälligen Ereignissen. In jedem Fall wird es nur einen Schnittpunkt zwischen Angebot und Nachfrage geben. Dieser Punkt wird der aktuelle Marktpreis sein.

Betrachten wir ein Beispiel, wenn das Angebot ansteigt, bei gleichbleibender Nachfrage (Punkt A-B in der Abbildung 1-3, a). In diesem Fall wird der Preis fallen (p1<p2), da die Waren billiger geworden sind und der Wettbewerb unter den Verkäufern beginnt. Auf der anderen Seite, wird die Anzahl der Käufer, die die Waren zu einem günstigeren Preis kaufen wollen größer sein (q3>q2).

Nun betrachten wir den Fall, wenn das Angebot abnimmt (Punkt A bis C in Abbildung 1-3a). Dies wird einen höheren Preis verursachen, weil es weniger Waren gibt und der Wettbewerb zwischen den Verkäufern beginnt (p3>p2). Sicherlich werden die Käufer, die bereit sind zu höheren Preisen zu kaufen, weniger werden.



Abbildung 1-3a. Verändertes Angebot bei gleichbleibender Nachfrage


Das gleiche gilt für die Nachfrage - wenn sie ansteigt (Punkte A und B in Abbildung 1-3b), beginnt der Preis zu steigen, und es werden viele sein, die zu einem höheren Preis verkaufen wollen, was zu einem erhöhten Angebot führt (q3>q2). Im gegenteiligen Fall, wenn die Nachfrage fällt, wird der Preis fallen, die Verkäufer, die zu einem niedrigeren Preis verkaufen wollen, werden weniger, und dadurch, wird die kumulierte Zahl des Angebot sich verringern (q1<q2).



Abbildung 1-3b. Veränderte Nachfrage bei gleichbleibendem Angebot


Jetzt betrachten wird den Fall, in dem sich Nachfrage und Angebot gleichzeitig verändern. Es ist klar, dass es nur vier solcher Fälle gibt [3]:


1. Die Nachfrage verringert sich, das Angebot erhöht sich. Jeder dieser Faktoren führt alleine zu einem niedrigeren Preis und, dementsprechend, wird der gesamte Preisrückgang noch größer sein, als von jedem Faktor einzeln verursacht.

2. Die Nachfrage erhöht sich, das Angebot erhöht sich. Diese Faktoren kompensieren sich gegenseitig, da das Wachstum der Nachfrage zu einem Preisanstieg führt, und das Wachstum des Angebots zu einer Preisminderung. Allgemein ist die Preisbewegung von dem stärkeren Faktor abhängig.

3. Die Nachfrage sinkt, das Angebot verringert sich. Genau wie in dem vorherigen fall, ist das Ergebnis unsicher. Mit der sinkenden Nachfrage wird der Preis zurückgehen, während das verringerte Angebot zu einem Preisanstieg führt. Im Allgemeinen wird die Preisbewegung von dem stärkeren Faktor abhängen.

4. Die Nachfrage erhöht sich, das Angebot sinkt. Die steigende Nachfrage führt zu einem Preisanstieg, genau wie das sinkende Angebot zu einem Preisanstieg führt. Als Ergebnis wird der Gesamtpreisanstieg größer ausfallen, als von jedem Faktor einzeln verursacht.

Auf dem realen Markt verändern sich Angebot und Nachfrage in jeder Sekunde, und alle diese vier Fälle spiegeln sich in dem tatsächlichen Marktpreis des Wertes wider. Somit "wandert" der Schnittpunkt von Angebot und Nachfrage auf dem Diagramm aus Preisen und Volumen, zu unterschiedlichen Zeiten, an unterschiedlichen Stellen (siehe Abbildung 1-4):



Abbildung 1-4. 1-4. Die Dynamik von Angebot und Nachfrage


Allerdings, und das ist am wichtigsten, kann der Schnittpunkt von Angebot und Nachfrage kein hohes Volumen einem niedrigen Kosten haben (d.h., sich in dem linken oberen Viertel befinden), genauso, wie er kein niedriges Volumen bei hohen Kosten haben kann (d.h., sich in dem rechten unteren Viertel des Diagramms befinden). Für besseres Verständnis, gehen wir zur Abbildung 1-5:



Abbildung 1-5. Die Marktphasen


Wie es oben ausgeführt wurde, werden die Lieferanten sich weigern, großes Volumen zu niedrigen Preisen bereitzustellen (viel und billig verkaufen), und die Käufer werden sich weigern, eine hohe Nachfrage bei hohe Preisen bereitzustellen (viel und teuer kaufen). Daher ist es möglich, ein Modell von jedem Markt zu konstruieren. Die Abbildung 1-5 zeigt ein Modell. Die gepunktete Linie zeigt die durchschnittliche Kreuzung von Angebot und Nachfrage. Der volle Marktzyklus kann in drei Perioden oder Phasen unterteilt werden:

1. Die Tiefpreisphase. Sie ist gekennzeichnet durch niedrige Volumen bei niedrigen Preisen. Der reale, aber nicht realisierte Marktbedarf von Käufern wird hoch sein, während das Marktangebot begrenzt sein wird. Es gibt einen Warenmangel unter den Käufern und einen nicht realisierten Warenüberschuss von den Verkäufern. Es wird den Wettbewerb unter Käufern verursachen, was letztendlich zu dem Preisanstieg führt.

2. Die Phase der Durchschnittspreise. In dieser Phase gibt es akzeptable Preise bei einem ausreichend hohen Volumen. Es gibt keinen Mangel an Käufern und es gibt keinen Überschuss von den Verkäufern. Hier ist der Gleichgewichtspunkt für Preis und Volumen. [3]. In Abbildung 1-5 durch den Punkt dargestellt..

3. Die Hochpreisphase. Sie ist gekennzeichnet durch hohe Preise (P) mit hohem Volumen (Q). Das tatsächliche Angebot von Warenherstellern wird hoch sein, während die Käufernachfrage begrenzt sein wird. Die Zurückhaltung der Käufer teure Ware zu kaufen und der Herstellwunsch teure Waren zu verkaufen, werden den Herstellerwetbewerb verursachen, der letztendlich zu dem Preisrückgang führt.

Mit anderen Worten, bestimmt das Gesetz von Angebot und Nachfrage die Umkehr-und-Trend Marktbewegung. Mittelfristig (seine Zeitskala ist in etwas 1-1,5 Jahre) wird der Markt sich von der Tiefpreisphase zu der Hochpreisphase bewegen, oder umgekehrt, so dass es einen Trend geben wird. Langfristig (ab einem Jahr oder mehr) wird der Preis in der Tief- oder Hochpreisphase auf den Widerstand von Käufern oder Verkäufern treffen, und unter diesem Einfluss wird er sich in die Gegenrichtung oder seitwärts bewegen. Die Marktbewegung kann mit der Atmung verglichen werden. Nach dem vollständigen Ausatmen, ist es schwer auch nur ein wenig Luft in der Lunge zu finden, um das Ausatmen fortzusetzen.

Im Gegensatz wird der Druck zwischen dem Zwerchfell und der Lunge geringer als atmosphärisch, und Luft kann leicht in die Lunge einströmen. Nach einem vollen Atemzug ist das Volumen der Lunge vollständig ausgenutzt, und es gibt keine Möglichkeit zumindest noch ein wenig einzuatmen. Zu diesem Zeitpunkt wird der Druck zwischen Zwerchfell und Lunge höher als atmosphärisch, der überschüssige Druck versucht Luft aus der Lunge heraus zu drücken. Dieser Vorgang wiederholt sich immer und immer wieder. Der gleiche Vorgang erfolgt am Markt. Der entstehende Käufer-Wettbewerb (der Unterdruck)zwingt den Markt die Preise zu erhöhen (einzuatmen), während der Verkäufer-Wettbewerb (der positive Druck) den Markt zwingt die Preise zu senken (Luft auszuatmen).

Wie wir oben sehen können, sind die Situationen von Warenmangel oder Überschuss am Markt möglich. Dennoch ist es auch richtig, dass jederzeit die gleiche Menge am ge- und verkauft wird. Deshalb sind die Schlussfolgerungen der technischen Analyse, dass der Markt von den Bullen beherrscht wird, wenn er sich in einem Aufwärtstrend befindet, oder den Bären bei einem Abwärtstrend, nicht korrekt. Der Markt hat immer die gleiche Anzahl an Bullen (Käufer) und Bären (Verkäufer) Kontrakte. Aber, bei niedrigen Preisen gibt es eine begrenzte Menge an Waren am Markt. Die Mehrheit der Warenbesitzer wartet eine solche Periode ab (verkaufen nicht).


Mit anderen Worten, wenn es Weizen ist, bleibt er im Silo und es bleibt auf der Bank, wenn es eine Währung ist. Somit sind Käufer nicht in der Lage Waren in der gewünschten Menge zu kaufen. Mit den Standardbegriffen kann diese Situation als "überverkauft" bezeichnet werden. Der gegenteilige Fall, in dem die Preise hoc sind und der ganze Warenüberschuss der Verkäufer sich am Markt befindet, kann als "überkauft" bezeichnet werden. Im weiteren werden wir dies bei überkauften und überverkauften Fälle meinen.



1.2 Der Preis ist die erste Variable für die Angebot-und-Nachfrage-Gleichung

Um die Beispiele von Angebot und Nachfrage darzustellen, betrachten wir die die Zucker Wochen-Balken:



Abbildung 1-6. Zucker, Wochen-Balken


Wir wissen, dass es bei relativ niedrigen Preisen nur wenige geben wird, die verkaufen wollen, und somit das am Markt dargestellte Volumen auch relativ niedrig ist. Im Gegensatz dazu, wird das Warenvolumen bei hohen Marktpreisen höher sein. Der Preis selbst kann uns etwas über die Möglichkeit der Überschusses oder des Mangels an Waren sagen. Allerdings ist diese Annahme oft grob und geschätzt. Obwohl Preise und Volumen von Waren miteinander korrelieren, gibt es keine direkte Beziehung zwischen ihnen.

Bei relativ hohen Preisen, kann es ein relativ kleines Volumen an Waren geben, während es gleichzeitig bei relativ hohen Volumen relativkleine billige Preise geben kann. Die begründet sich durch die Tatsache, dass Angebot und Nachfrage nur selten linear sind. Fast immer unterliegen sie bedem, der Preiselastizität der Nachfrage und der Preiselastizität des Angbots [5]. Das zweite Problem der Bestimmung des Volumens über den Preis, ist die "Relativität" eines solchen Ansatzes. Wie können wir bestimmen, welche Preise hoch sind, und welche Preise niedrig sind?

Wir wissen, dass der Markt langfristig nicht gegen den Trend läuft. Warum also nicht einen Indikator von überkauften und überverkauften Zuständen des Marktes erstellen, und ihn zum Öffnen von Short-Positionen verwenden, wenn der Markt die hohen Preise erreicht, und zum Öffnen von Long-Positionen, wennn die Preise niedrig sind? Der Gewinn muss mit einer gleichzeitigen Verwendung aller Markteigenschaften erzielt werden - wenn er sich in einem Trend befindet, und wenn er gegen den Trend tendiert.

Während der vergangenen fünfzig Jahre wurden viele technische Indikatoren entwickelt, die versuchen überkaufte und überverkaufte Marktzustände zu bestimmen. Aber alle von ihnen haben ein ernsthaftes Problem - sie basieren nur auf einer Variable von Angebot und Nachfrage, und diese Variable ist der Preis. Die Änderung des Preises ist das letzte, was am Markt nach der Veränderung des Angebot und Nachfrage Gleichgewichts passiert.

Folglich, wenn ein Trader irgendeinen Indikator verwendet, basierend auf dem Preis oder den Preis selbst, wird er als letztes mit der Preisänderung Schritt halten, aber nie in der Lage sein dieser zuvor zu kommen. Der einfache Computer-Test zeigt die Widersprüchlichkeit dieses Ansatzes.

Hier ist ein Gewinn-Diagramm des auf dem RSI-Indikator basierenden grundlegenden Systems:




Abbildung 1-7. Die Gewinndynamik des Expert Advisor, basierend auf dem RSI-Indikator. EURUSD, Tages-Balken, von 2000 bis 2009.


Das System ist elementar. Wenn der 7-Periode RSI 80 Prozent erreicht, öffnet es einen Sell-Trade. Wenn der RSI 20% erreicht, dann öffnet es einen Buy-Trade. Die benutzerdefinierte Periode wurde gewählt um mehr als eine Position zu öffnen. Der Stop ist bei 100 Punkten, die Bedingung für den Ausstieg aus dem Trade ist ein Gewinn von 200 Punkten. Der Test wurde auf EURUSD durchgeführt, von 2000 bis 2009 und es wurden Tages-Balken verwendet. Das gehandelte Lot war für alle Trades konstant gleich 0.1.

Die Schlussfolgerungen sind eindeutig: nur die Verwendung der Preisdaten ist nicht ausreichend, um die Phase des Marktes zu bestimmen. Wir benötigen eine zweite Variable der Gleichung von Angebot und Nachfrage - das Marktvolumen.



1.3 Das Open Interest ist die zweite Variable der Angebot- und Nachfrage-Gleichung

Es ist überraschend, dass es für viele Märkte eine Möglichkeit gibt deren Volumen bis zu einem Kontrakt, zum Analysieren der Open Interest Werte.

Das Open Interest ist die Anzahl an Kontrakten des Futures und/oder Optionen Marktes und unbezahlt durch Transaktionen, Lieferungen, usw. Das Open Interest ist die Summe aller Long- und Short- Positionen [1]. Zum Beispiel, wenn die Summe aller Long-Positionen im Markt gleich 1000 Kontakte ist, bedeutet dies, dass die Summe aller Short-Positionen im gleichen Markt auch gleich 1000 Kontrakte ist und Open Interest von 1000 Positionen das gleiche ist. Die Formel für das Open Interest ist unten dargestellt:

Der Käufer und der Verkäufer von einem Futures Kontrakt für Weizen werden eine Einheit zu dem Open Interest Wert hinzufügen.

Es ist wichtig, den Unterschied zwischen dem Open Interest und dem Marktvolumen zu verstehen. Beispielsweise können während eines Handelstages 1.000.000 Kontrakte gehandelt werden, aber das bedeutet nicht, dass es Waren für 1.000.000 Kontrakte gibt. Es kann viel kleiner sein, sie wechseln einfach während des Tages von der einen Hand in die andere Hand, das tägliche Volumen steigernd. Am Ende des Tages sind nicht alle Positionen geschlossen, viele von ihnen werden in der nächsten Tag verlängert (Rollover). Die Anzahl der offenen Kontrakte ist der Open Interest Indikator. Die Hersteller von Waren versuchen ihre ihre Risiken abzusichern, durch das Kaufen von Long-Futures, somit geben sie eine Verpflichtung der tatsächlichen Lieferung der Waren. dies wird in den Open Interest Werten widergespiegelt. Damit kann, in gewissem Sinne, das Open Interest ein Maß für das Volumen der Güter am Markt sein.

Das Open Interest wird täglich am Ende jeder Handelssitzung aller Futures Märkte berechnet. Diese Information ist offen und sie ist in der Regel auf den offiziellen Webseiten der Terminbörsen verfügbar. Die gleichen Daten über Open Interest können über ein Abonnement von bezahlten Signalen, wie e-Signal, empfangen werden. Die Benutzer des MetaTrader können die Open Interest Daten für mehr als 40 Märkte mit dem Indikator ̍eta COT: Net Position۠empfangen, der Teil des hier vorgestellten Meta COT Projekts ist. Weitere Informationen über seine Verwendung, finden Sie im dritten Teil des Artikels.

Leider sind die Informationen über Open Interest (sowie alle anderen in diesem Artikel beschriebenen Datentypen) nicht verfügbar für die Spot- und Aktienmärkte, wegen deren Struktur und Eigenschaften. Allerdings, durch die starke Korrelation zwischen den Spot- und den Futures-Märkten, wird es möglich auf dem Spot-Markt zu handeln, geleitet durch die Dynamik von Angebot und Nachfrage auf dem gleichen Futures-Markt. Sie können beispielsweise die Open Interest Dynamik für die EURO Futures analysieren, aber den Spot EURUSD handeln. Jedoch werden wir für eine genauere Darstellung nur Futures Charts verwenden.

Sehen wir uns nun die Open Interest Dynamik für Gold über einen langen Zeitraum an:



Abbildung 1-8. Gold, Wochen-Chart


In Abbildung 1-8 sehen wir das Kurs-Chart (oben) und das Open Interest Chart (unten) für die Futures auf Gold von 2003 bis 2009. Man kann sehen, wenn die Open Interest Werte relativ hoch waren, vergliche mit seinen vorherigen Werten, begann der Markt zu fallen, Gleichzeitig, wenn die Open Interest Werte niedrig waren, begann der Markt zu steigen. Es ist auf einem Wochen-Chart nicht gut zu erkennen, aufgrund des langen Zeitraums, einschließlich einer kürzlich hohen Volatilität.

Was für das Gold zutrifft, trifft auch für jeden anderen Rohstoff zu. Das Gesetz von Angebot und Nachfrage funktioniert auf jedem Markt:



Abbildung 1-9. Sojabohnen, Wochen-Chart



Abbildung 1-10. US Staatsanleihen, Wochen-Chart


Wie Sie sehen, zeigen relativ niedrige Werte des Open Interest das Potential für das Marktwachstum, während relativ hohe Open Interest Werte das Potential für einen Preisrückgang zeigen. Der Markt kehrt nicht immer um, wenn das Open Interest minimale oder maximale Werte hat, und die Extremwerte von Open Interest deuten nicht immer auf eine sofortige Marktumkehr hin. Das Open Interest ist kein magischer Markt-"Schalter", aber es ermöglicht die zweite Dimension zu messen - das Marktvolumen, und die aktuelle Marktphase einzuschätzen.


Hier ist die erste Regel, die aus dem Gesetz von Angebot und Nachrage formuliert werden kann:

Wenn Open Interest extrem hohe Ebenen hat, versuchen Sie Short-Positionen zu öffnen.

Wenn Open Interest extrem niedrige Ebenen hat, versuchen Sie Long-Positionen zu öffnen.


2. Die Markt-Struktur

Wir haben ermittelt, dass der Markt - eine Institution oder ein Mechanismus ist, der Käufer und Verkäufer bestimmter Güter und Dienstleistungen zusammenbringt. Nun ist es an der Zeit diese Gruppen eingehender zu betrachten.

2.1 Hedger und Spekulanten sind Teil der Markt-Struktur.

Also, der Markt findet immer den Schnittpunkt von Angebot und Nachfrage. Dieser Punkt ist der Konsens-Preis der Waren, das heißt, der Preis zu dem Verkäufer bereit sind ein bestimmtes Volumen an Waren zu verkaufen und Käufern, die bereit sind dieses Volumen an Waren zu kaufen. Die Nachfrage und das Angebot ändern sich ständig unter dem Einfluss von fundamentalen, politischen, zufälligen und anderen Faktoren. Basierend auf dem Gesetz von Angebot und Nachfrage, ändert sich auch der Preis der Waren. Demzufolge, besteht eine gewisse Wahrscheinlichkeit, dass der zukünftige Preis höher oder tiefer sein wird als der aktuelle. Sobald der der Preis sich im Laufe der Zeit ändern kann, besteht für den Preis eine Unsicherheit in der Zukunft. Eine solche Unsicherheit über den zukünftigen Preis nennt sich Risiko [6].

Somit hält jeder Eigentümer von Waren das Risiko der nachteiligen Preisveränderungen in der Zukunft. Allerdings kann der Peis sic aufwärts oder abwärts verändern. Wenn der Preis sich abwärts verändert, würde es die Verluste aus dem Verkauf zu niedrigeren Preis i der Zukunft bedeuten, verglichen mit dem aktuellen Preis. Hingegen sollte der Anstieg in Rohstoffpreisen dem Eigentümer einen zusätzlichen Gewinn verschaffen. Typischerweise sind die wichtigsten Eigentümer von Waren auch ihre Hersteller.

Wenn das Produkt Weizen ist, kann der EIgentümer die General Mills Company sein, und wenn es Gold ist - kann der Eigentümer die Barrick Gold Corp. sein, usw. Während das Risiko der Preisänderung hoch ist, und die Haupteinnahmequelle dieser Unternehmen die Differenz zwischen den Produktionskosten und dem Verkaufspreis ist, sind sie daran interessiert das Risiko zu reduzieren, das in Folge des Besitzes der Waren aufkommt. Um dies zu machen, verwenden die Hersteller Sicherungsoperationen (Hedging) an den Rohstoff- und Finanzmärkten. Tatsächlich verkaufen die Hersteller ihr Risiko an andere, die es kaufen wollen. Als Ergänzung zu dem Risiko, haben die Käufer die Möglichkeit einen zusätzlichen Gewinn zu erzielen (Risikoprämie), für den Fall der günstigen Preisänderung.

Somit ist die Börse nicht nur ein zentraler Marktplatz. Die Börse ist auch ein zentraler Ort zum Kaufen und Verkaufen von Risiken und Prämien für sie.

Die Käufer von Waren und den mit ihnen verbundenen Risiken werden Spekulanten genannt. Das Hauptziel eines Spekulanten ist es, einen Gewinn aus der Differenz zwischen dem aktuellen und dem zukünftigen Preis zu erzielen. Spekulanten sind wie ein "Leim" zwischen dem Hersteller des Produkts und seinem Endverbraucher. Sie stelleneine hohe Liquidität des Marktes bereit, mit einer ausgeglichenen Änderung des Preises [4].

Die Sicherungsoperationen sind nicht so sehr eine Reduzierung des Risikos auf Null, es ist ein Weg ein sinnvolles Gleichgewicht zwischen Risiko und Gewinn zu finden. Wie sie weiter sehen, ermöglicht ein kompetentes Absichern das Nutzen einer Möglichkeit zur Spekulation. Durch die Überwachung der Dynamik der abgesicherten Positionen, ist es möglich die Anlage-Gruppe von großen produzierenden Unternehmen zu verbinden, die fast alles über den Markt in dem Sie arbeiten wissen.

In der Tat ist dieser Gesichtspunkt nicht ohne Bedeutung. Diese Unternehmen sind direkte Warenlieferanten, die an der Börse gehandelt werden - wer, wenn nicht die Hersteller, muss alles wissen, was in diesem Geschäftsfeld passiert? Diese Jungs haben vor den öffentlichen Augen und Ohren verborgene Informationen, sie wissen was niemand sonst weiß. Oder wie ist die Tatsache zu erklären, dass sie für viele Jahrzehnte erfolgreiche Teilnehmer an der Börse bleien, täglich Transaktionen für viele Millionen Dollar durchführen!

Die Überwachung von Spekulanten ist auch nicht ohne Bedeutung. Die Kaufebenen der Spekulanten geben die Momente an, in denen der Markt "überhitzt" ist, d.h. er ist in der dritten Phase, oder umgekehrt wenn er kalt ist (erste Phase) (siehe Teil 1). An Ende sind die Spekulanten die Hauptabnehmer der Waren, was bedeutet, dass wenn sie ihre Long-Positionen auf das Maximum aufgebaut haben, und sie keine weitere Möglichkeit zum Kaufen haben, kehrt der Markt um in die abwärts gerichtete Richtung.


2.2 Commodity Futures Trading Commission Berichtsanalyse

Jeder hat eine Möglichkeit die Positionen von Hedgern und Spekulanten zu beobachten, dank der amerikanischen Regierungsorganisation genannt "Commodity Futures Trading Commission"- CFTC. Tatsache ist, dass jede natürliche oder juristische Person einen Bericht über ihre begangenen Transaktionen an den Warenbörsen übermitteln müssen, wenn der Umfang dieser Geschäfte das von der Kommission festgelegte Niveau erreicht oder übersteigt. Einmal wöchentlich berichtet die Kommission über die kombinierten Positionen von Händlern.

Jeder Bericht wird auf der offiziellen Webseite veröffentlicht: www.cftc.gov. Der Bericht wird über den Zustand an jedem Dienstag erstellt und wird veröffentlicht am Freitagabend, europäische Zeit. Der Bericht selbst wird in mehreren Formen dargestellt: Excel Tabelle, CSV Textdatei Format, sowie als einfacher tabellarischer Text. Sie können außerdem die historischen Bericht für einen langen Zeitraum in Excel und CSV Formaten heruntergeladen werden. Die Berichte werden vorbereitet für Termingeschäft und Futures, sowie Optionsgeschäfte. Die Berichte haben eine kurze und eine erweiterte Form. Die erweiterte Form unterscheidet sich von der Kurzen durch das Vorhandensein der zusätzlichen Statistiken und Daten der Ernteerträge für einige Nutzpflanzen. In der Praxis werden die Excel oder CSV Dateien für die CFTC Berichtsanalyse verwendet. Schauen wir uns nun den kurzen Bericht über Weizen von 04. August 2009 an:




Tabelle 2-1. Der Weizen-Bericht vom 04.08.2009 (nur Futures)


Oben auf dem Bericht steht der Produktname, in diesem Fall ist es Weizen, gehandelt auf dem Chicago Board of Trade, die Art des Reports - nur Futures Positionen, und das Datum 04. August 2009. Die Matrix besteht aus vier Hauptspalten. Jede von ihnen stellt die kombinierten Short- und Long-Positionen von jeder der drei Händlergruppen dar. Die Gruppe von Händlern beinhaltet große Spekulanten. Die Berichte werden nicht-kommerzielle Händler genannt (NON-COMMERCIAL). Wir sehen, dass am 04. August 2009 große Spekulanten 75.933 Long-Kontrakte hatten, während es auf der Short-Seite 97.574 Kontrakte waren. Dies zeigt an, dass ihre Gesamt- oder Nettoposition Short war, und dies waren -21.641 Kontrakte. Normalerweise ist dies keine typische Situation für Spekulanten.

An den meisten, aber nicht an allen Märkten, sind sie reine Käufer, das heißt, ihre Long-Position ist immer höher als die Short. Nur mit dem Bericht für die Analyse ist es unmöglich zu bestimmen, ob diese Situation für diesen Markt typisch ist oder nicht. In jedem Fall müssen daran denken, dass die Netto-Position der Gruppe hier der wichtigste Parameter ist, und nicht Long- und Short-Position getrennt. Diese Netto-Position wird von der Mehrheit der Indikatoren für die Berechnung der Trader-Bericht-Analyse verwendet. Also, noch einmal: die Gesamt- oder Netto-Position ist die Differenz zwischen Long- und Short-Positionen, sie kann sowohl positiv als auch negativ sein, dies ist ihre Formel:

wobei NetPosition eine reine oder Gesamt-Nettoposition ist, i ist die Kategorie der Händler, wie große nicht-kommerzielle Händler oder große kommerzielle Händler.

Das nächste ist die Anzahl der großen Aufträge für nicht-kommerzielle Händler, welche in den sogenannten Spreads sind , oder Abdeckungen.

Larry Williams schreibt darüber folgendes: "Wenn ein nicht-kommerzieller Händler Terminkontrakte auf den Euro/Dollar hält, 2.000 Long-Kontrakte und 1.500 Short-Kontrakte, werden 500 Kontrakte in die "Long" Kategorie eingeschlossen und 1.500 Kontrakte sind "Absicherung" [1]. Einfach gesagt, die Abdeckung zeigt die Anzahl von Long- und Short-Kontrakten.

Es ist wichtig zu beachten, dass wir nicht die Verriegelung meinen. Zum Beispiel können Händler ein und den gleichen Rohstoff Future-Kontrakte mit gegenteiligen Positionen halten für unterschiedliche Monate der Erfüllung, oder gegenteilige Positionen auf den gleichen Rohstoff in Futures und Optionen. In dem Bericht, der Positionen von Optionen enthält, werden solche Fälle berücksichtigt.

Die zweite Gruppe reflektiert die Hedger Positionen. Sie werden auch Operatoren oder kommerzielle Händler genannt (COMMERCIAL). Typischerweise, aber nicht immer, sind die Operatoren reine Verkäufer, weil die meisten von ihnen Hersteller von Gütern sind, wie Weizen, Gold oder Schweine. Kommerzielle Händler sind aber auch Hersteller, die Güter als Grundlage für ihre Produkte verwenden, zum Beispiel Zuckerwatte oder ein Brot. Typischerweise, aber nicht immer, sind sie Verkäufer, das heißt, deren Kontakte stehen auf der Short Seite.

Im Allgemeinen, wenn die Preise auf ein niedriges Niveau gefallen sind, reduzieren Operatoren ihre Verkäufe auf ein Minimum, weil es nicht rentabel ist ihre Güter billig zu verkaufen. Gleichzeitig erhöhen auf der Gegenseite Operatoren, die ihre eignen Produkte herstellen, ihre Long-Positionen. Somit kann die Nettoposition der Operatoren Long sein, und auf der Nettoposition von Operatoren basierende Indikatoren werden sich im oberen Bereich befinden.


Betrachten wir einen besonderen Fall am Beispiel unseres Berichts über Weizen. Die Long-Seite der Operatoren hat 166.518 Kontrakte, während die Shot-Seite 130.979 Kontrakte hat. Ihre Nettoposition ist 35.539 Kontrakte, d.h. sie ist Long. Häufig bedeutet dies, der Preis von Gütern ist auf einem niedrigen Niveau, weil Operatoren weniger verkaufen als kaufen. In jedem Fall ist es erforderlich für die Bestimmung der genauen Situation ein Chart der Nettoposition über einen langen Zeitraum zu verwenden.

Die ̔otal۠Spalte enthält einen Satz von Long- und Short-Positionen für die kombinierten kommerziellen und nicht-kommerziellen Händler. Sie ist nicht von praktischem Interesse.

Die ̎onreportable Positions۠Spalte enthält eine Anzahl von Long- und Short-Positionen nicht rechenschaftspflichtigen Händlern. Tatsächlich reflektiert diese Spalte die kleine Spekulanten-Position, deren Positionen zu klein sind, um in die Gruppe der Spekulanten aufgenommen zu werden. Diese Positionen werden über eine synthetische Rechnung berechnet - von dem Wert des Open Interest (OI) werden die gesamten Long- und die gesamten Short-Positionen der gemeldeten Händler abgezogen. In unserem Fall ist der OI 322.431 Kontrakte, wobei Long 293.237 Kontrakte sind, was bedeutet 29.194 Kontrakte sind auf der Long-Seite der nicht rechenschaftspflichtigen Personen (322-431 - 293.237). Die gleiche Rechnung kann für die Short-Seite durchgeführt werden: 322 431 - 279 339 = 43 092 Kontrakte.

Hier sind die Änderungen in der Anzahl der Kontrakte im Vergleich mit dem vorherigen Bericht. Es folgt der Anteil jeder Kategorie im Open Interest und unten die Anzahl der Trader in jeder Kategorie. Diese Daten werden in der Praxis nicht verwendet.

Zusätzlich zu dem Bericht gibt es, wie weiter oben erwähnt, Berichte welche die Optionspositionen einschließen. Alle Optionspositionen werden in ein Futures-Äquivalent gewandelt und direkt zu den Futures-Positionen hinzugefügt. Der gleiche Bericht über Weizen, aber mit kombinierten Optionen- und Futures-Positionen sieht wie folgt aus:



Tabelle 2-2. Der kurze Weizen-Bericht von 04.08.2009, Futures und Optionen


Trotz der unterschiedlichen Zahlen, ergeben beide Arten des Berichts ähnliche Diagramme der Positionsänderungsdynamik. Dennoch ist es zu bevorzugen den Bericht mit den enthaltenen Informationen über Optionspositionen zu verwenden, da diese ein kompletteres Volumen des Marktes berücksichtigen. Werfen Sie einen Blick auf den erhöhten Wert der "Spreads" Spalte. Jetzt werden die Werte in dieser Reihe durch den Vergleich von Long- und Short-Positionen für nicht-kommerzielle Händler dominiert. Dies begründet sich durch die Tatsache, dass kommerzielle Händler meistens Optionen verwenden, um ihre Futures Positionen abzudecken.


Untersuchen wir nun die erweiterte Form des Berichts, der die Positionen von Futures und Optionen auf den gleichen Weizen beinhaltet:



Abbildung 2-3. Der vollständige Weizen Futures und Optionen Bericht vom 04.08.2009


Wie Sie sehen, enthält der Bericht zusätzliche Statistiken über alte Positionen für jede der drei Gruppen an Händlern. Da alle diese Berichte in der Dynamik über einen langen Zeitraum analysiert werden, ist diese Information ohne Interesse.


2.3 Beobachten großer Hedger Positionen

Also, es ist Zeit die Statistiken über Käufe und Verkäufe von Hedgern zu kompilieren und deren Handlungen über einen langen Zeitraum zu beobachten. Zum Beispiel werden wir das bereits vorgestellte Weizen Kurs-Chart verwenden, mit dem Indikator, der die Long- und Short-Positionen von Operatoren zeigt. Das Chart besteht aus Wochen-Balken und deckt den Zeitraum von Mitte 2001 bis Mitte 2009 ab:



Abbildung 2-4. Weizen, Long- und Short-Positionen von Operatoren, Wochen-Balken


Die grüne Linie zeigt Long-Positionen von Operatoren, die rote Linie entspricht den SHort-Positionen von Operatoren. Alle Positionen sind in absoluten Zahlen angegeben, sie heben kein Zeichen. es ist erforderlich anzunehmen, dass die rote Linie die absolute Menge an Short-Positionen darstellt, und grün - die absolute Menge an Long-Positionen. Im Allgemeinen dominierten Short-Positionen von Operatoren bis zum Frühjahr 2004 (rote Linie über der grünen), danach hatten die Operatoren mehr Käufe als Verkäufe (grüne Linie über der roten). Ein solches Diagramm zeigt keine Schlüssel-Bruchstellen. Jetzt werfen wir einen Blick auf das gleiche Chart, aber mit einem Indikator über Gesamt-Nettopositionen von Operatoren:



Abbildung 2-5. Gesamt-Nettoposition für die Operatoren, Wochen-Balken


Hier sehen weitere interessante Momente. Beachten Sie, dass, als die Nettoposition der Operatoren relativ hoch war, der Markt nach einiger Zeit aufwärts ging. Gleichzeitig, als die Nettoposition der Operatoren relativ niedrig war, ging der Markt nach einiger Zeit abwärts. Natürlich, nicht alle der Indikator-Prognosen bewahrheiten sich, aber wenn man zumindest an einem korrekten Punkt einsteigt, wäre es ein enormer Gewinn

Achten wir auf die extrem hohe Nettoposition von Operatoren Ende 2005! Nie davor oder danach hatten die Operatoren derart hohe Werte der Nettoposition. Und jetzt sehen Sie sich an, was danach am Markt passierte. Es begann die unaufhaltsame Aufwärtsbewegung, die sich mehr als 2 Jahre fortsetzte. Im Ergebnis stieg der Preis um mehr als 700 (!) USD. Es gab einige andere Momente, die uns die Möglichkeit für Spekulation zeigen.

Zum Beispiel, nach einem starken Preissturz Ende 2007, denken viele vielleicht, dass der bullishe Trend enden würde. Scheinbar dachten die Operatoren nicht so. Während andere versuchten ihre Kong-Positionen zu reduzieren (wir wissen es von den Händlerberichten), kauften die Operatoren den Markt auf! Der Anstieg kam bald. Sein Höchstpreis wurde aktualisiert, und dann begann die Panik. Während diesen vier Monaten stieg der Preis um weitere 400$! Die von den Operatoren gegebenen Verkaufssignale waren nicht so überzeugend. Dennoch, in vielen war der Händler in der Lage dem Markt sicher zu entkommen, wenn er einfache Trailing Stop Techniken verwendete. In jedem Fall konnten alle Verluste mit einem guten Geschäft kompensiert werden..

Die Schlüsselwörter sind hier "kurz danach". Vergessen Sie nicht, dass dieser Indikator nicht mit dem Preis berechnet wird. Er ist von von ihm komplett unabhängig. Wir könnten das Kurs-Chart entfernen, aber der Indikator der Nettoposition würde weiter die gleichen Werte anzeigen. Der Preis ist die jüngste Marktänderung. Die erste Änderung betrifft das Gleichgewicht der Angebot- und Nachfrage-Kräfte, und auch davor, ändert sich die Meinung von den großen Marktteilnehmern. Durch die Beobachtung was die Operatoren machen, sind wir Zeugen der Entwicklung des Marktes in einer sehr frühen Phase, wenn die Preisänderung noc nicht eingetreten ist. Es gibt uns den einzigartigen Vorteil, in eine halbleeren Anhänger der zukünftigen Trend-Lokomotive Platz zu nehmen. Wenn die Bewegung beginnt, werden viele dort zu spät sein, aber nicht die Trader, die den Kommission-Bericht nutzen!

Beobachten wir Gold und Silber durch das Prisma der Operatoren:



Abbildung 2-6. Das Gold und die Nettoposition der Operatoren. Wochen-Balken


Das Chart des Goldpreises ist voll von günstigen Gelegenheiten zur Spekulation. Nicht alle von ihnen führen zu übermäßigen Gewinnen, aber viele von ihnen können ein beträchtliches Einkommen erbringen. Wenn ein Trader seine Einstiegspunkte mit dem über mehrere Jahre anhaltenden bullishen Haupttrend korrelierte, konnte er ein großer Gewinner sein. Lassen Sie mich daran erinnern, wir betrachten die Momente, in denen die Nettoposition der Operatoren hoch genug waren, diese Punkte sind potentielle Einstiegspunkte zum Kaufen. Das gleiche gilt für Verkäufe: wir suchen nach relativ niedrigen Niveaus der Nettoposition und versuchen bei der Suche nach einem günstigen Moment zum Verkaufen Short zu gehen.

Beachten Sie den Wahnsinn, zu dem es im Gold Ende 2008 kam. Nach einem starken im September endenden Rückgang, begann es einen unerwarteten Anstieg. Tatsächlich stieg der Goldpreis innerhalb von einem Tag um 90 Dollar! Dann war dies der Höchstpreis bis Ende September, aber er hielt nicht lange an. Kurz danach kam es zu einem neuen Absturz, und Ende Oktober aktualisierte das Gold seinen Jahrestiefststand.

Konnten wir diese Erschütterung zumindest teilweise voraussagen? Ja, wir konnten es mit dem Report on Traders voraussagen. Achten Sie darauf, dass nicht lange vor dem bullishen Freitag (der Tag, an dem der Goldpreis "überraschend" um 90 Dollar anstieg) Operatoren aufhörten Gols zu verkaufen.

Sie sind die Hersteller in diesem Markt, und all die Jahre gab es nicht eine einzige Woche, in der dir Käufe die Verkäufe überstiegen. In der Tat, ihre Weigerung zu verkaufen brachte Panik unter die Bullen. Es gab einen Mangel an Edelmetall, der den Preis aufwärts bewegte.

Obwohl die Preise nicht lange auf einem solchen Olymp blieben, verkauften die Operatoren einiges von ihrem Edelmetall an Gold-Bullen, welche die letzten waren, die auf das Preishoch reagierten. Im Weiteren hat der Fall des Goldpreises begonnen, nach dem die Operatoren ihre Goldverkäufe auf das vierjahres-Tief reduzierten (ihre Nettoposition stieg an(siehe Chart)). Außerdem sahen wir den Effekt des Wettbewerbs der Verkäufer. Der Warenmangel begann den Preis zu heben, und dies könnte ein guter Impuls sein etwas Geld zu verdienen.

Gehen wir nun zu dem Chart von Silber:



Abbildung 2-7. Das Silber und die Nettoposition der Operatoren. Wochen-Balken


Und wieder sehen wir das gleiche wie für Gold. Immer wenn die Nettoposition einen relativen Höchststand erreicht, machte der Silberpreis einen neuen Sprung Richtung Sonne. Die relativ niedrigen Niveaus zeigten die Rezession in dem Aufwärtstrend von Silber.

Die Schlussfolgerung ist die folgende. Die Märkte für Edelmetalle werden weitestgehend von einer kleinen Gruppe von Fachleuten kontrolliert. Jeder Trader, der an diesen Märkten rentabel handeln möchte, sollte den Einfluss dieser Kräfte berücksichtigen.


2.4 Index einer Nettoposition

Aber woher wissen wir, was die "relativ" hohe Nettoposition ist, und was ist tief? Wie von Larry Williams angemerkt wird, ist der Boden für den Einen die Decke für den Anderen. Deshalb ist es wichtig den standesgemäßen Indikator zu verwenden, der deutlich über die Phasen unserer Position informieren würde. ein solcher Indikator existiert, er nennt sich der COT Index. Der Index ist eine übliche Stochastik, berechnet für die Werte unserer Position.

Erinnern wir uns an seine Formel [1]:


Der aktuelle Preis wird mit dem Höchstpreis für drei Jahre verglichen. Der Index kann für jeden Zeitraum berechnet werden, nicht nur für drei Jahre. Es ist besser einen Zeitraum zu verwenden, der nicht kleiner als 26 Wochen ist, d.h. ein halbjahres-Index. In den langfristigen Geschäften wird ein 156-Wochen (drei Jahre) Index verwendet. Der Index zeigt die relative aktuelle stärke in Prozenten, verglichen mit der aktuellen Periode.


Hier ist eine Beispiel der Index-Berechnung für die unten aufgeführten Operatoren, die Zahlen auf der rechten Seite zeigen die Anzahl der Kontrakte [1]:


Wert aktuelle Woche

350

Minimaler Wert der letzten 3 Jahre

-150

Differenz

200

Der maximale Wert der 3 letzten Jahre

750

Der Minimale Wert der 3 letzten Jahre

-150

Differenz

600

Index = (200/600)x100=0,33x100=33%;

In diesem Fall sind die Operatoren eher bearish als bullish. Wenn der Index extrem tiefe Niveaus erreicht, d.h. sich in dem 20% Bereich befindet, neigt der Markt dazu zu fallen. Erreicht der Index extrem hohe Niveaus, d.h. er befindet sich im 80% Bereich, tendiert der Markt zu einer Aufwärtsumkehr.

Um dies zu bestätigen, schauen wir auf das gleiche Sibler-Chart, aber mit 156-Wochen Operatoren-Index:



Abbildung 2-8. Silber und 156-Wochen Operatoren-Index, Wochen-Balken


Sie können andere Ebenen verwenden, z.B. 25% und 75%. Die Bedeutung bleibt unverändert, der Indikator wird potentiell überkaufte und überverkaufte Bereiche anzeigen.

Seltsam genug, aber der Zeitraum des Index ändert nicht die Dynamik der zu kontrollierenden Positionen. Hier ist ein Beispiel mehrerer Indizes mit unterschiedlichen Mittelungszeiträumen für Silber:




Abbildung 2-9. Silber Chart mit verschiedenen Zeiträumen für den Index der Silber Operatoren, Wochen-Balken


Hier haben wir (von oben nach unten) 156-Wochen, 104-Wochen, 52-Wochen und 26 Wochen Mittelung für die Indizes der Operatoren verwendet. Nur der 26-Wochen Index zeigt eine häufigere Bewegungsamplitude. Die anderen Perioden der Mittelung sehen sehr ähnlich aus und ändern die Form des Indikators nicht. Der Mittelungszeitraum ist abhängig von den persönlichen Vorlieben. Sie können zum Bespiel die 156-Wochen Periode verwenden, sie zeigt die Dynamik in der Änderung von Positionen ziemlich breit, und gleichzeitig gibt er ein eindeutig interessantes Ergebnis für bullishe Positionen.

Der COT Index wird nicht nur zum Beobachten der bullishen Operatoren verwendet, sondern auch für nicht-kommerzielle Händler, sowie kleine Spekulanten.


2.5 Die Open Interest Struktur

In dem ersten Teil haben wir den Einfluss der Rohstoff-Volumen auf ihren Preis analysiert. Um das Volumen der Güter am Markt zu messen, ist die Verwendung des Open Interest (OI) sehr effektiv. Die Wirtschaftstheorie sagt voraus, dass der Markt, der durch relativ hohe Niveaus des Open Interest gekennzeichnet ist, am meisten zu einer Abwärtsumkehr neigt. Die gleiche Regel gilt für den Markt mit mit relativ kleinen Open Interest Werten. In diesem Fall bewegt sich der Preis am ehesten aufwärts.

Jetzt ist es Zeit die Struktur zu untersuchen. Aus den Trader Reports wissen wir, das die wichtigsten Akteure auf dem Futures-Markt Hedger sind, auch bekannt als Operatoren und "nicht-kommerzielle Händler" - meist große Rohstoff-Fonds vertretend. Außerdem gibt es eine dritte, kleinere Größe an Händlern - Scalper oder sogenannte "Masse" (eng. Crowd). Wegen dem kleinen von ihnen ausgeführten Handelsvolumen, sind die nicht in der Lage die Marktpreise zu beeinflussen. Das Geschäftsvolumen dieser Kategorie wird indirekt berechnet und stellt die Differenz dar, zwischen dem Open Interest und der Gesamtmenge der offenen Positionen von Operatoren und nicht-kommerziellen Händlern.

Die wöchentlichen Open Interest Werte werden in den CFTC Berichten vorgestellt. Da das OI die kumulative Anzahl der geöffneten Long- und Short-Positionen ist, wie es immer ist, können seine Ebenen auf zwei Arten berechnet werden, durch Zählen der gesamten Long-Positionen, oder durch Zählen der gesamten Short-Positionen.

Hier sind die Formeln:

OI = Nicht-kommerzielle Händler Long + Nicht-kommerzielle Händler Spreading + Operatoren Long + Nicht-Meldepflichtig Long;
OI = Nicht-kommerzielle Händler Short + Nicht-kommerzielle Händler Spreading + Operatoren Short + Nicht-Meldepflichtig Short;

Kommen wir jetzt zu dem Bericht über die Euro Futures vom 04. August 2009, und berechnen das Open Interest für diesen Markt mit diesen zwei Formeln:



Tabelle 2-10. Euro Futures Bericht vom 04. August 2009

OI = 61 443 + 946 + 22 984 + 52 864 = 138 237;
OI = 34 337 + 946 + 72 454 + 30 500 = 138 237;

Unabhängig von der Open Interest Berechnungsformel, ist das Ergebnis das gleiche. Allerdings, wie Sie sehen, werden Long-Positionen meist von großen nicht-kommerziellen Händlern gehalten (61.337 Kontrakte), während die Operatoren Short-Positionen bevorzugen (52.864 Kontrakte). Die Berechnung des Anteils jeder der drei Gruppen im Open Interest wäre eine logische Fortsetzung der Analyse der Open Interest Struktur. Zum Beispiel betrug der Anteil der Short-Position Angaben für die Periode bis 52,4% des Open Interest (78 454 / 138,237 x 100%). Sein Wert wird vorgestellt in dem Abschnitt ̐ercent of Open Interest for each category of tradersۮ

Allerdings ist es interessant die Anteil-Änderungsdynamik von jeder der drei Gruppen von Händlern zu betrachten. Wenn wir diese Informationen für den langen Zeitraum sammeln, können wir das entsprechende Chart konstruieren. Der Indikator ̍eta Cot: Percent Position in OIۮ Er berechnet diese Daten für jede dieser drei Händlergruppen.

Die Abbildung 2-11 zeigt das langfristige Chart für japanischer Yen Futures. Jedes Mal, wenn der Anteil der Short-Position der Operatoren 70% und mehr des Open Interest ausmachte, war der Yen nah an der Abwärts-Umkehr. Das gleiche gilt für die Aufwärts-Umkehr. Fast jedes Mal wenn der Anteil der Short-Position der Operatoren unter 30% des Open Interest war, war der Markt nah an seinem Tiefpunkt und häufig begann danach sein langfristiger Aufwärtstrend in der Bewegung. Solche Fälle werden durch eine rote gestrichelte Linie dargestellt.



Abbildung 2-11. Anteil der Operatoren Short-Positionen am Open Interest. Japanischer Yen, Wochen-Balken


Larry Williams schlägt in seinem Buch "Trade Stocks & Commodities with the Insiders: Secrets of the COT Report" [1] vor, die Open Interest Werte mit der Nettoposition der Operatoren in einem Indikator zu kombinieren. In der Tat, wenn die relative Nettoposition der Operatoren tief genug ist, und sie gleichzeitig einen wesentlichen Marktanteil halten, kann angenommen werden, dass der Markt nah an seiner Spitze ist und bald abwärts drehen wird.

Dieser Indikator wird berechnet durch die Formel:

Stochastik Oszillator (Net Operatoren / OI);

Mit anderen Worten, die Nettoposition der Operatoren dividiert durch das Open Interest. Diese Daten werden über einen langen Zeitraum gesammelt, der Stochastik Indikator berechnet mit diesen Daten. Dieser Indikator nennt sich Williams Commercial Index, oder einfach WILLCO. Larry Williams empfiehlt einen 26-Wochen oder sechs-Monate Durchschnitt zu verwenden, aber Sie können andere Arten der Mittelung verwenden, wie jährliche (52-Wochen) oder Drei-Jahres (156-WOchen) Mittelung.

Seine Verwendung ist die gleiche wie die des COT Index. Immer wenn sein Wert 80% überschreitet - erwarten Sie, dass der Markt abwärts dreht, immer wenn sein Wert unter 20% ist, erwarten Sie die Aufwärts-Umkehr des Marktes. In Abbildung 2-12 ist der WILLCO Indikator für den japanischen Yen dargestellt. Die roten gepunkteten Linien zeigen die gleichen Ebenen, die von Larry Williams auf dem gleichen Chart umrissen wurden [1]:



Abbildung 2-12. Der gemittelte WILLCO (26 Wochen) und der japanische Yen, Wochen-Balken

Wie wir sehen, waren weitere Empfehlungen dieses Indikators nicht so genau. Allerdings beseitigt das Erhöhen des Zeitraums dieses Problem. Werfen Sie einen Blick auf das Chart der US-Staatsanleihen und den gleichen Indikator, aber mit einem gemittelten Zeitraum von 156 Wochen:



Abbildung 2-13. Gemittelter WILLCO (156 Wochen) und US-Staatsanleihen, Wochen-Balken


Jetzt haben wir extrem niedrige Niveaus markiert, sowie extrem hohe Niveaus. Die Indikatorgenauigkeit ist erstaunlich, aufgrund der Tatsache, dass seine Daten nicht auf den Kursdaten basieren! Zweifellos sind die US-Schatzbriefe empfindliche gegenüber den Handlungen von Operatoren.


2.6 Momentum Indikator

Dieser Indikator wurde vorgeschlagen von Stefan Brice, in seinem Buch «The Commitments of Traders Bible». Seine Idee ist einfach, er stellt die Differenz zwischen dem aktuellen COT-Index und dem gleich Index 6 Wochen zurück dar, also lautet seine Formel:

COT-Index (p) – COT-Index(p-n);

Wobei p der aktuelle Wert ist, n ist ein Zeitraum gleich 6.

Das Index-Delta kann jedes sein, nicht nur die 6-Periode. Zusätzlich kann der Index für alle Teilnehmer des Futures-Marktes berechnet werden, und auch für das Open Interest selbst. Dieser Indikator nennt sich Movement Index. Er wird in der Hauptsache zur Bestätigung für Korrektur Abschluss zu langfristigen Trends. Seine Interpretation ist einfach. Wenn der Movement Index über 40% steigt - die aktuelle Aufwärtsbewegung kommt zu ihrem Ende. Ein Preisrückgang ist zu erwarten.

Versuchen wir diesen Indikator auf die Futures des Euro anzuwenden:



Abbildung 2-14. Movement Index für EURO Futures


Während der vergangen Jahre hatte der Euro einen stabilen Aufwärtstrend. Die blauen Pfeile zeigen die Zeiten, in denen er die 40% Barriere kreuzte. Achten Sie auf die unglaubliche Genauigkeit des Indikators, jedes Mal nachdem er die 40% Ebene gekreuzt hatte, war die Kurskorrektur abgeschlossen und der Euro hat seinen Anstieg fortgesetzt. Die Verkaufssignale des Indikators waren nicht so genau. Allerdings hat die Korrektur häufig eigesetzt, nachdem der Movement Index die untere Grenze von -40% gekreuzt überschritten hatte. Eine solche Reaktionsfähigkeit des Indikators sollte berücksichtigt werden. Es ist eine Art von COT Dynamik-Barometer. Es zeigt deutlich die Marktturbulenzen. Seine Verwendung ist besonders nützlich für den aggressiven und weniger langfristigen Handel.

Der nächste Indikator ist ein experimenteller und wurde vorher noch nirgendwo beschrieben. Im neunten Kapitel seines Buches erklärt Larry Willams die Open Interest Änderungen über die Handlungen der Operatoren. es ist nicht genau klar, wie diese Beziehung zu verwenden ist. Für einige Beispiele zeigt Larry Williams die Divergenz/Konvergenz. Für die anderen Beispiele schlussfolgert er, dass die Verkäufe anheben, oder auch die Käufe das Niveau des Open Interest anheben. Die Untersuchung der Index-Bewegung führte zu dem Gedanken, das es möglich ist die Änderungen in den Positionen der Operatoren über die Veränderung des Open Interest Niveau zu überwachen.

Die interessantesten Interaktionsmodelle sind die folgenden:

1. Open Interest Niveau ist fallend - die Nettoposition der Operatoren wächst.

2. Open Interest Niveau ist steigend - die Nettoposition der Operatoren geht zurück.

Mit anderen Worten, es gibt eine gewisse Diskrepanz in den Handlungen aller Marktteilnehmer (Open Interest) und den Handlungen der Operatoren. Solche Änderungen wären am besten basierend auf dem Movement Index zu beobachten, berechnet für den Open Index und für den Operatoren Index. Durch Vergleichen der Differenz können wir die Divergenz der Hedger Handlungen und der Handlunge der übrigen Marktteilnehmer bestimmen.

Dieser Indikator wird Spread Movement Index genannt, seine Formel ist:

Movement Index (Operatoren) – Movement Index (Open Interest);

Im Allgemeinen sieht er wie ein einfacher Bewegungs-Index aus, so wie der WILLCO wie der COT Index aussieht. Dier annähernd kritischen Niveauwerte sind 60% und entsprechend -60%. Die Analyse wird nach den gleichen Regeln durchgeführt wie bei dem normalen Bewegungs-Index.

Betrachten wir das Indexverhalten am Beispiel der Euro Futures:



Abbildung 2-15. Spread Movement Index EURO


Man kann sehen, dass seine Werte auch die wesentlichen Umkehrpunkte und die Momente der abgeschlossenen Korrektur zeigen. Allerdings sollte dieser Indikator mit Vorsicht weingesetzt werden - seine Effizienz ist nicht bewiesen.


2.7. Beobachten der großen Hedge-Fonds Positionen

Das Hauptziel der großen Rohstoff-Fonds ist ein spekulativer Gewinn an den Rohstoffmärkten. Die von ihnen verwendeten Handelsmethoden basieren auf der allgemeinen Trendfolge. Sobald der Preis eine bestimmtes n-Wochen Hoch überschreitet, öffnen einige der Fonds Long-Positionen. Dies führt zu einer zusätzlichen Aufwärts-Preisbewegung. Vielleicht einer der wichtigsten Gründe für die mittelfristige Marktentwicklung, sind die Handlungen der großen Rohstoff-Fonds.

Nach einigen Einschätzungen wählen Fonds ein 26-Wochen Hoch/Tief am häufigsten. Fonds treten nach und nach in den Markt ein, unter Verwendung zusätzlicher Technik für ihre Positionen, neben vielen Fonds, die langfristigere Strategien für den Einstieg nutzen. Zum Beispiel, wenn der Preis sein 26-Wochen Hoch erreicht, öffnen einige der Fonds Long-Positionen. Dann bewegt der Preis sich weiter aufwärts und erreicht sein 52-Wochen Hoch. Vorsichtigere Fonds treten dem Spiel bei und öffnen Long-Positionen, zusammen mit ihnen stocken die Fonds, die bereits gekauft haben, ihre Positionen auf. An diesem Punkt haben diejenigen, die kaufen wollten, bereits gekauft, das sind alle. Es gibt jetzt keine Käufer mehr.

Die Trendstrategien aller Fonds sind maximal beteiligt. Der Markt wurde extrem belastet. Aufgrund der Tatsache, dass es keine Käufer mehr gibt, wir wissen es aus den Trader Berichten, sollte der Preis bald sinken... und bald macht er es. Der Preis beginnt seine Abwärtsbewegung. An diesem Punkt hat der Markt eine extrem hohe Anzahl an Teilnehmern (wir wissen es aus dem Open Interest Niveau), sie beginnen die Panik.

Zunächst beginnen die Käufer, die später als andere in den Markt eingetreten sind, ihre Long-Positionen zu schließen. Sie haben noch keinen ausreichenden Gewinn erzielt, um ihre langfristigen Positionen zu halten. Das gibt dem Preis eine zusätzliche Beschleunigung und er beginnt schneller zu fallen. Bald steigert sich die Panik und mehr und mehr Teilnehmer versuchen ihre Long-Positionen zu schließen. Jeder versucht sich durch ein Tor zu quetschen. Die Panik wächst so sehr, dass der Preis in einem sehr kurzem Zeitraum abstürzt.

Nachdem die Masse den Markt verlassen hat und der Preis an seinem Tiefpunkt war, genau danach, beginnen die Operatoren ihr Spiel und kommen wieder an den Markt und fügen ihre Long-Positionen hinzu. Deren Grundgedanke ist einfach - die Operatoren, welche die Rohstoffe zur Produktion ihrer Güter benötigen, sind daran interessiert zu billigen Preisen zu kaufen. Operatoren dagegen reduzieren ihre Verkäufe auf ein Minimum, wenn es nicht rentabel ist die Güter zu tiefen Preisen zu verkaufen. Als Ergebnis wird die Nettoposition der Operatoren extrem hoch sein. Indikatoren werden diese Tatsache entsprechend anzeigen. Der Nachfrage-Wettbewerb wird einsetzen und der Preis wird wieder steigen. Der Kreis schließt sich und die Geschichte wir sich wiederholen.

Untersuchen wir die Handlungen von großen nicht-kommerziellen Händlern, auf Basis der obigen Konzepte mit dem Drei-Jahres-Index, angewandt auf eine Nettoposition der nicht-kommerziellen Händler:



Abbildung 2-16. Rinder-Futures Preise und Gesamt-Nettoposition nicht-kommerzieller Händler

Wie wir am Beispiel der Rinder-Futures erkennen, sehen die Handlungen der nicht-kommerziellen Händler so aus, wie der aktuelle Preistrend. Wenn der Preis steigt, kaufen die Fonds, wenn er fällt verkaufen sie, es ist einfach. Lassen Sie uns anmerken, dass jedes Mal wenn die Fonds ihre Positionen bis zu Maximalwerten erhöht haben, der Rinderpreis seine Abwärtsbewegung begonnen hat. Wenn die Position der Fonds nah an ihrem Minimalwert war, begann der Preis wieder zu steigen.

Ich denke, dass der finanzielle Erfolg der Investoren, die sich entschieden haben ihr Geld in solche Fonds zu investieren, in Frage stehen. Ähnliche Handlungen nicht-kommerzieller Händler sind die gleichen auf anderen Märkten:



Abbildung 2-17. Baumwolle Chart und 156-Wochen gemittelte Nettoposition nicht-kommerzieller Händler

Während die Index-Spitzen klar die kommende Marktumkehr zeigen, waren die tiefen Werte in der Regel verfrüht. In jedem Fall zeigt dieses Chart, dass es besser ist Short zu gehen, wenn die "großen Jungs" verkaufen.


2.8 Beobachten der Positionen der kleinen Spekulanten

Nach der CFTC Spezifikation sind kleine Spekulanten alle diejenigen, die zu kleine Positionen haben um eine der zwei oben genannten Gruppen zu erreichen. Ihre genauen Werte sind unbekannt, obwohl angenommen werden kann, dass die Gesamtzahl ziemlich beeindruckt. Zum Beispiel können Sie sich an einen kurzen CFTC Bericht über Weizen an der Chicago Handelsbörse wenden:



Tabelle 2-18. Der Anteil von kleinen Spekulanten in dem kurzen Bericht über Weizen


Wie wir aus dem Bericht sehen, ist die Gesamtzahl der wichtigen Marktteilnehmer klein. Auf der Short-Seite - 286, und auf Long - 304. 286 der Marktteilnehmer halten 91,8% aller Long-Positionen und 304 Händler haben 88,5% aller Short-Positionen. Können wir diese wichtigen Marktteilnehmer als Masse bezeichnen? Ich denke nicht. Aber viele Händler, die in dem Kommissionsbericht nicht gezählt wurden, sind kleine Spekulanten, die die Marktmasse erzeugen.

In diesem Fall kontrolliert die Masse nur 8,2% der Long-Positionen und 11,5% der Short-Positionen. Es wäre schon ziemlich bemerkenswert, die Käufe und Verkäufe dieser Händlerkategorie zu beobachten. Gehen wir zu dem GBP Chart über einen langen Zeitraum, aber diesmal betrachten wir die Gesamt-Nettoposition der kleinen Spekulanten:



Abbildung 2-19. Gesamt-Nettoposition kleiner Spekulanten auf GBP Futures


Beachten Sie, dass jedes Mal wenn die Gesamt-Nettoposition der Masse ihre relativ hohen Werte erreicht hat, kaum eine Abwärtsbewegung des Marktkurses begann. Wenn die Masse dagegen von dem GBP enttäuscht war und anfing zu verkaufen, begann der GBP Kurs eine Rallye. Besonders bemerkenswert waren die letzten Punkte, die durch rote Linien markiert sind. Nach einen großen Sturz des Pfund, haben die kleinen Spekulanten entschieden, das der Tiefststand erreicht und die Aufwärtsbewegung unvermeidlich ist. Innerhalb einer Woche wurden sie von Netto-Verkäufern zu Netto-Käufern. Allerdings war der Tiefststand noch nicht erreicht. Das Pfund setzte seinen Abstieg über zwei Monate fort. Während dieser Zeit hat sich die Stimmung in der Masse geändert, und es waren wieder überwiegend Verkäufer. Und die Masse lag wieder falsch. Das Pfund zeigte eie ordentliche Rallye.

Die allgemeine Regel für die Analyse der Handelsaktivitäten dieser Gruppe ist einfach. Versuchen Sie gegenteilig zu der Masse zu handeln. Wenn Händler aus unerklärlichen Gründen ihre Verkäufe erhöhen - versuchen Sie zu kaufen, wenn sie im Gegenteil anfangen zu kaufen - versuchen Sie es Short.


3. Technische Lösung

3.1 Das Ziel und die Struktur des MetaCOT Projekts

Also, wir haben alle Indikatoren des Projekts betrachtet, es ist Zeit deren Struktur zu untersuchen. Ein klares Verständnis ihrer Funktionsprinzipien wird ihnen Helfen viele Probleme bei der Datenaktualisierung und ihrer Einrichtung zu vermeiden.

Als erstes betrachten wir die Prinzipien der Software, hier sind sie:

1. Transparenz. Der gesamte Projekt-Quellcode ist offen und für jeden verfügbar. Jeder kann diese Tools herunterladen und kompilieren. Darüber hinaus ist sein Funktionsprinzip in diesem Artikel beschrieben, so wird es transparent und für jeden verständlich sein.

2. Allgemeingültigkeit. Die Software enthält alle in dem Buch von Larry Williams zur CFTC Datenanalyse beschriebenen Tools, einschließlich seines WILLCO Indikators, der in allen anderen Projekt fehlt. Darüber hinaus enthält die Software spezielle Skripts, die Informationen auf eine spezielle Weise gruppieren. Als Ergebnis können Sie die verschiedenen Tools automatisch verbinden und sogar Neue erzeugen! Zusätzlich ist die Projektarchitektur entworfen für ein einfaches Erstellen von auf dem COT-Projekt basierenden neuen Indikatoren. Die grundlegenden COT-Daten können mit einer einzelnen Funktion abgerufen werden für die gewünschten Daten). Und diese Daten können für Berechnungen in einem anderen Indikator verwendet werden.

3. Automatisierung. Die CFTC Daten sind extrem groß. Sie enthalten Informationen über Hunderte von Märkten, und jede Marktinformation ist verstreut über verschiedene Dateien und Jahre. Die Verwendung der Meta COT Skripte stellt nun keine Problem dar. Alles was Sie tun müssen, ist die aktualisierte CFTC Datei herunterladen (einmal pro Woche) und das Skript laufen lassen. Alle Daten werden automatisch extrahiert, gruppiert und sind fertig für die Verarbeitung.

4. Unkompliziertheit. Alle erstellten Indikatoren und Skripte wurden mit der MWL Programmiersprache erstellt, ohne jegliche Drittanbieter-DLLs. WIr haben die einfachsten Algorithmen für die Datenorganisation und Berechnungen verwendet. Wir haben die Probleme voneinander getrennt. So wurden die skriptbasierten Programme für das Programm entwickelt für Gruppierung, zum Vereinen, für die Ausgabe und für das erzeugen neuer Daten. Und diese Daten werden für die Indikator-Konstruktion verwendet.

5. Unabhängigkeit. Einer der wichtigsten Faktoren für den Empfang der Informationen, ist die Anzahl der Übertragungs-"Knoten". Wenn die Informationen direkt von der Quelle zum Ziel übertragen werden, ist die Wahrscheinlichkeit einer Verzerrung viel geringer, als wenn es einige Vermittler zwischen der Quelle und dem Ziel gibt. Das gesamte Projekt ist auf eine Art und Weise umgesetzt, dass die erforderlichen Informationen direkt von der Quelle entnommen werden, ohne einen weiteren Drittanbieter.

Das Projekt enthält einen Satz mit mehreren Programmdateien, die nicht kompiliert sind. Jede Datei muss in ein bestimmtes Verzeichnis platziert und kompiliert werden. Die folgende Tabelle enthält eine Liste an Dateien, ihre kurze Beschreibung und den Installationsort:

Dateiname

Typ

Ziel

Beschreibung

Meta COT Script Build.mq4

Script

..\Meta Trader\experts\scripts\

Das wichtigste unabhängige Skript für die Datenvorbereitung. Erstellt einen Satz Dateien aus Standard CSV-Dateien, verfügbar auf dem CFTC.gov Server. Jede neue Datei enthält eine Information über ein Instrument. Der Name der erstellten Datei entspricht dem Namen des Instruments.

Meta COT Script Concatenate.mq4

Script

..\Meta Trader\experts\scripts\

Ein unabhängiges Skript. Es verbindet mehrere Dateien zu einer, basierend auf der Historie. Zum Beispiel die Datei "COT - SUGAR NO. 11 - NEW YORK BOARD OF TRADE. CSV" (mit Daten für den Zeitraum 2005.01.04-2007.08.28) und die Datei "COT - SUGAR NO. 11 - ICE FUTURES U.S. .CSV" (mit Daten für den Zeitraum 2007.09.04-2009.09.01) werden in eine Datei "SUGAR CONCATENATE" konvertiert, die Daten von 2005.01.04 bis 2009.09.01 enthält.

Meta COT Script Agregation.mq4

Script

..\Meta Trader\experts\scripts\

Ein unabhängiges Skript. Es verbindet mehrere Dateien zu einer, basierend auf der Summe ihrer Werte. Zum Beispiel, die Dateien "COT - WHEAT - CHICAGO BOARD OF TRADE. CSV", "COT - WHEAT - KANSAS CITY BOARD OF TRADE. CSV", "COT - WHEAT - MINNEAPOLIS GRAIN EXCHANGE. CSV" werden zu einer Datei "WHEAT AGREGATION" konvertiert, mit der Summe der Werte von allen drei Dateien.

Meta COT Script Report.mq4

Script

..\Meta Trader\experts\scripts\

Das Skript benötigt eine Bibliothek "cotlib.mq4". Es erstellt die Berichtsdatei CSV, einschließlich Berechnungen für alle Indikatoren. Der Mittelungszeitraum und der Instrumenten.Name werden in den Skript-Einstellungen bestimmt. Es kann nützlich sein für die Datenanalyse in anderen Programmen.

Meta COT Absolute Position.mq4

Indicator

..\Meta Trader\experts\indicators\

Das Skript benötigt eine Bibliothek "cotlib.mq4". Es zeigt die absolute Position von Händlern in allen Kategorien, einschließlich des Open Interest.

Meta COT Net Position.mq4

Indicator

..\MetaTrader\experts\indicators\

Das Skript benötigt eine Bibliothek "cotlib.mq4". Es zeigt die Nettopositionvon Händlern in allen Kategorien, einschließlich des Open Interest.

Meta COT Index.mq4

Indicator

..\Meta Trader\experts\indicators\

Das Skript benötigt eine Bibliothek "cotlib.mq4". Es zeigt den COT Index aller Händlerkategorien, einschließlich des Open Interest Index. Der Zeitraum für die Berechnung wird in den Skript-Einstellungen bestimmt.

Meta COT Percent Position in OI.mq4

Indicator

..\MetaTrader\experts\indicators\

Das Skript benötigt eine Bibliothek "cotlib.mq4". Es zeigt das Ergebnis der Division der Nettoposition durch das Open Interest für jede Händlerkategorie.

Meta COT WILLCO.mq4

Indicator

..\Meta Trader\experts\indicators\

Das Skript benötigt eine Bibliothek "cotlib.mq4". Es zeigt den WILLCO Index für alle Händlerkategorien. Der Zeitraum für die Berechnung wird in den Skript-Einstellungen bestimmt.

Meta COT Movement Index.mq4

Indicator

..\Meta Trader\experts\indicators\

Das Skript benötigt eine Bibliothek "cotlib.mq4". Es zeigt den Movement Index und das Open Interest für jede Händlerkategorie. Die Mittelungs- und Momentum-Perioden werden in den Skript-Einstellungen bestimmt.

Meta COT Spread Movement Index.mq4

Indicator

..\Meta Trader\experts\indicators\

Der Indikator benötigt eine Bibliothek "cotlib.mq4" Er zeigt eine Division des Movement Index durch das Open Interest für jede Händlerkategorie.

Meta COT Expert.mq4

Expert advisor

..\Meta Trader\experts\

Der Expert Advisor benötigt eine Bibliothek "cotlib.mq4". Er testet die COT Indikatoren auf historischen Daten.

cotlib.mq4

Library

..\Meta Trader\experts\libraries\

Sie ist ein Kern des Systems. Sie enthält COT Daten und Methoden für ihre Verarbeitung. Sie hat einen großen Satz an Arrays, Definitionen und Funktionen für alle verwendeten Indikatoren.

ONCATENATE.ini

File with list

..\Meta Trader\experts\files\

Ist eine Dateiliste, mit Listen zum Kombinieren nach Zeit.

COT - * CONCATENATE.ini

File lists

..\Meta Trader\experts\files\

Ist eine Datei mit Dateilisten zum Kombinieren nach Zeit.

AGREGATION.ini

File with list

..\Meta Trader\experts\files\

Ist eine Dateiliste mit Listen zum Kombinieren nach Summe.

COT - * AGREGATION.ini

File lists

..\Meta Trader\experts\files\

Ist eine Datei mit Dateilisten zum Kombinieren nach Summe.

Tabelle 3-1. Meta COT Projekt Dateien mit Installationspfaden

Sie müssen diese Dateien in die entsprechenden Verzeichnisse installieren und dann kompilieren. Nach diesen Schritten muss das Terminal die entsprechenden MetaTrder benutzerdefinierten Indikatoren, Skripte und Expert Advisor erhalten.


3.2 Daten laden und Berichte erstellen

Wie Sie wissen, werden alle Indikatordaten durch eine nicht-kommerzielle Organisation CFTC bereitgestellt. Diese Daten werden wöchentlich auf der offiziellen CFTC Webseite veröffentlicht. Es gibt mehrere Arten an Berichten. Die erste Art nennt sich Futures Only Reports, er enthält nur Daten über Futures Positionen. Die zweite Art nenn sich Futures-and-Options Combined Reports, er enthält die Daten über Futures und Optionen

Er bietet viel komplettere Informationen über den Markt, und es ist bevorzugt zu verwenden. Außerdem gibt es eine besondere Art an Bericht, genannt Commodity Index Trader Supplement. Der Hauptunterschied ist, dass er vorbereitet ist für den begrenzten Bereich der Agrarmärkte, und, was das wichtigste ist, er enthält die vierte Händlerkategorie, die sogenannte Commodity Index Traders (CIT).

Diese Händler besetzen eine Zwischenstellung. Auf der einen Seite gehört ihre Position zu den Hedgern, sie sind enthalten in den «Futures Only Reports» und «Futures-and-Options Combined Reports», auf der anderen Seite - ist ihr Verhalten ähnlich dem Verhalten von großen Hedge-Fonds. Im Allgemeinen sind sie Netto-Käufer, im Gegensatz zu klassischen Hedgern, die Netto-Verkäufer sind. Es gibt die Meinung, dass diese Händler Panik am Markt verursachen. Die scharfen Abstürze und Anstiege - sind meistens deren Handlungen. Sie haben ausreichend Kraft um den Markt in jede Richtung zu bewegen, und gleichzeitig, ihr Hauptziel, einen spekulativen Gewinn zu erzielen. Daten für diese Händlerkategorie sind verfügbar ab 2007 in Excel und CSV Formaten. Wegen der kleinen Historie ihrer Handlungen, ist die Untersuchung von ihrem Verhalten eine Aufgabe für die Zukunft. Gegenwärtig wird diese Art von Bericht nicht von dem Projekt unterstützt.

Die Berichte werden in verschiedenen Formaten veröffentlicht. Zunächst sind es die Handelstabellen selbst. In diesem Format gibt es keinen Bericht Commodity Index Trader Supplement, der nur in Excel und CSV Dateien verfügbar ist.

Die Form dieser Tabellen ist ihnen vertraut:


Abbildung 3-1. Der Teil des COT Berichts im Tabellen-Format


Außerdem gibt es normale Excel-Tabellen. Sie enthalten die gleichen Daten wie in dem konventionellen Bericht, mit dem einzigen Unterschied, dass sie über einen langen Zeitraum gesammelt wurden. Ein Ausschnitt von dieser Tabelle wird in Abbildung 3-2 gezeigt:



Abbildung 3-2. Ein Teil den COT Bericht im Excel-Format


Die Kommission veröffentlicht ihre Berichte in CSV. Dieses Format stellt eine Textdatei mit der «txt» Erweiterung dar, die Daten werden durch Komma getrennt. Dies ist das einzige Format, das Meta COT verwendet, also sollte dieses Format detaillierter beschrieben werden. In Abbildung 3-4 ist ein Ausschnitt aus dieser Datei:



Abbildung 3-4. COT Bericht Bespiel im CSV Format


Seine Struktur scheint chaotisch, ist es aber nicht. Die Datei besteht aus Zeilen und Spalten. Die Anzahl der Spalten ist 128, die Anzahl der Zeilen ist abhängig von der Anzahl an Instrumenten und dem Berichtszeitraum. Typischerweise enthält eine Berichtsdatei Daten für ein Jahr. Zum Beispiel, Der im September 2009 heruntergeladene Bericht in diesem Format, enthält Daten von Januar 2009 bis September 2009 (der Zeitpunkt des Verfassens dieses Artikels). Die erste Zeile besteht aus 128 Spalten, es sind die Spaltennamen. Die CSV-Dateien sind die Grundlage für den Aufbau der Projektdaten.

Erstellen wir jetzt ein Diagramm. Es ist vorteilhaft die COT Daten für einen langen Zeitraum zu betrachten. Bereiten wir die Daten von 2000 bis zur Gegenwart vor. Also, gehen wir zu der Adresse http://cftc.gov/marketreports/commitmentsoftraders/CFTC009781.html oder zu dem Abschnitt Home> Market Reports > Commitments of Traders, auf http://cftc.gov.

Wir werden ein Bild wie das folgende sehen:


Abbildung 3-5. Datenarchiv


Es gibt dort zwei Arten von Berichten: Nur Futures und Futures und Optionen kombiniert. Wir wollen die Daten von 2000 verwenden, es sinnvoll die zweite Art des Berichts mit Futures und Optionen zu verwenden (übrigens, die Daten vor 1995 sind nur für Futures verfügbar). Allerdings haben sie das gleiche Berichtsformat, und Sie können eine dieser beiden Berichtsarten nutzen. Laden Sie alle neun Textdateien für 2009 herunter. Später können Sie auch eine einzelne Datei herunterladen, die alle Daten von 1995 bis 2008 enthält und eine Datei für 2009, aber in einem solchen Fall, wird es eine große Anzahl an Instrumenten geben. In Abbildung 3-5 ist eine der Referenzen mit einem roten Kreis umrandet. Die heruntergeladenen Dateien sollten entpackt werden in das Verzeichnis ..\Meta Trader Ordner\experts\files\.

Alle Dateien in den Archiven haben den gleichen Namen annualof.txt, also müssen sie umbenannt werden. Der Dateiname kann beliebig sein, aber der Dateiname muss in der names.ini aufgeführt sein, es ist eine spezielle Konfigurationsdatei des Projekts. Es ist sehr einfach und stellt eine einfache Auflistung der zu verarbeitenden Dateien dar.

Zum Beispiel, wenn wir die Datei mit dem Namen "2009_Futures-and-Options.txt" für 2009 haben, "2008_Futures-and-Options.txt" für 2008 und so weiter, wird die Liste der verarbeiteten Dateien wie folgt aussehen:



Abbildung 3-6. Ein Beispiel einer verarbeiteten Liste für das COT Projekt


Wenn Sie die heruntergeladenen Dateien auf die gleiche Weise umbenennen wie in dem Beispiel, müssen Sie die names.ini Datei nicht bearbeiten. Das Skript wird standardmäßig mit diesem Satz Dateien arbeiten. Wenn Sie, aus welchen Gründen auch immer, andere Namen verwenden müssen, dann geben Sie die Namen in der names.ini an, anstatt der standardmäßig angegebenen.

Also, in dem Verzeichnis \files müssen Sie 10 Dateien haben, wie in Abbildung 3-6 gezeigt:



Abbildung 3-7. Die Inhalte des Ordners MetaTrader\experts\files


Die names.ini sollten die gleichen sein wie in Abbildung 3-6. Beachten Sie, dass die Reihenfolge der Dateinamen in der Datei nemes.ini wichtig ist. Die Dateinamen müssen in absteigender Reihenfolge angeordnet sein. Zum Beispiel sollte die erste 2009 sein und die letzte 2000.

Jetzt, wenn die Daten vorbereitet sind, ist es an der Zeit das Meta COT Script Build Skript auszuführen. Es arbeitet im automatischen Modus und es hat nur eine Option - den Namen der Dateiliste. In diesem Fall ist der Dateiname "names.ini", aber er kann geändert werden. Es ist erforderlich zur flexiblen Lösung einiger Probleme.

Nehmen wir beispielsweise an, dass Sie für einig Instrumente nur die Furures Daten analysieren wollen, ohne die Daten der Optionen. Gleichzeitig wollen Sie für andere Instrumente einen vollständigeren Bericht über Furtures und Optionen. Sie können zwei Arten des Berichts auf Ihren Computer herunterladen, und erstellen die zwei Listen der Dateien, zum Beispiel names_option.ini und names_futures.ini.

Zuerst können Sie die Daten über Futures erhalten, durch ausführen eines Skripts mit einem Parameter "names_list" gleich zu "names_futures.ini". Danach müssen diese Daten in einem anderen Ordner gespeichert werden. Dann werden die notwendigen Daten durch das laufende Skript wieder abgerufen, jedoch dieses Mal mit einem Parameter "names_list" gleich "names_option.ini". Die Daten für Futures und Optionen werden erzeugt.

Kurz nachdem das Skript ausgeführt wird, werden viele Dateien mit Berichten im CSV Format in dem Ordner "\files" erzeugt. Jede solche Datei wird eine Form haben wie "COT - Markt Name - Name der Börse. CSV".

Viele der Dateien werden nicht vollständig sein. COT Berichte haben für manche Märkte die Eigenschaft kurz zu erscheinen, und dann für immer zu verschwinden. Trotzdem gibt es eine ausreichende Anzahl an Instrumenten, die einen regelmäßigen Bericht haben. Später werden wir die enthaltenen Instrumente genauer betrachten, aber jetzt richten wir unsere Aufmerksamkeit auf die erzeugten Dateien. Betrachten wir das von ihnen verwendete Format: "COT - NEW ZEALAND DOLLAR - CHICAGO MERCANTILE EXCHANGE. CSV". Es ist leicht zu erkennen, dass sie die Informationen enthält, die wir für die Neuseeland Dollar Futures benötigen.


Öffnen wir sie in Notpad und sehen uns den Inhalt an:



Abbildung 3-8. Neuseeland Dollar


Man kann sehen, dass diese Datei Statistiken über einen langen Zeitraum für ein Instrument enthält, in diesem Fall für den Neuseeland Dollar. Spalten mit Namen fehlen, da diese Dateien von Indikatoren verwendet werden, die keine Spalte mit dem Namen benötigen. Trotzdem, um zu verstehen was diese Nummern bedeuten, sehen wir uns jede Spalte an:

I - Name des Instruments,
II - Berichtsdatum,
III - Open Interest,
IV - Long-Positionen von nicht-kommerziellen Händlern,
V - Short-Positionen von nicht-kommerziellen Händlern,
VI - Spread (Abdeckung) von nicht-kommerziellen Händlern,
VII - Long-Positionen von Operatoren,
VIII - Short-Positionen von Operatoren,
IX - Die kumulative Anzahl der Long-Positionen der berichtenden Händler,
X - Die kumulative Anzahl der Short-Positionen der berichtenden Händler,
XI - Long-Positionen nicht zurechenbarer Händler,

XII - Short-Positionen nicht zurechenbarer Händler.

Das ist alles was Sie benötigen um den COT Indikator zu konstruieren.

In dieser Phase sind die gleichen Marktinformationen in unterschiedlichen Dateien. Dies kommt durch die Tatsache, dass zunächst die Namen der Aktienbörsen sich im Lufe der Zeit ändern, die Kommission den Namen der Instrumente selbst ändern kann, oder, noch wahrscheinlicher, einfach durch einen Fehler in ihrem Titel. Die Änderung das Namens eines Instruments, selbst bei nur einem Zeichen, führt zu einem deutlichen Unterschied für das Programm, dass die Daten extrahiert.

Zum Beispiel, die Instrumente "COT - SUGAR NO. 11 - COFFEE SUGAR AND COCOA EXCHANGE" und "COT - SUGAR NO. 11 - COFFEESUGAR AND COCOA EXCHANGE" sind völlig unterschiedlich für das Programm, und es wird zwei verschiedene Titel für die Instrument-Dateien erzeugen. Werfen wir einen Blick auf das Beispiel mit dem Zucker. Nach dem ausführen des Skripts Meta COT Script Build ein \files Verzeichnis wird unter vielen Dateien diese haben:

COT - SUGAR NO. 11 - COFFEE SUGAR AND COCOA EXCHANGE .csv
COT - SUGAR NO. 11 - COFFEESUGAR AND COCOA EXCHANGE .csv
COT - SUGAR NO. 11 - ICE FUTURES U.S. .csv
COT - SUGAR NO. 11 - NEW YORK BOARD OF TRADE .csv
COT - SUGAR NO. 14 - COFFEE SUGAR AND COCOA EXCHANGE .csv

Die letzte Datei gehört zu einer anderen Klasse von Zucker, und sie enthält zu wenige Daten um verwendet zu werden, also kann diese Datei sofort entfernt werden. Wie man aus dem Namen erkennen kann, die erste und die zweite Datei - entsprechen dem gleichen Instrument. die Kommission erstellte manchmal einen Bericht für dieses Instrument mit grammatikalischen Fehlern, welche die Erzeugung der zweiten Datei beeinflusst haben. Die dritte und vierte Position enthalten die Dateien für den gleichen Zucker, aber an anderen Börsen: "ICE FUTURES" und "NEW YORK BOARD OF TRADE".

Wenn Sie diese Dateien öffnen, ist es möglich die Chronologie des Zuckerhandels zu erkennen:

Zucker Dateiname

Handel Beginn-Datum

Handel Enddatum

COT - SUGAR NO. 11 - ICE FUTURES U.S. .csv

2007.09.04

2009.09.01

COT - SUGAR NO. 11 - NEW YORK BOARD OF TRADE .csv

2005.01.04

2007.08.28

COT - SUGAR NO. 11 - COFFEE SUGAR AND COCOA EXCHANGE .csv

2003.02.25

2004.12.28

COT - SUGAR NO. 11 - COFFEESUGAR AND COCOA EXCHANGE .csv

2003.01.07

2003.02.14

Tabelle 3-9. Dateien mit Berichten über Zucker

Wie es aus der Handelschronologie zu ersehen ist, beschreiben alle Datendateien das gleiche Produkt. Daher ist es logisch, alle diese Dateien in eine fortlaufende Berichtsdatei zu kombinieren. Zu diesem Zweck gibt es das Skript Meta COT Script Concatenate. Das Skript benötigt eine spezielle Datei mit den Aufzählungen, zum Beispiel SUGAR CONCATENATE.ini. Alle Zucker-Dateien, die zum Verbinden zu einer einzigen Chronologie benötigt werden, sollten hier aufgelistet werden, für die Arbeit mit den Zucker-Dateien zum Erstellen einer Dateiübertragung, wie SUGAR CONCATENATE.ini. Sie sollte alle zu kombinierenden Zucker-Dateien ein einer einzelnen chronologischen Reihenfolge auflisten.

Der Dateiname mit der Dateiliste muss in die zentrale Dateiliste CONCATENATE.ini eingefügt werden. Die Datei enthält die Namen aller Dateien, deren Chronologie für die Kombination erforderlich ist. Das Meta COT Projekt hat die entsprechenden Dateien, sie haben das folgende Format: COT - NAME TOOL CONCATENATE.ini. Diese Namen sind in der CONCATENATE.ini Dateiliste aufgelistet.

Nachdem alle Dateilisten vorbereitet wurden, können Sie das Skript Meta COT Script Concatenate ausführen. Nach seinem kurzen Ausführen wird es kombinierte Dateien mit dem gleichen Namen wie die Dateien erzeugen, jedoch im Format SCV.

Zum besseren Verständnis der Logik der Verarbeitung, werfen wir einen Blick auf die Abbildung 3-10. Die Hierachie der Dateien CONCATENATE.ini, SUGAR CONCATENATE.ini und einigen anderen sieht so aus:



Abbildung 3-10. Beziehungen der Dateien in concatenate.ini Dateiübertragungen


3.3 Kombinierte Berichte als ein neues Analyse-Werkzeug

Es gibt viele verbundene Güter, die einen CFTC Bericht haben. Zum Beispiel, sind der Marktpreis für Mastrinder und lebende Rinder stark korreliert. Der Weizen wird an drei US-Börsen gehandelt und ihre Preise liegen sehr nah aneinander.

Es ist natürlich anzunehmen, dass die Handlungen der Teilnehmer an diesen Märkten auch annähernd die gleichen sein werden. Warum also nicht die Berichte dieser Märkte in einem kombinierten Bericht zusammenfassen? Zum Beispel, wenn Operatoren 20.100 Kontrakte in dem Markt für lebende Rinder haben und 15.200 Kontrakte in dem Markt für Mastrinder, dann hat ihre kombinierte Rinder-Position am Markt eine Menge von 35.300 Kontrakten. Eine solche Addition kann für alle Marktteilnehmer vorgenommen werden, sowohl für Long-Positionen. als auch für Short-Positionen.

Wir können noch weiter gehen, und die Handlungen aller Parteien am Markt mit einer gemeinsamen Varietät kombinieren. Wie wäre es, ihre Berichte für alle Währungs-Futures in einem Bericht zu kombinieren, und damit unsere eigene Version des Dollar-Index zu erhalten? Oder wir können die Berichte von allen Aktienindizes von S&P 500 und Dow Jones 30 kombinieren. Das resultierende Instrument wird viel größere Volumen enthalten, und es wird nicht nur die Ansicht eines Teilnehmers an einem bestimmten Markt beinhalten, sondern die Branche als Ganzes!


Diese Idee war zu unglaublich schön um unrealisiert zu bleiben. Stellen SIe sich vor, das Meta COT Projekt hat ein Tool dieser Art. Es nennt sich Meta COT Script Agregation. Es funktioniert wie das Meta COT Script Concatenate, mit dem Unterschied im Algorithmus für die Berichtskombinierung. Es erfordert eine bestimmte Instrumentenliste zum Kombinieren, die Dateinamen dieser Instrumente müssen in einer einzelnen Datei gelistet sein, der Dateiname dieser Datei muss der Dateiliste mit der Liste aller ähnlichen Dateien hinzugefügt werden.

Versuchen wir unseren eigenen Dollar-Index zu erstellen. Zunächst müssen wir die Datei "Dollar Index Agregation.ini" erzeugen und mit den Namen der Berichte für alle Wahrungs-Futures füllen:

COT - EURO FX CONCATENATE.csv
COT - BRITISH POUND STERLING CONCATENATE.csv
COT - JAPANESE YEN CONCATENETE.csv
COT - AUSTRALIAN DOLLAR CONCATENATE.csv
COT - CANADIAN DOLLAR CONCATENATE.csv
COT - SWISS FRANC CONCATENATE.csv

Beachten Sie, dass die Dateien selbst unter Verwendung des Skripts Meta COT Script Concatenate verschmolzen wurden. Sobald die Namen gelistet sind, können Sie eine "COT - DOLLAR INDEX AGREGATION.ini" genannte Datei in dem Verzeichnis MetaTrader/expert/files speichern. Der Name kann alles sein, aber wir werden diesen verwenden. Dann müssen Sie die Datei AGREGATION.ini erzeugen. Sie bestimmt den Namen unseres Verbandes: COT - DOLLAR INDEX AGREGATION.ini.

Jetzt können Sie die Datei speichern und das Skript Meta COT Script Agregator ausführen. Das Skript hat nur einen Parameter - es ist der tatsächliche Name der Dateiliste, die fortfahren muss. Weil in unserem Fall der Name der Dateiliste "AGREGATION.ini", sollte sein Parameter wie die gleichnamige Datei eingestellt werden. Das Skript wird die Werte aller in der Dateiliste "COT - DOLLAR INDEX AGREGATION.ini" enthaltenen Instrumente summieren. in unserem Fall wird sie sechs Dateien mit Berichten über alle Währungen verwenden, und eine neue Datei mit dem Namen "COT - DOLLAR INDEX AGREGATION.csv" erzeugen. Diese Datei wird die summierten Werte der Berichte aller Währungs-Futures enthalten.

Die Liste von Dateiberichten, die summiert werden kann, ist nur durch Ihre Fantasie begrenzt. Mit diesem leistungsstarken Werkzeug können Sie einen neuen Bericht erstellen, eine neue Art der Information! Die wichtigste nützliche Sache ist, das alle Handlungen automatisch ausgeführt werden und sie die Werte nicht manuell summieren müssen.

Allerdings können einige Berichte keine Daten für den angegebenen Zeitraum enthalten, verglichen mit den anderen zu der allgemeinen Verarbeitungsliste gehörenden Berichten. In diesem Fall wird das Programm eine solche Zeitlücke erkennen und Sie mit einer Nachricht wie der folgenden informieren: «--> Time Gap has Found: 21.04.2004.» Daran ist nicht falsch, es ist in der Tat typisch und passiert regelmäßig. In diesem Szenario wird das Programm die Daten aller anderen Instrumente zusammenfassen und einen Bericht erstellen, einschlie0lich dem Datum 21.04.2004. Zusätzlich zu den Daten für das fehlende Datum, wird es Daten über den naheliegendsten früheren Zeitraum enthalten. Dies wird das erste zu verarbeitende Datum sein. Zum Beispiel, der zusammengefasste Bericht für den 21.04.2005 wird die Daten für den 14.04.2004 enthalten, in dem Fall der fehlenden Daten für den 21. April.

Passen Sie auf, wenn Sie berichte kombinieren. Die eine Gruppe an Instrumenten kann die gleichen Kontraktpreise haben, die andere Gruppe kann unterschiedliche haben. Ein einfaches Beispiel: der S&P500 Index und zwei Futures Kontrakte auf ihn: E-mini S&P500 und vollumfänglicher S&P500. Ein elektronischer Future-Kontrakt ist gleich zu dem Index-Wert von *5$, der vollumfängliche ist gleich dem Index-Wert von *25$. Trotz der Tatsache, dass der große Markt-Zwilling den kleinen elektronischen Markt-Zwilling in Bezug auf die Menge der Kontrakte umfasst, kann ihre Kapitalisierung gleich sein und der vollumfängliche S&P500 kann auch höher kapitalisiert sein. Die Frage über den kompetenten Zusatz von Werten aus den verschiedenen Märkten bleibt offen, allerdings gibt es das grundlegende zusätzliche Werkzeug bereits heute und es kann mit Bedacht angewandt werden.

3.4 Indikatoren

Alle Indikatoren sind nach einem Prinzip angeordnet und enthalten den gleichen Kern. Der Indikatorkern lädt alle Daten und berechnet die Werte für alle Meta COT Projekt Indikatoren. Jeder Indikator zeigt nur die Werte, die durch seine Aufgabe bestimmt wurden, aber tatsächlich enthält er innerhalb seines Codes die Werte aller möglichen Indikatoren. Dieser Ansatz hat sich als äußerst erfolgreich erwiesen, insbesondere beim Gestalten des Handelsroboters. Da in der Bibliothek cotlib.mq4 alle möglichen Werte der Indikatoren berechnet werden, kann sie als Parameter zur Optimierung angegeben werden!

Es bedeutet, dass der Roboter nach jedem neuen Durchlauf einen neuen Indikator und seinen Berechnungszeitraum verwenden wird. Auf diese Weise werden der beste Indikator und der beste Zeitraum bestimmt. Es kann nützlich sein um die am besten geeigneten Indikator und Gruppe an Händlern zu ermitteln.

Jetzt, wenn alle erforderlichen Berichtsdateien vorbereitet sind, müssen diese in die Indikatoren geladen werden. Alle Indikatoren sind ähnlich und haben eine ähnliche Struktur in ihren Parametern.

Betrachten wir als Beispiel den Meta COT Net Indikator:


Variable Typ

Variable Name

Standardwert

Beschreibung

intperiod

156

Zeitraum für die Indikator-Berechnung. Sie wird für den Indikator verwendet, der einen Zeitraum für die Berechnung benötigt (COT Index, WILLCO etc). In der Regel wird 156-Wochen Mittelung verwendet.

oolShowNoncomm

false

Wenn true, zeigt der Indikator die Gesamt-Nettoposition der nicht-kommerziellen Händler.

boolShowOperators

true

Wenn true, zeigt der Indikator die Gesamt-Nettoposition der Operatoren.

boolShowNonrep

false

Wenn true, zeigt der Indikator die Gesamt-Nettoposition der nicht meldepflichtigen Händler.

boolShowOI

true

Wenn true, zeigt der Indikator den Open Interest Index.

boolload_cot_file

false

Wenn true, lädt der Indikator die Berichtsdatei mit dem Namen, der in der cot_file Variable angegeben ist.

stringcot_file

cot-sample.txt

Die Variable enthält den Berichtsdateinamen, der für das Laden erforderlich ist, wenn die Variable load_cot_filegleich true ist.

stringsettings

settings.txt

Eine Konfigurationsdatei für die Korrespondenz zwischen Indikator und Bericht. Das Programm ermittelt den Namen des aktuellen Charts in der Datei und verwendet den Bericht mit dem gleichen Namen.

Abbildung 3-11. Variablen des Meta COT Net Position Indikator


Erstens, alle Indikatoren die eine Mittelung verwenden, haben eine externe Variable period. Standardmäßig ist sie eingestellt auf 156 (3-Jahre Mittelung).

Zweitens, alle Indikatoren haben boolean Variablen. die es ermöglichen die Zeichnung des Indikators anzupassen (z.B. können Sie eine Gruppe der Marktteilnehmer bestimmen).

Drittens, die Indikatoren haben drei Variablen: load_cot_file, cot_file, settings. Betrachten wir sie genauer. Für alle Indikatoren gibt es eine sogenannte "Korrespondenz-Datei", die standardmäßig "settings.ini" genannt wird. Es ist äußerst umständlich, jedes Mal den Namen des Berichts von Hand auszuwählen, der für die Analyse des gewählten Charts heruntergeladen werden muss. Also benötigt jedes Instrument seinen eigenen Bericht. Die Datei settings.ini bestimmt, welche Art von Bericht Sie für das aktuelle Chart herunterladen möchten. Wenn beispielsweise die Variable load_cot_file gleich false ist, und Sie starten den Indikator Meta COT Net Position auf dem GBPUSD Chart, wird der Indikator automatisch den Bericht "COT - BRITISH POUND STERLING CONCATENATE.csv" auswählen und in das Chart laden. Das alles ist möglich dank der einfachen Datei, welche die Namen der Instrumente zu den Berichtsnamen zuordnet.

Meta Cot hat eine solche Datei bereits standardmäßig. Es ist eine typische CSV-Datei wie die folgende:

Dateiname des Berichts, Indikator-Name, die ersten maßgeblichen Zeichen des 1. Instruments, die ersten maßgebliche Zeichen des N. Instruments

Zum Beispiel, wenn Sie die Berichte COT - SWISS FRANC CONCATENATE.csv jedes Mal automatisch herunterladen möchten, wenn Sie den Indikator an das Chart 6S und USDCHF anfügen möchten, müssen Sie die folgende Zeile zu der Datei hinzufügen:
COT - SWISS FRANC CONCATENATE.csv;SWISS FRANC;6S;USDCHF

In diesem Fall ist das Symbol «6S» der Sammelname für verschiedene Futures des Schweizer Franken mit unterschiedlichen Ablaufdaten. Zum Beispiel, der Schweizer Franken gehandelt auf den Kontrakten 6S_CONT, 6SU9, 6SU9#I, 6SZ9, 6SZ9#I. Der erste von ihnen - fortlaufende Futures für Strategie Backtests. Für das System ist es ausreichend nur die ersten maßgeblich Zeichen anzugeben (in diesem Fall 6S), um den gleichen Bericht für alle Schweizer Franken für Indikatoren zu verwenden. Die letzte Zeile ist eine Art "Obergrenze". Wenn alle Dateiinhalte durchsucht wurden, und die erforderlichen Berichte nicht gefunden wurden. zeigt der Indikator den Namen des letzten Berichts. In diesem Fall wird anstatt des verwendeten Namen eine Warnmeldung ausgegeben: "REPORT FOR THE INSTRUMENT WASN'T FOUND!". In diesem Fall wird ein Bericht, dessen Name durch die Variable cot_file angegeben ist geladen, unabhängig von der Variable load_cot_file.

Beachten Sie, dass das Semikolon am Ende der Zeile fehlt. In diesem Fall wird der Indikator den Bericht COT - SWISS FRANC CONCATENATE.csv herunterladen, und der Indikator-Name wird sich ändern zu: Meta COT Index (156): SWISS FRANC. Der "SWISS FRANC" Name wird aus der zweiten Zeile der Spalte genommen, der Mittelungszeitraum wir durch die period Variable bestimmt, angegeben durch Klammern. Die gesamten Inhalte der Datei setting.ini, konfiguriert für die Arbeit mit den Instrumenten Ihres Brokers, ist in Abbildung 3-12 zu sehen. Beachten Sie, dass die Instrumente Ihres Brokers sich von diesen Namen unterscheiden können. Sie müssen die Namen der Instrumente bei Ihrem Broker ermitteln, und diese nach den oben beschriebenen Regeln der Datei settings.ini hinzufügen.

Es gibt einige Fälle, in denen die Instrument-Analyse das Herunterladen einer bestimmten Datei mit einem Berichtsnamen erfordert, der nicht den entsprechenden Standardwerten entspricht. In diesem Fall müssen Sie die Variable load_cot_file auf true setzen und dann den Namen der benötigten Berichtsdatei in der Variable cot_file angeben. Der Indikator wird die erforderliche Datei als Bericht laden, unabhängig von dem Namen dieses Tools.



Abbildung 3-12. Ein Beispiel der settings.ini Datei


Für eine breite Palette an Aufgaben, können Sie Drittanbieter-Programme, wie Microsoft Excel, für die Datenanalyse verwenden. In diesen Fällen ist es zweckmäßig die durch Meta COT berechneten Werte für die angegebenen Instrumente zu verwenden, und dann die Indikator-Werte mit einem Drittanbieter-Programm herunterzuladen. Für solche Fälle wurde das spezielle Skript Meta COT Script Report erstellt. Es benötigt die Bibliothek cotlib.mq4 für seine Funktion. Es hat die gleichen Parameter wie Indikatoren: Berechnungszeitraum (period) und Movement-Index (movement index). Nach seiner Ausführung für das aktuelle Instrument, wird es die Datei Meta COT Report REPORT TITLE.csv in dem \files Verzeichnis erzeugen. Diese Datei wird die Werte aller Indikatoren beinhalten, mit den grundlegenden Werten für das aktuelle Instrument.

Jetzt, wenn alle Indikatoren konfiguriert sind und arbeiten, ist es Zeit alle Berichte zu löschen. Meta COT aktualisiert die Daten nicht, und erstellt jedes Mal einen Satz von Grund auf neu oder hängt ihn an den bestehenden an. Es bedeutet, bevor Sie das Skript ausführen, müssen die alten Daten entfernt werden. Leider verfügt MetaTrader nicht über eine integrierte Funktion zum Löschen von Dateien, und wir müssen dies manuell machen. Der komfortabelste Weg die zu machen, ist das Erstellen einer Batch-Datei oder Bat-Datei.

Diese Datei existiert bereits und nennt sich erase_cot.bat. Sie enthält nur eine Zeile:

erase COT*.csv

Nach den Ausführen wird sie alle Dateien Löschen die mit COT beginnen und eine .csv Erweiterung haben.

Nach dem Löschen kann das Verfahren der Dateierstellung wiederholt werden.


3.5 Quellcode

Wir haben ein einfach zu verwaltendes, modifiziertes Projekt entwickelt, das einfach an jedes mechanische Handelssystem angepasst werden kann.

Der Mechanismus des Datenempfangs von dem SCV Kommission-Bericht ist in dem unabhängigen Programm Meta COT Script Build umgesetzt. Der Algorithmus ist ein sehr einfaches Programm, das einen hohen Grad an Handhabbarkeit und weitere Modifikationen sicherstellt. Zunächst öffnet das Programm eine Liste mit Namen von Dateien, die es zur Verarbeitung benötigt. Die Dateinamen werden in einer Datei in ihrem einzigen Parameter angegeben (standardmäßig names.ini). Wenn es den Namen der ersten Datei gelesen hat, versucht das Skript mit dem gleichen Namen aus dem Verzeichnis zu öffnen. ist die Datei vorhanden, beginnt das Skript die SCV Datei zu lesen, Spalte für Spalte, das Ende der Zeile setzt den Spaltenzähler zurück. Wenn der Spaltenzähler sich auf eine benötigte Spalte bezieht (geprüft durch eine spezielle Funktion), wird ihr Wert sofort in der Zieldatei erfasst und dahinter ein Semikolon geschrieben.

Es ist notwendig das Verfahren der abschließenden Datei-Erstellung genauer zu beschreiben. Wenn der Spaltenzähler angibt, dass das Programm gegenwärtig die erste Spalte abläuft (Instrument-Name), liest es den Namen und versucht eine Datei mit dem gleichen Namen zu öffnen. Ist die Datei nicht vorhanden, erzeugt das Programm sie, andernfalls hängt es die Daten am Ende der Datei an. Deshalb ist es erforderlich, bestehende Dateien jedes Mal vor der Datenaktualisierung zu löschen. Die nachfolgenden Spalten-Werte werden geladen und dieser Datei hinzugefügt. Nachdem der Spaltenzähler auf Null gesetzt wurde, schließt das Programm die aktuelle Ausgabedatei. Nachdem die Kommissionsbericht-Datei verarbeitet wurde, versucht das Programm die nächste in der Liste angegebene Datei zu öffnen.

Es stellt sich heraus, dass das Programm nicht weiß über den Namen der Futures oder die Reihenfolge ihrer Gruppierung. Im Prinzip könnten die Namen der Instrumente in zufälliger Reihenfolge angeordnet sein, und können sich in verschiedenen Dateien befinden. Das abschließende Ergebnis wird immer das gleiche sein: ein Instrument - eine Berichtsdatei.

Der Quellcode für Meta COT Script Build ist der folgende:

#property copyright "Copyright ɠ2009, C-4, All Rights Reserved."
#property link      "vs-box@mail.ru"
#property show_inputs
// Definitions
#define Market_and_Exchange_Names 1
#define As_of_Date_in_Form_YYMMDD 2
#define As_of_Date_in_Form_YYYY_MM_DD 3
#define CFTC_Contract_Market_Code 4
#define CFTC_Market_Code_in_Initials 5
#define CFTC_Region_Code 6
#define CFTC_Commodity_Code 7
#define Open_Interest_All 8
#define Nonc_Positions_Long_All 9
#define Nonc_Positions_Short_All 10
#define Nonc_Positions_Spreading_All 11
#define Commercial_Positions_Long_All 12
#define Commercial_Positions_Short_All 13
#define Total_Reportable_Pos_Long 14
#define Total_Reportable_Pos_Short 15
#define Nonrep_Positions_Long_All 16
#define Nonrep_Positions_Short_All 17

extern string name_list="names.ini";
//string normalize_name;
int a;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int CFileNames,
   cot_file,
   tools_data;

   int column,
   column_now,
   column_string;
   int cot;
   bool IsOldInfo=true;
   string name_cotfile;
   string data,data2,
   normalize_name,
   string_cot;

   CFileNames=FileOpen(name_list,FILE_READ|FILE_CSV);
   if(TrueFileName(CFileNames,name_list)==false)return(1);
   Print("The file list: ",CFileNames);
// Open a file list with reports
   while(FileIsEnding(CFileNames)==false)
     {
      cot++;
      name_cotfile=FileReadString(CFileNames);
      cot_file=FileOpen(name_cotfile,FILE_READ|FILE_CSV,",");
      if(TrueFileName(cot_file,name_cotfile)==false)return(1);
      else Print("File not found");

      // Skip first string
      while(FileIsLineEnding(cot_file)==false)
        {
         column++;
         FileReadString(cot_file);
        }

      while(FileIsEnding(cot_file)==false)
        {
         data=FileReadString(cot_file);
         column_string++;
         if(FileIsLineEnding(cot_file)==true || FileIsEnding(cot_file)==true)
           {
            column_string=0;
            FileWrite(tools_data,string_cot);
            FileClose(tools_data);
            string_cot="";
           }
         else
           {
            if(TrueDataNew(column_string)==true)
              {// check for the comma in the instrument name
               data=NormalizeData(data);
               if(column_string==Market_and_Exchange_Names)
                 {

                  data2=FileReadString(cot_file);        // see comment1!
                  if(CheckValidColumn(data2)==true)      //
                     data=data+NormalizeColumn(data2);   //
                  else column_string++;
                  //data=NormalizeNames(data);
                  tools_data=FileOpen("COT - "+data+".csv",FILE_READ|FILE_WRITE|FILE_CSV);
                  TrueFileName(tools_data,data);
                  FileSeek(tools_data,0,SEEK_END);
                  string_cot=string_cot+data;
                 }
               else
                 {
                  if(column_string==As_of_Date_in_Form_YYYY_MM_DD)data=ConvertData(data);
                  string_cot=string_cot+";"+data;
                 }
              }
           }
        }
      Print("Total lines: ",column);
     }
   Print(a);
   return(0);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string ConvertData(string data)
  {
   string c_data="";
   int strlen=StringLen(data);
   int char;
   for(int i=0;i<strlen;i++)
     {
      char=StringGetChar(data,i);
      if(char=='-')c_data=c_data+".";
      else c_data=StringConcatenate(c_data,CharToStr(char));
     }
   return(c_data);
  }
// If the current cell is necessary for combined COT report, it returns true,
// Overwise it returns false. The list of the cells used are set as defines
bool TrueDataNew(int column_string)
  {
   switch(column_string)
     {
      case Market_and_Exchange_Names:
      case As_of_Date_in_Form_YYYY_MM_DD:
      case Open_Interest_All:
      case Nonc_Positions_Long_All:
      case Nonc_Positions_Short_All:
      case Nonc_Positions_Spreading_All:
      case Commercial_Positions_Long_All:
      case Commercial_Positions_Short_All:
      case Total_Reportable_Pos_Long:
      case Total_Reportable_Pos_Short:
      case Nonrep_Positions_Long_All:
      case Nonrep_Positions_Short_All:
         return(true);
      default:
         return(false);
     }
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string NormalizeData(string file_name)
  {

   int char;
   int strlen;
   string normalize_name="";
   string normalize_name_p="";
   strlen=StringLen(file_name);
   for(int i=0;i<strlen;i++)
     {
      char=StringGetChar(file_name,i);
      switch(char)
        {
         case '/':
         case '\\':
         case ':':
         case '*':
         case '\"':
         case '<':
         case '>':
         case '|':
         case ';':
            break;
         default:
            // If the last symbol of the string is space, delete it.
            //if(char==" "&&i==strlen-1)break;
            normalize_name=StringConcatenate(normalize_name,CharToStr(char));
        }
     }
   return(normalize_name);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string NormalizeNames(string data)
  {
   int strlen=StringLen(data);
   string n_data;
   data=StringTrimRight(data);
   if(CharToStr(StringGetChar(data,strlen-1))==".")StringSetChar(data,strlen-1,"");
   return(data);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool TrueFileName(int handle,string filename)
  {
   if(handle==-1)
     {
      Print("Can't open the file: ",filename," Last Error: ",GetLastError());
      return(false);
     }
   else return(true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool CheckValidColumn(string column_name)
  {
   int strlen=StringLen(column_name);
   if(StringFind(column_name,"\"")!=-1){a++;return(true);}
   return(false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string NormalizeColumn(string column)
  {
   string n_column;
   int char;
   int strlen=StringLen(column);
   for(int i=0;i<strlen;i++)
     {
      char=StringGetChar(column,i);
      if(char=='\"')continue;
      else n_column=StringConcatenate(n_column,CharToStr(char));
     }
   return(n_column);
  }
//+------------------------------------------------------------------+


Die Indikator-Arbeit ist schwieriger. Alle Indikatoren bestehen meist aus dem gleichen Code - der cotlib.mq4 Bibliothek. Ihre Struktur kann in mehrere Teile unterteilt werden:

1. Definition - Beschreibung von Präprozessor-Konstanten, Datentabellen (Satz von Arrays),

2. Initialisierung - Berechnung der Größe heruntergeladener Daten und die Umverteilung der Größe von Arrays (function init_data ()),

3. Daten von der Berichtsdatei laden (Funktion load_data ());

4. Berechnung der Indikator-Werte unter Verwendung der Berichtsdaten (Funktion count_data ()).

Um auf die Indikator-Werte zuzugreifen, wird die Funktion get_data (int Typ, int bar) verwendet. Sie hat zwei Parameter: Die Anzahl der Parameter-Werte, die zurückgegeben werden müssen, und den Balken-Index, von dem Sie den Wert für den Indikator erhalten wollen. Zum Beispiel, wennn Sie die Indikator-Wert des WILLCO Indikators für die Operatoren das aktuellen Balken erhalten möchten (bar = 0), dann sollte der Funktionsaufruf lauten: get_data (WILLCO_OPERATORS, 0); "WILLCO_OPERATORS" ist hier die Definition eine benannten Integer Konstante, angegeben für den Präprozessor.

Der Mittelungszeitraum ist für alle berechneten Indikatoren der gleiche und sollte vor der Initialisierung der Indikatoren gewählt werden (nach der Änderung der Eingabeparameter, die Initialisierung der Indikatoren beginnt automatisch). Die erforderliche zu lesende Datei wird automatisch bestimmt durch die Funktion void settings_load (void). Sie öffnet die Konfigurationsdatei (standardmäßig settings.ini) und versucht das aktuelle Instrument zu ermitteln (Symbol ()), in der Instrumente-Liste den erforderlichen Berichte. Wenn ein Bericht mit dem Namen dieses Instruments übereinstimmt, lädt die Funktion ihn herunter, wenn es dort keinen Bericht für das aktuelle Instrument gibt - lädt es das Instrument standardmäßig herunter (Parameter-Name).


#property copyright "Copyright ɠ2009, C-4, All Rights Reserved."
#property link      "vs-box@mail.ru"
// Possible "type" of parameter values for function get_data()
#define OI                    0
#define NONCOMM_LONG          1
#define NONCOMM_SHORT         2
#define OPERATORS_LONG        3
#define OPERATORS_SHORT       4
#define NONREP_LONG           5
#define NONREP_SHORT          6
#define NET_NONCOMM           7
#define NET_OPERATORS         8
#define NET_NONREP            9
#define OI_NONCOMM_LONG       10
#define OI_NONCOMM_SHORT      11
#define OI_OPERATORS_LONG     12
#define OI_OPERATORS_SHORT    13
#define OI_NONREP_LONG        14
#define OI_NONREP_SHORT       15
#define WILLCO_NONCOMM        16
#define WILLCO_OPERATORS      17
#define WILLCO_NONREP         18
#define INDEX_OI              19
#define INDEX_NONCOMM         20
#define INDEX_OPERATORS       21
#define INDEX_NONREP          22
#define MOVEMENT_NONCOMM      23
#define MOVEMENT_OPERATORS    24
#define MOVEMENT_NONREP       25
#define MOVEMENT_OI           26
#define OI_NET_NONCOMM        27
#define OI_NET_OPERATORS      28
#define OI_NET_NONREP         29


extern bool   load_cot_file=false;
extern string cot_file="COT - U.S. DOLLAR CONCATENATE.csv";
extern string settings="settings.ini";
string name;
bool error=false;
int column;
bool DrawData=true;
bool LoadData=true;


//**********************************************************************************************************
//                                     COT DATA TABLE
int n_str;                    // number of strings

                              // Array with dates
datetime realize_data[];
// Arrays with absolute positions
double open_interest[];       // Open Interest value
double noncomm_long[];        // Long positions of non-commercial traders
double noncomm_short[];       // Short positions of non-commercial traders
double noncomm_spread[];      // Spread of non-commercial traders
double operators_long[];      // Long positions of operators
double operators_short[];     // Short positions of operators
double nonrep_long[];         // Long positions of unreported traders (crowd)
double nonrep_short[];        // Shortpositions of unreported traders (crowd)

                              // An arrays contain the result of division of the absolute long position 
                              // by short position for each of the category of traders

double oi_noncomm_long[];     // Open Interest / Long positions of noncommercial traders
double oi_noncomm_short[];    // Open Interest / Short positions of noncommercial traders
double oi_operators_long[];   // Open Interest / Longpositions of noncommercial traders (operators)
double oi_operators_short[];  // Open Interest / Short positions of noncommercial traders (operators)
double oi_nonrep_long[];      // Open Interest / Long positions of unreported traders (crowd)
double oi_nonrep_short[];     // Open Interest / Short positions of unreported traders (crowd)

                              // An arrays contain the result of division of the total net position by Open Interest
                              // for each of the category of traders, it used for WILLCO calculation
double oi_net_noncomm[];
double oi_net_operators[];
double oi_net_nonrep[];

// Arrays with net positions of several groups of traders
double net_noncomm[];         // Net position of noncommercial traders
double net_operators[];       // Net position of commercial traders
double net_nonrep[];          // Net position of unreported traders

double index_oi[];            // Index of Open Interest
double index_ncomm[];         // Index of noncommercial traders
double index_operators[];     // Index of commercial traders (operators)
double index_nonrep[];        // Index of unreported traders (crowd)

                              // Arrays with Stochastic, calculated on division of
                              // Open Interest by Total net position for each category of traders
                              // Stohastic(OI/NET_POSITION)
double willco_ncomm[];        // 
double willco_operators[];    //
double willco_nonrep[];       //

                              //MOVEMENT INDEX
double movement_oi[];
double movement_ncomm[];
double movement_operators[];
double movement_nonrep[];
//**********************************************************************************************************
//
bool init_data()
  {
   string data;
   int handle_cotfile;
   int str;
   settings_load();
   handle_cotfile=FileOpen(cot_file,FILE_READ|FILE_CSV);
//handle_cotfile=FileOpen("COT - U.S. DOLLAR CONCATENATE.csv",FILE_READ|FILE_CSV);
   if(handle_cotfile==-1)
     {
      Print("Can't load file. The further work is not possible ",cot_file);
      Print(GetLastError());
      return(false);
     }
   while(FileIsEnding(handle_cotfile)==false)
     {
      data=FileReadString(handle_cotfile);
      if(FileIsLineEnding(handle_cotfile) && data!="")str++;
     }
   ArrayResize(realize_data,str);

   ArrayResize(open_interest,str);
   ArrayResize(noncomm_long,str);
   ArrayResize(noncomm_short,str);
   ArrayResize(noncomm_spread,str);
   ArrayResize(operators_long,str);
   ArrayResize(operators_short,str);
   ArrayResize(nonrep_long,str);
   ArrayResize(nonrep_short,str);

   ArrayResize(oi_noncomm_long,str);
   ArrayResize(oi_noncomm_short,str);
   ArrayResize(oi_operators_long,str);
   ArrayResize(oi_operators_short,str);
   ArrayResize(oi_nonrep_long,str);
   ArrayResize(oi_nonrep_short,str);

   ArrayResize(oi_net_noncomm,str);
   ArrayResize(oi_net_operators,str);
   ArrayResize(oi_net_nonrep,str);

   ArrayResize(net_noncomm,str);
   ArrayResize(net_operators,str);
   ArrayResize(net_nonrep,str);

   ArrayResize(index_oi,str);
   ArrayResize(index_ncomm,str);
   ArrayResize(index_operators,str);
   ArrayResize(index_nonrep,str);

   ArrayResize(willco_ncomm,str);
   ArrayResize(willco_operators,str);
   ArrayResize(willco_nonrep,str);

   ArrayResize(movement_oi,str);
   ArrayResize(movement_ncomm,str);
   ArrayResize(movement_operators,str);
   ArrayResize(movement_nonrep,str);

   FileClose(handle_cotfile);
   return(true);
  }

void settings_load()
  {
   int h_set,_column;
   string set,sname;
   if(load_cot_file==true)return;
   h_set=FileOpen(settings,FILE_READ|FILE_CSV,";");
//FileOpen("\Temp\Cot_file.txt",FILE_WRITE,FILE_CSV);
   if(h_set==-1)return;
   while(FileIsEnding(h_set)==false)
     {
      set=FileReadString(h_set);
      _column++;
      if(set==Symbol() && _column!=1){cot_file=sname;return;}
      if(_column==2 && set!="")name=set;    // The second column is the desired indicator name
      if(FileIsLineEnding(h_set)==true)_column=0;
      if(_column==1)sname=set;

     }
   FileClose(h_set);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void load_data()
  {
   datetime data_realize;
   int handle_cotfile;
   string data;
   handle_cotfile=FileOpen(cot_file,FILE_READ|FILE_CSV,";");
   Print("???? ??????");
   while(FileIsEnding(handle_cotfile)==false)
     {
      data=FileReadString(handle_cotfile);
      column++;
      if(FileIsLineEnding(handle_cotfile)==true || FileIsEnding(handle_cotfile)==true)
        {//column=12 - special case
         if(column==12)
            nonrep_short[n_str]=StrToDouble(data);
         column=0;
         if(data!="")n_str++;
        }
      else
        {
         switch(column)
           {
            case 2:
               realize_data[n_str]=StrToTime(data);
               break;
            case 3:
               open_interest[n_str]=StrToDouble(data);
               //Print(open_interest[n_str]);
               break;
            case 4:
               noncomm_long[n_str]=StrToDouble(data);
               break;
            case 5:
               noncomm_short[n_str]=StrToDouble(data);
               break;
            case 6:
               noncomm_spread[n_str]=StrToDouble(data);
               break;
            case 7:
               operators_long[n_str]=StrToDouble(data);
               break;
            case 8:
               operators_short[n_str]=StrToDouble(data);
               break;
            case 11:
               nonrep_long[n_str]=StrToDouble(data);
               break;
           }
        }
     }
   FileClose(handle_cotfile);
   Print("Fil loaded");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void count_data()
  {
   int    max,
   min;
   double delta;

   for(int i=0;i<n_str;i++)
     {
      index_oi[i]=EMPTY_VALUE;
      index_ncomm[i]=EMPTY_VALUE;
      index_operators[i]=EMPTY_VALUE;
      index_nonrep[i]=EMPTY_VALUE;
      willco_ncomm[i]=EMPTY_VALUE;
      willco_operators[i]=EMPTY_VALUE;
      willco_nonrep[i]=EMPTY_VALUE;
      movement_ncomm[i]=EMPTY_VALUE;
      movement_operators[i]=EMPTY_VALUE;
      movement_nonrep[i]=EMPTY_VALUE;
     }
   for(i=0;i<n_str;i++)
     {
      if(open_interest[i]==0)
        {
         oi_noncomm_long[i]=0;
         oi_noncomm_short[i]=0;
         oi_operators_long[i]=0;
         oi_operators_short[i]=0;
         oi_nonrep_long[i]=0;
         oi_nonrep_short[i]=0;
        }
      else
        {
         oi_noncomm_long[i]=noncomm_long[i]/open_interest[i];
         oi_noncomm_short[i]=noncomm_short[i]/open_interest[i];
         oi_operators_long[i]=operators_long[i]/open_interest[i];
         oi_operators_short[i]=operators_short[i]/open_interest[i];
         oi_nonrep_long[i]=nonrep_long[i]/open_interest[i];
         oi_nonrep_short[i]=nonrep_short[i]/open_interest[i];
        }

      net_noncomm[i]=noncomm_long[i]-noncomm_short[i];
      net_operators[i]=operators_long[i]-operators_short[i];
      net_nonrep[i]=nonrep_long[i]-nonrep_short[i];

      if(open_interest[i]==0)
        {
         oi_net_noncomm[i]=0;
         oi_net_operators[i]=0;
         oi_net_nonrep[i]=0;
        }
      else
        {
         oi_net_noncomm[i]=net_noncomm[i]/open_interest[i];
         oi_net_operators[i]=net_operators[i]/open_interest[i];
         oi_net_nonrep[i]=net_nonrep[i]/open_interest[i];
        }
     }

   for(i=0;i<n_str-period;i++)
     {

      max=ArrayMaximum(open_interest,period,i);
      min=ArrayMinimum(open_interest,period,i);
      delta=open_interest[max]-open_interest[min];
      if(delta==0)delta=1;
      index_oi[i]=(open_interest[i]-open_interest[min])/delta*100;

      max=ArrayMaximum(net_noncomm,period,i);
      min=ArrayMinimum(net_noncomm,period,i);
      delta=net_noncomm[max]-net_noncomm[min];
      if(delta==0)delta=1;
      index_ncomm[i]=(net_noncomm[i]-net_noncomm[min])/delta*100;

      max=ArrayMaximum(net_operators,period,i);
      min=ArrayMinimum(net_operators,period,i);
      delta=net_operators[max]-net_operators[min];
      if(delta==0)delta=1;
      index_operators[i]=(net_operators[i]-net_operators[min])/delta*100;

      max=ArrayMaximum(net_nonrep,period,i);
      min=ArrayMinimum(net_nonrep,period,i);
      delta=net_nonrep[max]-net_nonrep[min];
      if(delta==0)delta=1;
      index_nonrep[i]=(net_nonrep[i]-net_nonrep[min])/delta*100;

      max=ArrayMaximum(oi_net_noncomm,period,i);
      min=ArrayMinimum(oi_net_noncomm,period,i);
      delta=oi_net_noncomm[max]-oi_net_noncomm[min];
      if(delta==0)delta=1;
      willco_ncomm[i]=(oi_net_noncomm[i]-oi_net_noncomm[min])/delta*100;

      max=ArrayMaximum(oi_net_operators,period,i);
      min=ArrayMinimum(oi_net_operators,period,i);
      delta=oi_net_operators[max]-oi_net_operators[min];
      if(delta==0)delta=1;
      willco_operators[i]=(oi_net_operators[i]-oi_net_operators[min])/delta*100;

      max=ArrayMaximum(oi_net_nonrep,period,i);
      min=ArrayMinimum(oi_net_nonrep,period,i);
      delta=oi_net_nonrep[max]-oi_net_nonrep[min];
      if(delta==0)delta=1;
      willco_nonrep[i]=(oi_net_nonrep[i]-oi_net_nonrep[min])/delta*100;
     }
   for(i=0;i<n_str-period-movement_index;i++)
     {
      movement_oi[i]=index_oi[i]-index_oi[i-movement_index];
      movement_ncomm[i]=index_ncomm[i]-index_ncomm[i-movement_index];
      movement_operators[i]=index_operators[i]-index_operators[i-movement_index];
      movement_nonrep[i]=index_nonrep[i]-index_nonrep[i-movement_index];
     }
  }
// Returns one of the COT table values
// defined by "type" variable and bar defined by "bar"
double get_data(int type,int bar)
  {
   double data;
   int i_data=get_cot(bar);
   if(i_data==EMPTY_VALUE)return(EMPTY_VALUE);
   switch(type)
     {
      case OI:
         return(open_interest[i_data]);
      case NONCOMM_LONG:
         return(noncomm_long[i_data]+noncomm_spread[i_data]);
         //return(noncomm_long[i_data]);
      case NONCOMM_SHORT:
         return(noncomm_short[i_data]+noncomm_spread[i_data]);
         //return(noncomm_short[i_data]);
      case OPERATORS_LONG:
         return(operators_long[i_data]);
      case OPERATORS_SHORT:
         return(operators_short[i_data]);
      case NONREP_LONG:
         return(nonrep_long[i_data]);
      case NONREP_SHORT:
         return(nonrep_short[i_data]);
      case NET_NONCOMM:
         return(net_noncomm[i_data]);
      case NET_OPERATORS:
         return(net_operators[i_data]);
      case NET_NONREP:
         return(net_nonrep[i_data]);
      case INDEX_OI:
         return(index_oi[i_data]);
      case INDEX_NONCOMM:
         return(index_ncomm[i_data]);
      case INDEX_OPERATORS:
         return(index_operators[i_data]);
      case INDEX_NONREP:
         return(index_nonrep[i_data]);
      case OI_NONCOMM_LONG:
         return(oi_noncomm_long[i_data]);
      case OI_NONCOMM_SHORT:
         return(oi_noncomm_short[i_data]);
      case OI_OPERATORS_LONG:
         return(oi_operators_long[i_data]);
      case OI_OPERATORS_SHORT:
         return(oi_operators_short[i_data]);
      case OI_NONREP_LONG:
         return(oi_nonrep_long[i_data]);
      case OI_NONREP_SHORT:
         return(oi_nonrep_short[i_data]);
      case WILLCO_NONCOMM:
         return(willco_ncomm[i_data]);
      case WILLCO_OPERATORS:
         return(willco_operators[i_data]);
      case WILLCO_NONREP:
         return(willco_nonrep[i_data]);
      case OI_NET_NONCOMM:
         return(oi_net_nonrep[i_data]);
      case OI_NET_OPERATORS:
         return(oi_net_operators[i_data]);
      case OI_NET_NONREP:
         return(oi_net_nonrep[i_data]);
      case MOVEMENT_NONCOMM:
         return(movement_ncomm[i_data]);
      case MOVEMENT_OPERATORS:
         return(movement_operators[i_data]);
      case MOVEMENT_NONREP:
         return(movement_nonrep[i_data]);
      case MOVEMENT_OI:
         return(movement_oi[i_data]);
     }
   return(EMPTY_VALUE);
  }
// Returns the cell number in array
// It returns an EMPTY_VALUE, if bar hasn't been found
int get_cot(int i)
  {
   datetime tbar=iTime(Symbol(),0,i);
   for(int k=0;k<n_str;k++)
      if(realize_data[k]<tbar)return(k);
   return(EMPTY_VALUE);
  }
// Returns bar with the last COT data exist
int get_lastdata()
  {
   return(iBarShift(Symbol(),0,realize_data[n_str-1],false));
  }
// Returns a string without extension and first 6 symbols
// (before was "COT - FileName.csv", it became "FileName")
string str_trim(string fname)
  {
   int strlen=StringLen(fname)-1;
   int char;
   string str;
   for(int i=strlen;i>0;i--)
     {
      char=StringGetChar(fname,i);
      if(char=='.')
        {
         for(int b=6;b<i;b++) // change to b=0, if it is not necessary 
                              // to delete the first of 6 symbols            str=str+CharToStr(StringGetChar(fname,b));
         return(str);
        }
     }
   return(fname);
  }
//+------------------------------------------------------------------+

Der Code der Indikatoren selbst ist trivial und unterscheiden sich nur durch die Anzahl der initialisierten Puffer und den ersten Parameter der Funktion get_data(). Alle Werte werden im Voraus berechnet, in der Phase der Initialisierung, also verwenden sie nicht die Funktion IndicatorCounted (). Am Anfang, während der Initialisierung, werden die grundlegenden Funktionen der Bibliothek cotlib.mq4 aufgerufen, sie konfiguriert ein Chart und startet die Funktion start(). Sie führt einmal die Funktion build_data() aus, die die Daten im für den Zeitraum der Berichtsdaten im Indikatorfenster anzeigt.

Als Beispiel ist hier der Quellcode des Indikator WILLCO:

#property copyright "Copyright ɠ2009, C-4, All Rights Reserved."
#property link      "vs-box@mail.ru"

#property indicator_separate_window
#property  indicator_buffers 3
#property  indicator_color1  Green
#property  indicator_color2  Red
#property  indicator_color3  Blue

extern int  period=52;
int movement_index=6;
extern bool Show_iNoncomm=false;
extern bool Show_iOperators=true;
extern bool Show_iNonrep=false;

double i_willco_noncomm[];
double i_willco_operators[];
double i_willco_nonrep[];

#include <cotlib.mq4>
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   if(init_data()==false)error=true;
   if(error==false)load_data();
   if(error==false)count_data();
//if(error==false)count_index(period);
   SetParam();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   if(error==true)Print("Can't load data. The further work is impossible");
   if(DrawData==true)build_data();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SetParam()
  {
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_LINE);
   IndicatorDigits(2);
   SetIndexEmptyValue(0,EMPTY_VALUE);
   SetIndexEmptyValue(1,EMPTY_VALUE);
   SetIndexEmptyValue(2,EMPTY_VALUE);
   SetLevelValue(0,0.0);
   SetLevelValue(1,20.0);
   SetLevelValue(2,80.0);
   SetLevelValue(3,100.0);
   if(load_cot_file==true)IndicatorShortName(StringConcatenate("Meta COT WILLCO (",period,"): ",str_trim(cot_file)));
   else IndicatorShortName(StringConcatenate("Meta COT WILLCO (",period,"): ",name));
   if(Show_iNoncomm==true)
     {
      SetIndexBuffer(0,i_willco_noncomm);
      SetIndexLabel(0,"WILLCO: Noncommercial Traders");
     }
   if(Show_iOperators==true)
     {
      SetIndexBuffer(1,i_willco_operators);
      SetIndexLabel(1,"WILLCO: Operators Traders");
     }
   if(Show_iNonrep==true)
     {
      SetIndexBuffer(2,i_willco_nonrep);
      SetIndexLabel(2,"WILLCO: Nonrep Traders");
     }
  }

void build_data()
  {
   int end_data=get_lastdata();
   for(int i=0;i<end_data;i++)
     {
      if(Show_iNoncomm)
        {
         i_willco_noncomm[i]=get_data(WILLCO_NONCOMM,i);
         if(Show_iOperators)i_willco_operators[i]=get_data(WILLCO_OPERATORS,i);
         if(Show_iNonrep)i_willco_nonrep[i]=get_data(WILLCO_NONREP,i);
        }
      DrawData=false;
     }
//+------------------------------------------------------------------+

Der schwierigste Teil des Programms, war das Erstellen eines Skripts für die Zusammenfassung der Daten in einem Bericht. Es wurden viele Algorithmus-Probleme gelöst. Das Programm wurde im alten C-Stil geschrieben. Es besteht aus einer einzigen Einheit ohne Funktionsaufrufe. Ein solcher Ansatz schein ineffizient oder sogar falsch, aber in diesem Fall war es die beste Lösung das Problem sofort zu lösen, ohne es in verschiedene "Unteraufgaben" zu unterteilen.

Am Anfang öffnet das Programm die Dateiliste, liest die Dateinamen zum Kombinieren und öffnet sie eine nach der anderen. Jede der Dateien hat eine Liste mit Berichten die kombiniert werden müssen. Das Programm öffnet diese Berichte alle auf einmal, liest die Werte aus ihnen und verarbeitet sie Zeile für Zeile (in dem Format SCV ist Zeile eine Spalte). Dann fügt es diese Werte zusammen, wenn sie identische Zeitdaten haben (die Werte der zweiten Spalte). Die Summe der Werte wird in der abschließenden Datei erfasst, die den gleichen Namen hat wie die zu kombinierende Datei, aber mit CSV Erweiterung.


#property copyright "Copyright ɠ2009, C-4, All Rights Reserved."
#property link      "vs-box@mail.ru"

#define EQU_NO           0
#define EQU_YES          1

#define DATA            1
#define OI              2
#define NONCOMM_LONG    3
#define NONCOMM_SHORT   4
#define SPREADING       5
#define OPERATORS_LONG  6
#define OPERATORS_SHORT 7
#define ALL_LONG        8
#define ALL_SHORT       9
#define NONREP_LONG     10
#define NONREP_SHORT    11

extern string s_list="AGREGATION.ini";
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int      h_list;                    // File list descriptor
                                       // (it contain a file list)
                                       // string   s_list;                    // File name

   int      h_enumeration;             // Descriptor of the enumeration file
   string   s_enumeration;             // Filename of the enumeraton file

   int      h_rezult;                  // Description of the output file
   string   s_rezult;                  // Filename of the output file

   int      h_temp;                    // Temporary descriptor (one for all)
                                       // used for the file counting
   string   s_temp;                    // Temporary string (one for all), 
                                       // used for the file counting

   int      h_file[];                  // Array of descriptors for the output files 
   string   s_file[];                  // Array with the names for the output files

   datetime data[],data_all;
   int      oi[],oi_all,
   noncomm_long[],noncomm_long_all,
   noncomm_short[],noncomm_short_all,
   spreading[],spreading_all,
   operators_long[],operators_long_all,
   operators_short[],operators_short_all,
   all_long[],all_long_all,
   all_short[],all_short_all,
   nonrep_long[],nonrep_long_all,
   nonrep_short[],nonrep_short_all;

   int      str;                       // Count of the result files
   int      n;                         // The current index of the result files
   int      column;                    // Column number
   int      frnz_str[];                // Frozen descriptiors
   double   count;                     // Count the string count for the result file
   string   tmp;                       // A text string for the result file

   h_list=FileOpen(s_list,FILE_READ|FILE_CSV);                    // ????????? ?????? ??????
   if(h_list==-1){Print("File list not found");return(0);}
   while(FileIsEnding(h_list)==false)
     {                            // Reading it string by string
      s_enumeration=FileReadString(h_list);                       // Each string has a filename
      Print("---------------<<",s_enumeration,">>---------------");
      h_enumeration=FileOpen(s_enumeration,FILE_READ|FILE_CSV);   // Try to open enumeration file list
      if(h_enumeration==-1)
        {
         Print("The enumeration file not found ",s_enumeration);
         continue;                                                // If it does not exist, skip it
        }

      s_rezult=StringConcatenate(ConvertName(s_enumeration),".csv");
      h_rezult=FileOpen(s_rezult,FILE_WRITE|FILE_CSV);
      if(h_rezult==-1)
        {
         Print("Can't create a result file: ",s_rezult,"; ",GetLastError());
         continue;
        }
      while(FileIsEnding(h_enumeration)==false)
        {
         s_temp=FileReadString(h_enumeration);                  // Reading string by string enumeration file
                                                                // each string is the name of the final file
         h_temp=FileOpen(s_temp,FILE_READ|FILE_CSV);            // Try to open the result file
         if(h_temp==-1)continue;        // If result file does not exists, skip it
         str++;                                                 // Overwise we increasing by 1 the count of the files processed.
                                                                // Print("--> ",s_temp);
         while(FileIsEnding(h_temp)==false)
           {
            tmp=FileReadString(h_temp);
            if(tmp!="")count++;
           }
         Print("--> ",s_temp," ",count/12);
         count=0;
         FileClose(h_temp);                                    // Closing result file
        }//End While (counting the files with enumerations)
      FileSeek(h_enumeration,0,SEEK_SET);

      ArrayResize(h_file,str);
      ArrayResize(s_file,str);
      ArrayResize(data,str);
      ArrayResize(oi,str);
      ArrayResize(noncomm_long,str);
      ArrayResize(noncomm_short,str);
      ArrayResize(spreading,str);
      ArrayResize(operators_long,str);
      ArrayResize(operators_short,str);
      ArrayResize(all_long,str);
      ArrayResize(all_short,str);
      ArrayResize(nonrep_long,str);
      ArrayResize(nonrep_short,str);
      ArrayResize(frnz_str,str);
      while(FileIsEnding(h_enumeration)==false)
        {
         s_file[n]=FileReadString(h_enumeration);              // Reading enumeration file string by string
                                                               // each string is the name of the result file
                                                               // Print(str,"; ",s_file[n]);
         h_file[n]=FileOpen(s_file[n],FILE_READ|FILE_CSV);     // Try to open the final file
         if(h_file[n]==-1){Print("File not found");continue;}  // It it does not exist, skip it
         n++;
        }// End While( open enumerations file)   
      //for(n=0;n<str;n++){
      //   Print(n,"; ",s_file[n]);
      //}
      // At present time we have the list of the result files(s_file[]) 
      // and their descriptors (h_file[]) which are
      // in the single enumerations file. Now lets combine these files to a single file:
      while(FileIsEnding(h_file[0])==false)
        {
                                // As a signal of the end of the file there is a end of the first file
                                 // (we assume theat the files are the same)

         for(int i=0;i<str;i++)
           {                     // Reading column by column for each of the file included in the enumerations file.
            if(frnz_str[i]==1)continue;
            tmp=FileReadString(h_file[i]);
            switch(column)
              {
               case DATA:            data[i]=StrToTime(tmp);
               case OI:              oi[i]=StrToInteger(tmp);
               case NONCOMM_LONG:    noncomm_long[i]=StrToInteger(tmp);
               case NONCOMM_SHORT:   noncomm_short[i]=StrToInteger(tmp);
               case SPREADING:       spreading[i]=StrToInteger(tmp);
               case OPERATORS_LONG:  operators_long[i]=StrToInteger(tmp);
               case OPERATORS_SHORT: operators_short[i]=StrToInteger(tmp);
               case ALL_LONG:        all_long[i]=StrToInteger(tmp);
               case ALL_SHORT:       all_short[i]=StrToInteger(tmp);
               case NONREP_LONG:     nonrep_long[i]=StrToInteger(tmp);
               case NONREP_SHORT:    nonrep_short[i]=StrToInteger(tmp);
              }
           }// End For()
         //Print(h_file[0], ";  ",s_file[0]);
         column++;
         if(FileIsLineEnding(h_file[0])==true || FileIsEnding(h_file[0])==true)
           {   // If string has finished - compare the dates for all of the files, is they are equal, combine them
            column=0;
            if(tmp=="")continue;
            for(int k=0;k<str;k++)
              {
               if(data[0]>data[k])
                  frnz_str[k]=1;
               if(data[0]<data[k])
                  frnz_str[0]=1;
               if(data[0]==data[k])frnz_str[k]=0;
               if(data[0]!=data[k])
                 {
                  Print("Time Gap was found: ",TimeToStr(data[0],TIME_DATE),"; ",TimeToStr(data[k],TIME_DATE));
                  continue;
                 }
              }

            for(k=0;k<str;k++)
              {
               data_all=data[0];
               oi_all+=oi[k];
               noncomm_long_all+=noncomm_long[k];
               noncomm_short_all+=noncomm_short[k];
               spreading_all+=spreading[k];
               operators_long_all+=operators_long[k];
               operators_short_all+=operators_short[k];
               all_long_all+=all_long[k];
               all_short_all+=all_short[k];
               nonrep_long_all+=nonrep_long[k];
               nonrep_short_all+=nonrep_short[k];
              }
            FileWrite(h_rezult,ConvertName(s_enumeration),
                      TimeToStr(data_all,TIME_DATE),
                      oi_all,
                      noncomm_long_all,
                      noncomm_short_all,
                      spreading_all,
                      operators_long_all,
                      operators_short_all,
                      all_long_all,
                      all_short_all,
                      nonrep_long_all,
                      nonrep_short_all);
            //Print(TimeToStr(data_all,TIME_DATE),";  ",oi_all);
            data_all=0;
            oi_all=0;
            noncomm_long_all=0;
            noncomm_short_all=0;
            spreading_all=0;
            operators_long_all=0;
            operators_short_all=0;
            all_long_all=0;
            all_short_all=0;
            nonrep_long_all=0;
            nonrep_short_all=0;
           }

        }// End While(summation)

      // Zero results
      FileClose(h_enumeration);
      FileClose(h_rezult);
/*for(int j=0;j<str;j++){
         FileClose(h_file[j]);
         noncomm_long[j]=0;
         noncomm_short[j]=0;
         spreading[j]=0;
         operators_long[j]=0;
         operators_short[j]=0;
         all_long[j]=0;
         all_short[j]=0;
         nonrep_long[j]=0;
         nonrep_short[j]=0;
      }*/

      n=0;str=0;
     } //End While( file enumeration list)

  }// End Programm   
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string ConvertName(string str)
  {
   string str_cnv;
   int strlen=StringLen(str);
   int char;
   for(int i=0;i<strlen-4;i++)
     {
      char=StringGetChar(str,i);
      str_cnv=StringConcatenate(str_cnv,CharToStr(char));
     }
   return(str_cnv);
  }
//+------------------------------------------------------------------+

Das Programm, dass die Berichte über Zeitdaten verbindet, Meta COT Script Concatenates verwendet einen ähnlichen Weg, aber sein Algorithmus ist einfacher.


#property copyright "Copyright ɠ2009, C-4, All Rights Reserved."
#property link      "vs-box@mail.ru"

extern string FilesList="CONCATENATE.ini";
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int    h_list,h_file,h_cont,h_rezult;   // File descriptors
   int    column;
   string s_list,s_file,s_cont,s_rezult,   // Strings with file names
   string_cont,string_cont_f;
   h_list=FileOpen(FilesList,FILE_READ|FILE_CSV);      // Open the file list
   if(h_list==-1){Print("File list ("+FilesList+") not found");return(0);}
   while(FileIsEnding(h_list)==false)
     {                  // Read it string by string
      s_list=FileReadString(h_list);                      // Each string is a filename
      Print(s_list);
      h_file=FileOpen(s_list,FILE_READ|FILE_CSV);         // Try open this file
      if(h_list==-1){Print("File "+s_list+" not found");continue;}  // If it does not exists
                                                                    // we skip it
                                                                    // s_rezult="COT - CONT - "+s_list;
      s_rezult=get_rezultname(s_list);
      h_rezult=FileOpen(s_rezult,FILE_WRITE|FILE_READ|FILE_CSV);
      while(FileIsEnding(h_file)==false)
        {
         s_file=FileReadString(h_file);
         //Print(s_file);
         h_cont=FileOpen(s_file,FILE_READ|FILE_CSV,';');
         if(h_cont==-1){Print("Data file "+s_file+" not found");continue;}
         else Print("Loading data file "+s_file+"...");

         while(FileIsEnding(h_cont)==false)
           {
            string_cont=FileReadString(h_cont);
            if(string_cont=="")continue;
            if(FileIsLineEnding(h_cont)==true)
              {
               string_cont_f=string_cont_f+";"+string_cont;
               FileWrite(h_rezult,string_cont_f);
               string_cont_f="";
               column=0;
              }
            else
              {
               //if(string_cont=="")continue;
               if(column==0)string_cont_f=string_cont_f+string_cont;
               else string_cont_f=string_cont_f+";"+string_cont;
               column++;
              }
           }
         FileClose(h_cont);
        }
      FileClose(h_file);
      FileClose(h_rezult);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string get_rezultname(string fname)
  {
   int strlen=StringLen(fname)-1;
   int char;
   string str;
   for(int i=strlen;i>0;i--)
     {
      char=StringGetChar(fname,i);
      if(char=='.')
        {
         for(int b=0;b<i;b++)
            str=str+CharToStr(StringGetChar(fname,b));
         str=str+".csv";
         return(str);
        }
     }
   return("COT - CONT - "+fname);
  }
//+------------------------------------------------------------------+


4. Von der Theorie zur Praxis!

4.1 Eine Minute und ein Rohstoffhändler ist fertig für die Arbeit

Also, es ist an der Zeit das alles zu verallgemeinern. Der Futures-Markt hat der Hauptgruppen an Teilnehmern: Hedger, große Rohstoff-Fonds und die Masse. Die erste und die zweite Gruppe sind am stärksten kapitalisiert. Die Masse kontrolliert nur einen kleinen Teil des Marktes, in der Regel weniger als 10%, so können ihre Handlungen den Marktpreis nicht beeinflussen. Die beiden verbleienden Gruppen sind wenige, aber leistungsfähiger. Sie bestimmen die Interaktionen nach dem Gesetz von Angebot und Nachfrage.

Nicht-kommerzielle Händler sind und Operatoren sind von Natur aus gegensätzlich. Die Handlungen der einen Gruppe bilden fast das Spiegelbild der anderen. Die erste mögliche Anwendung von CFTC Berichten ist: Beobachten des Gleichgewichts zwischen den zwei Gruppen auf Grundlage des Gesetzes von Angebot und Nachfrage.

Die Hedger sind besser informierte Teilnehmer am Markt als alle anderen. Sie sind am nächsten an der Produktion der Güter, also wissen sie viel früher etwas über die verdeckten Markttrends als sonst jemand. In diesem Fall werden sie immer Insider sein, bezogen auf die anderen Marktteilnehmer. Diese verdeckten Informationen ermöglichen ihnen ihr Absicherungsniveau anzupassen, was sich in den CFTC Berichten widerspiegelt. Die zweite mögliche Anwendung ist die Beobachtung der schnellen Änderungen in den Positionen der Operatoren.

Die Masse ist am schlechtesten informiert, von allen Kategorien an Händlern. Häufig bedeutet dies, dass die Handlungen der Masse verursacht werden durch lächerliche Gerüchte, die Psychologie der Trader, Gier und Angst. Die starken Änderungen der Nettoposition der Masse sagt häufig aus, dass die Stimmung der Masse sich drastisch unter der Wirkung all dieser Faktoren geändert hat, und das es besser ist auf die gegenteilige Entwicklung der Situation vorbereitet zu sein. Eine dritte mögliche Anwendung ist, die der schnellen Wechsel der Positionen der Masse.

Der CFTC Bericht selbst kann nicht auf einen bestimmten Einstieg oder Ausstieg am Markt hinweisen. Die Eigenschaft haben alle fundamentalen Indikatoren gemeinsam. Sie müssen wirksame Methoden der technischen Analyse verwenden, um Einstiegs- und Ausstiegspunkte genauer zu erkennen.


Hier sind einige Eigenschaften, die ein Handelssystem haben sollte, um die CFTC Informationen effektiv zu nutzen:

1. Es muss rentabel, oder zumindest neutral sein, auch ohne die Verwendung der CFTC Filter.

2. Das System sollte keine Parameter, Optimierung haben, deren Änderungen das Verhalten und den Endgewinn des Handelssystems verändern. Die Hauptfunktion des Systems sollte sein, die Handelssignale zu bestätigen. Die Optimierung der zusätzlichen Einheit sollte nicht die Priorität bei der Strategieentwicklung sein.

3. Das System sollte vollständig umkehrbar sein. Die Verkaufssignale müssen ein Spiegel der Kaufsignale sein.

4. Die Technik sollte ein Gegentrend zu dem aktuell lokalen Trend sein. Die CFZC Signale zum Verkaufen werden in einem längeren Aufwärtstrend erscheinen, oder zumindest auf die starke Umkehr der Hauptbewegung. Die Kaufsignale werden ebenfalls gegenteilig zu dem zugrunde liegenden Trend sein.

5. Die Technik sollte das Erfassen der Trendumkehr garantieren. Alle der Umkehrpunkte sollten durch das System als Einstiegspunkte in den Markt berücksichtigt werden. Dies ist die schwierigste, aber gleichzeitig auch die wichtigste Bedingung für das Handelssystem. Die CFTC Signale erschienen sehr selten, einige der Indikatoren erzeugen nicht mehr als 1-2 Mal im Jahr ein Signal. Wenn die Technik in diesem Momenten kein Signal gibt, wird die Verwendung der CFTC Berichte bedeutungslos.

6. Werden die Informationen der CFTC Berichte verwendet, werden die Hauptgewinne mit nur einigen Geschäften erzielt, mit einem Long-Trade bis zu mehreren Monaten. When using CFTC reports information the main profit will be obtained from just several deals, with a long time of trade, up to several months. Entsprechend sollte die Handelsstrategie ein Dahintreiben der Positionen über eine längere Zeit ermöglichen.

7. Das System sollte nicht die Eigenschaften eines bestimmten Marktes nutzen. CFTC Berichte sind für viele Märkte verfügbar, also sollte das System gleichmäßig auf alle Märkte angewendet werden, für die Berichte erstellt werden.

Die vielversprechendste Anwendung der Technologie ist als Filter zu sehen. In diesem Fall verringert sich die Anzahl der Geschäfte und Rückgänge schnell, während die Gewinnerwartung und de resultierenden Gewinne schnell ansteigen sollten.

Betrachten wir jetzt die wichtigste Signale, auf die wir uns konzentrieren sollten. Es gibt zwei solcher Signale: das Open Interest Niveau und die Nettoposition von einer der drei Kategorien, davon ausgehend, dass es sich um die Operatoren handelt. Wir reduzieren die Informationen des Berichts auf diese zwei Parameter, ausgedrückt in einem 3-Jahres-Index.

Dies beseitigt die Subjektivität und macht die Analyse der Märkte viel einfacher. Somit wird eine günstige Situation zum Kaufen, ein kalter Markt mit wenigen Verkäufen der Operatoren sein. Der kalte Markt bedeutet, dass das Open Interest Niveau in dem Moment sehr niedrig ist, und deshalb gibt es ein Wachstumspotential. Wir suchen auch nach der gegenteiligen Situation zum Verkaufen: der Markt sollt gut aufgewärmt sein (ein sehr hohes Niveau des OI), während die Operatoren ein extrem hohes Niveau an Verkäufen zeigen.

Kommen wir zu den JPY Indikatoren um diese Momente zu erkennen:



Abbildung 4-1. Open Interest und Index der Operatoren für JPY Futures

Die blauen Linien zeigen einen günstigen Moment zum Verkaufen, die orangenen Linien - zum Kaufen. Wenn das Open Interest groß genug ist (die grüne Linie oberhalb) und die Operatoren Bären sind, (rote Linie unterhalb), ist es eine günstige Situation den Yen zu verkaufen. Das gleiche kann für das Kaufen angewandt werden: wenn das Open Interest relativ gering ist (grüne Linie unterhalb) und die Operatoren Bullen sind (rote Linie oberhalb), ist es eine günstige Bedingung Yen zu kaufen. Diese Daten können für die erste Marktanalyse verwendet werden, das Kursniveau ist nicht erforderlich. Nur wenn eine günstige Zeit für die Spekulation erkannt wurde, können Sie mit der technischen Analyse mehr geeignete Punkte für den Einstieg in den Markt ermitteln. Das folgende Diagramm zeigt den gleichen Indikator, aber mit dem Marktpreis:



Abbildung 4-2. Operatoren Index und Open Interest mit Kurs-Chart für den Yen

Wie Sie sehen, führen nicht alle Kauf- und Verkaufssignale zu größeren Gewinnen. Viele können sogar zu ernsthaften Verlusten führen. Allerdings sollten die harten Stops in jedem System verwendet werden, und dieses ist keine Ausnahme.

Es gibt Signale auf dem Chart mit einigen Signalen die nicht die 20% und 80% Ebene erreicht haben. Diese Ebenen sind nicht fehlerfrei. Jeder Markt hat sein eigenes optimales Niveau. Das gleiche gilt für Indikatoren, es gibt keine universellen Niveau-Werte, die optimal für alle Märkte sind.

Untersuchen wir nun genauer wie die Märkte über die Transaktionen der Händler berichten. Es ist anzumerken, dass es viele Märkte mit regelmüßigen Bereichen gibt. Es sind einige Märkte, deren Bericht in einem bestimmten Zeitraum erscheint (Monat oder Jahr), und dann für immer verschwindet. Andere waren über eine lange Zeit nicht vorhanden, aber ihre Informationen sind in historischen Daten enthalten. Unter diesen können in etwa 60 Märkte erkannt werden, zu denen eindeutig regelmäßige Berichte erscheinen. Hier sind die Märkte mit den umfassendsten Berichten (Namen der Datendateien ohne CSV Erweiterung angegeben):


?

INSTRUMENT

CSV DATENDATEI

Handelsgüter
1LEAN HOGSCOT - LEAN HOGS - CHICAGO MERCANTILE EXCHANGE
2FEEDER CATTLECOT - FEEDER CATTLE - CHICAGO MERCANTILE EXCHANGE
3LIVE CATTLECOT - LIVE CATTLE - CHICAGO MERCANTILE EXCHANGE
4MILK CONCATENATECOT - MILK CONCATENATE
5WHEAT - CHICAGO BOARD OF TRADECOT - WHEAT - CHICAGO BOARD OF TRADE
6WHEAT - KANSAS CITY BOARD OF TRADECOT - WHEAT - KANSAS CITY BOARD OF TRADE
7WHEAT - MINNEAPOLIS GRAIN EXCHANGECOT - WHEAT - MINNEAPOLIS GRAIN EXCHANGE
8OATS - CHICAGO BOARD OF TRADECOT - OATS - CHICAGO BOARD OF TRADE
9ROUGH RICECOT - ROUGH RICE - CHICAGO BOARD OF TRADE
10SUGAR COT - SUGAR CONCATENATE
11COFFEE COT - COFFEE CONCATENATE
12COCOA COT - COCOA CONCATENATE
13COTTON ?2 COT - COTTON 2 CONCATENATE
14SOYBEAN MEALCOT - SOYBEAN MEAL - CHICAGO BOARD OF TRADE
15MINI SOYBEANSCOT - MINI SOYBEANS - CHICAGO BOARD OF TRADE
16SOYBEAN OILCOT - SOYBEAN OIL - CHICAGO BOARD OF TRADE
17SOYBEANSCOT - SOYBEANS - CHICAGO BOARD OF TRADE
18BUTTER (CASH SETTLED)COT - BUTTER (CASH SETTLED) - CHICAGO MERCANTILE EXCHANGE
19FRZN CONCENTRATED ORANGE JUICE COT - FRZN CONCENTRATED ORANGE JUICE CONCATENATE
20LUMBER COT - LUMBER CONCATENATE
Metalle
21COPPER-GRADE #1COT - COPPER-GRADE #1 - COMMODITY EXCHANGE INC.
22SILVERCOT - SILVER - COMMODITY EXCHANGE INC.
23GOLDCOT - GOLD - COMMODITY EXCHANGE INC.
24PLATINUMCOT - PLATINUM - NEW YORK MERCANTILE EXCHANGE
25PALLADIUM COT - PALLADIUM - NEW YORK MERCANTILE EXCHANGE
Währungen
26AUSTRALIAN DOLLARCOT - AUSTRALIAN DOLLAR CONCATENATE
27CANADIAN DOLLARCOT - CANADIAN DOLLAR CONCATENATE
28BRITISH POUND STERLINGCOT - BRITISH POUND STERLING CONCATENATE
29EURO FXCOT - EURO FX CONCATENATE
30APANESE YENCOT - JAPANESE YEN CONCATENETE
31MEXICAN PESOCOT - MEXICAN PESO CONCATENATE
32 NEW ZEALAND DOLLARCOT - NEW ZEALAND DOLLAR - CHICAGO MERCANTILE EXCHANGE
33SWISS FRANC CONCATENATECOT - SWISS FRANC CONCATENATE
34 RUSSIAN RUBLECOT - RUSSIAN RUBLE - CHICAGO MERCANTILE EXCHANGE
35U.S. DOLLAR INDEXCOT - U.S. DOLLAR CONCATENATE
Indizes
36DOW JONES INDUSTRIALCOT - DOW JONES INDUSTRIAL AVERAGE - CHICAGO BOARD OF TRADE
37DOW JONES INDUSTRIAL x5$COT - DOW JONES INDUSTRIAL AVG- x $5 - CHICAGO BOARD OF TRADE
38E-MINI S&P400COT - E-MINI S&P 400 STOCK INDEX - CHICAGO MERCANTILE EXCHANGE
39E-MINI S&P500COT - E-MINI S&P500 CONCATENATE
40S&P500 STOCK INDEXCOT - S&P500 STOCK INDEX CONCATENATE
41S&P400 MIDCAP STOCK INDEXCOT - S&P400 MIDCAP STOCK INDEX CONCATENATE
42NASDAQ-100COT - NASDAQ-100 STOCK INDEX CONCATENATE
43NASDAQ-100 MINICOT - NASDAQ-100 INDEX (MINI) CONCATENATE
44NIKKEY INDEXCOT - NIKKEI STOCK AVERAGE CONCATENATE
45RUSSELL-2000 E-MINICOT - RUSSELL 2000 CONCATENATE
Schuldtitel
46INTEREST RATE SWAPS 10YRCOT - INTEREST RATE SWAPS 10YR CONCATENATE
47INTEREST RATE SWAPS 5YRCOT - INTEREST RATE SWAPS 5YR CONCATENATE
48U.S. TREASURY BONDSCOT - U.S. TREASURY BONDS - CHICAGO BOARD OF TRADE
4910-YEAR U.S. TREASURY NOTESCOT - 10-YEAR U.S. TREASURY NOTES - CHICAGO BOARD OF TRADE
505-YEAR U.S. TREASURY NOTES COT - 5-YEAR U.S. TREASURY NOTES - CHICAGO BOARD OF TRADE
512-YEAR U.S. TREASURY NOTESCOT - 2-YEAR U.S. TREASURY NOTES - CHICAGO BOARD OF TRADE
521-MONTH LIBOR RATECOT - 1-MONTH LIBOR RATE CONCATENATE
5330-DAY FEDERAL FUNDSCOT - 30-DAY FEDERAL FUNDS - CHICAGO BOARD OF TRADE
543-MONTH EUROYENCOT - 3-MONTH EUROYEN TIBOR CONCATENATE
553-MONTH EURODOLLARSCOT - 3-MONTH EURODOLLARS CONCATENATE
Energie
56CRUDE OIL LIGHT SWEETCOT - CRUDE OIL LIGHT SWEET - NEW YORK MERCANTILE EXCHANGE
57NATURAL GASCOT - NATURAL GAS - NEW YORK MERCANTILE EXCHANGE
58NO. 2 HEATING OIL N.Y. HARBORCOT - NO. 2 HEATING OIL N.Y. HARBOR - NEW YORK MERCANTILE EXCHANGE
Volatilität Indizes
59ISO NEW ENGLAND LMP SWAPCOT - ISO NEW ENGLAND LMP SWAP - NEW YORK MERCANTILE EXCHANGE

Tabelle 4-3. Liste der Instrumente mit regelmäßigen Berichten über einen langen Zeitraum


Man kann sehen, dass die Kommission zum gegenwärtigen Zeitpunkt Daten auf einem breiten Spektrum aus Landwirtschaft, Währungen, Finanzen und anderen Märkten sammelt. Alle in der Tabelle genannten Dateien werden nach dem Ausführen der Skripte Meta COT Script Build und Meta COT Script Concatenate empfangen.


4.2 Recherche-Roboter erstellen


Die Wirksamkeitsuntersuchung der CFTC Berichte ist eine schwierige Aufgabe, die reale und effektive Entwicklungen im Bereich der technischen Analyse, sowie multiinstrumentale Optimierung erfordert. Viele erfahrene Trader haben ihr eigenes Wissen, und das ist nicht offen zugänglich. Die technische Analyse ist ein breiter Bereich, der über diesen Artikel hinaus geht, also beschränken wir uns auf zugängliche technische Indikatoren und einfache, aber bekannte technische Methode der Marktanalyse.

Wir werden einen einfachen entscheidungstreffenden Recherche-Roboter für den Markteinstieg auf Grundlage der Händlerberichtsanalyse erstellen. Wenn Sie ein MWL4 Entwickler sind, können Sie die CFTC Daten einfach als zusätzlichen Filter in Ihrer auf technischer Analyse basierenden Handelsstrategie verwenden. Wenn Sie kein Entwickler, aber an der Technologie interessiert sind, ist die Verfügbarkeit eines solchen Roboters unbezahlbar.

Mit dem Strategie-Optimierer ist es möglich die Indikatoren und den optimalen Mittelungszeitraum zu wählen. Die Praxis zeigt, das für unterschiedliche Märkte die auf der Dynamik verschiedener Händlergruppen basierenden Indikatoren die rentabelsten und genauesten sind. Vielleicht kann, für manche Märkte, die Verwendung der Gesamt-Nettoposition der nicht meldepflichtigen Händler effizient sein, für andere Märkte sind die Handlungen der Operatoren am effektivsten.

Also, wenden wir uns am Anfang der technischen Analyse zu, um genauere Momente für den Einstieg in den Markt zu ermitteln. Larry Williams schlägt in seinem Buch vor, die klassische technische Analyse auf Grundlage gleitender Mittelwerte zu verwenden. Wir werden das gleiche machen und zwei einfache Moving Averages verwenden, einen der auf einem langfristigen Trend basiert, der andere - auf einem kurzfristigen. Den langfristigen Moving Average wenden wir auf wöchentlichen Balken an, den kurzfristigen - auf Tages-Balken. Die kurze Mittelungsperiode ist gleich der Berechnung des Indikators eine schnelle - ist konstant und gleich 5 Tage.

Wenn der langsame Mittelwert aktuell größer ist als sein Wert vor zwei Wochen, besteht ein langfristiger Aufwärtstrend, ist er kleiner - Abwärts. Die gleiche Weise werden wir anwenden um einen 5-Periode Moving Average zu analysieren: Ist der aktuelle Wert höher als vor zwei Tagen, erwarten wir einen kurzfristigen Aufwärtstrend, wenn er geringer ist - befinden wir uns wahrscheinlich in einem kurzfristigen Abwärtstrend. Sobald der kurzfristige Trend mit dem langfristigen zusammenfällt, werden wir sie aufnehmen, Wir verwenden den Meta COT Indikator als Filter. Die Position wird nur geöffnet, wenn der Indikator sich gegenwärtig in einem Bereich für uns günstiger Werte befindet.

Werfen Sie einen Blick auf Abbildung 4-4:



Abbildung 4-4. Technische Analyse Signal zum Öffnen einer Position

In Abbildung 4-4 ist eine Tages-Chart von RURUSD dargestellt. Die linke obere Eche zeigt einen Ausschnitt von einem wöchentlichen EURUSD Chart für den gleichen Zeitraum. Der langfristige einfache Mittelwert (blaue Linie) hat die gleiche Periode wie der Meta COT Operators Index Indikator, in diesem Fall gleich 26 Wochen. Der kurzfristige Mittelwert (rote Linie) ist immer 5-Perioden. Wir sehen am 15. Oktober 2006 den Wert der roten Linie (MA1) höher als vor zwei Tagen (MA2), Während gleichzeitig der langfristige Mittelwert höher als vor zwei Wochen war. Die Trends sind die gleichen, zu dem gleichen Niveau war der war der Operators Index Indikator bei 100%, um eine günstige Gelegenheit zum Kaufen anzuzeigen ( oder streng genommen, diese Kombination passte a Vortag, aber wir haben diese Kombination für die grafische Darstellung verwendet).

Der Roboter führt Operationen mit den Stop Los und Take Profit Wert aus (es ist der einzige mögliche Ausstiegspunkt). Die Höhe der Ebenen ist Abhängig von dem Zeitrahmen des Indikators, Ein höherer Zeitrahmen entspricht höheren Werten für Stop Loss und Take Profit. Für alle 26-Perioden des Indikators sind es 100 Punkte Verlust und 300 Punkte Gewinn. In einem Fall mit der 156 Wochen Mittelung haben wir beispielsweise den Stop Loss gleich 600 Punkte und den Take Profit gleich 1800 Punkte (es ist eine einfache Eichschätzung). Die festgelegten Take Profit und Stop Loss sind der einzige Weg aus einer Position heraus, also könne wir annehmen, dass das Handelssystem vollständig abgeschlossen ist.

Die Größe der Position ist festgelegt und gleich 0.1 des Instrument-Kontrakts

Das System ist nicht perfekt, um nicht zu sagen primitiv. Im Allgemeinen ist es ein guter Weg in den Bankrott, aber die Dinge ändern sich, wenn es mit Meta COT Filtern genutzt wird.

Wenden wir uns nun dem Quellcode des Roboters zu. Seine Arbeitsweise ist der des Indikators sehr ähnlich. Der Roboter ist nichts anderes als ein Indikator, der weiß wie man eine Order platziert. Während der Initialisierung lädt der Roboter die Daten für das aktuelle Chart (Bibliothek cotlib.mq4) und dann berechnet er die Werte für alle Indikatoren, erhält die Werte von einem von ihnen. Der gewählte Indikator ist abhängig von der indicator_type Integer, setzen wir sie auf 17, bedeutet dies, dass wir den WILLCO Indikator für Operatoren verwenden, ist er gleich zu 22, bedeutet es, dass wir den Index der nicht meldepflichtigen Händler verwenden.

Es ist eine einfach zu ermittelnde Indikator-Zahl, die am Anfang der cotlib.mq4 Bibliothek aufgeführt ist. Um den Mittelungszeitraum zu bestimmen, ist es notwendig den period Wert des Indikators festzulegen. Die Auswahl der Indikatoren und deren Zeiträumen wurde mit dem Strategie-Optimierer organisiert. Beide Werte sind als Werte zum Optimieren markiert. Der period-Wert beginnt bei 26, mit 26er Schritten bis zu dem abschließenden Wert von 156. Der indicator_type Wert beginnt bei 16, mit Schritten von 1 bis zum abschließenden Wert von 26. Also, aus diesem Grund werden wir alle Indikatoren und verschiedene Zeiträume der Mittelung probieren:



Abbildung 4-5. Expert Eingabeparameters-Fenster


Einige Indikatoren waren nicht in den Backtests auf Historie enthalten. Diese Indikatoren haben keine klaren Ebenen, wie die Netto- oder absolute Position der Operatoren, sowie Indikatoren, deren Werte in Abhängigkeit vom Markt gewählt werden, zum Beispiel die Long-Position von Operatoren dividiert durch das Open Interest. In jedem Fall sind es mehr als ausreichend Indikatoren, um ihre Wirksamkeit einzuschätzen. Die betrachtete Strategie ist zu weit von der Perfektion entfernt, um zur Konstruktion eines Handelsroboters verwendet zu werden. Allerdings wird der Beispiel-Advisor Ihnen helfen durch die Masse der durch das Projekt bereitgestellten Informationen zu navigieren und unter den vorgeschlagenen Methoden die effektivste zu finden. Die Tabelle 4-5 zeigt die besten Testergebnisse mit den verwendeten Indikatoren.

Die unten in der Tabelle aufgeführten Ergebnisse sind eher annähernd, und der Hauptzweck der Tests ist mehr den am besten geeigneten Indikator zu finden, als die Gewinnoptimierung. Beachten Sie, dass die besten Ergebnisse nicht die höchste Rentabilität bedeuten. Die besten Ergebnisse wurden nach der Anzahl der Trades bestimmt (mehr - besser), dem maximalen Rückgang (weniger - besser), Rentabilität, und den dem abschließenden Gewinn.

Sie können Backtests auf Ihrem Computer durchführen. Die Tabelle enthält die Historie-Backtests für den folgenden Satz an Instrumenten:


Instrument

Indikator

Berechn. Zeitraum

Gesamt-Trades

Profitfaktor

Math. Erwartung

Rückgang %

Gewinn $

EURO

Index Operators

26

77

1.79

62.31

12.57

4798

BRITISH POUND

WILLCO Noncomm

26

140

1.44

18.64

7.12

2600

JAPANESE YEN

Index Nonrep

52

35

1.37

63.29

14.85

2200

SWISS FRANK

Movement Index Operators

26

21

3.96

159.71

4.63

3354

AUSTRALIAN DOLLAR

Index Nonrep

26

59

1.98

57.50

5.67

3392

NEW ZEARLAND DOLLAR

Index Noncomm

26

20

1.97

59.00

4.13

1180

US DOLLAR INDEX

Movement Nonrep

26

144

1.20

1.50

1.98

216

GOLD

Index Nonrep

26

81

1.84

52.09

5.70

4219

SILVER

WILLCO Operators

26

165

1.85

26.58

4.76

4385

PLATINUM

Index Nonrep

26

233

1.77

24.54

6.73

5717

PALLADIUM

Index Noncomm

26

142

1.23

8.15

10.61

1158

SUGAR

WILLCO Operators

26

18

1.89

61.22

6.67

1102

COCOA

Index Operators

26

29

1.96

56.59

6.08

1641

COFFEE

Index Operators

52

113

1.38

19.58

7.59

2212

OATS

Index Operators

26

15

2.24

83.50

8.25

1252

WHEAT

Index OI

26

53

1.66

53.25

8.91

2822

SOYBEANS

Index Noncomm

26

66

2.88

118.72

6.46

7965

ORANGE JUICE

Index Operators

26

29

2.75

68.83

2.73

1996

LIGHT SWEET OIL

Index Operators

26

194

1.23

16.53

12.68

3206

E-MINI S&P

Movement Operators

26

32

2.01

75.21

6.66

2406

Tabelle 4-5. Die besten COT Filter Historie Backtest-Ergebnisse mit festem Lot 0.1


Die Testergebnisse der Indikatoren sind sehr interessant. Als erstes gibt es eine deutliche Verschiebung in die profitable Zone für die Index Nonrep und WILLCO Indikatoren. Das Verhalten des Movement Index Indikators ist unsicherer. Für einige der Instrumente hat er den maximalen Gewinn erreicht (in der Regel ein für die Operatoren berechneter Indikator), für bestimmte Werte haben die gleichen Indikatoren große Verluste erzielt. Die Verwendung des Movement Index für nicht-kommerzielle Händler hat zu maximalen Verlusten für alle Instrumente geführt (Punkt Nr. 43 in Abbildung 4-6). Vielleicht wird eine tiefere Untersuchung dieses Phänomens es ermöglichen seine Signale zu nutzen.

Das Optimierungs-Diagramm kann wie folgt dargestellt werden:




Abbildung 4-6. Das allgemeine Schema der Effektivität der Indikator-Untersuchung und deren Parameter

Die rote Linie entspricht der Null-Ebene der Rentabilität. Von Durchlauf 43 an wurden die Gewinne weniger stabil.

Allgemein wurde der maximale Gewinn mit der Verwendung großer Mittelungszeiträume für die Indikatoren erzielt (104-156 Wochen), aber wegen der geringen Anzahl an Trades wurden sie nicht in den Bericht mit eingeschlossen. Die Indikatoren mit einem großen Mittelungszeitraum sind sehr genau und ihre Anwendung ist sehr effektiv, insbesondere auf Dutzenden von Märkten gleichzeitig. Trotz der spiegelbildlichen Ähnlichkeit von Operatoren und nicht-kommerziellen Händlern, ist an einigen Märkten die Position von Operatoren zu bevorzugen, an anderen - die Position der nicht-kommerziellen Händler. Die Handlungen der Masse sind auch interessant.

Es ist bemerkenswert, dass das Folgen der Gegenseite der Handlungen der Masse mehr Gewinn erzielt, als den Operatoren am Goldmarkt zu folgen.

Obwohl der WILLCO Indikator das Open Interest beinhaltet und sehr effektiv ist, ist das Open Interest selbt nicht so effektiv. Bestenfalls bietet seine Verwendung weniger Gewinn. Die OI Anwendung ist eher als ein zusätzliches Signal zu sehen, und nicht als Hauptquelle.

Im Allgemeinen haben sich die Indikatoren als effektiv erwiesen, und sie erbringen, unzweifelhaft, mehr nachhaltige Gewinne, vorbehaltlich ihrer Integration in ein gutes Handelssystem.

Das typische Optimierungs-Chart des EURO ist unten dargestellt:




Wie wir sehen, gibt es eine offensichtliche Verschiebung in den positiven Bereich (über der roten Linie). Nicht alle der Charts haben eine solche positive Verschiebung, und viele konnten aufgrund einer Reihe technischer Gründe nicht getestet werden.

Vergleichen wir jetzt die Effektivität der Filter selbst. Zu diesem Zweck werden wir sie mit dem gleichen Kurs-Chart, mit und ohne COT Filter testen. Als Instrument verwenden wir die EURO Futures.

Das Handelsergebnis des Handelssystems ohne die Verwendung von COT Filtern ist in Abbildung 4-8 dargestellt:



Abbildung 4-8. Die Handelsergebnisse ohne COZ Filter


Wie Sie sehen, war der abschließende Gewinn 1.897 USD, was ungefähr der gleichen Anzahl Punkte bei einem Volumen von 0.1 Lot-Größe entspricht. Der maximale Rückgang war gleichzeitig 30%, was unzweifelhaft sehr hoch ist. Schauen wir und Abbildung 4-9 an.

Die gleiche Strategie, jedoch bereits gefiltert mit den Werten von 26-WOchen Index der Operatoren:



Abbildung 4-9. Die Handelsergebnisse mit Verwendung der COT Filter.


Wie wir sehen, ist die Anzahl der Trades stark zurückgegangen, die mathematische Erwartung von Gewinntrades hat zugenommen. Der abschließende Gewinn ist viel größer als in dem ersten Test, aber die größte Änderung tritt bei dem maximalen Rückgang auf. Jetzt ist dieser 8,6%, was viel weniger als in der vorherigen Version ist. Die COT Filter sind zweifellos ausreichend effektiv, um die Strategie zu verbessern.

Um die maximale Effizienz der Verwendung von CFTC Informationen zu bestimmen, ist es erforderlich eingehende Untersuchungen durchzuführen, dies ist hier im Artikel nicht möglich. Die Hauptaufgabe dieses Bereichs - die Grundlagen darstellen und einfache Beispiele verwenden, um zu zeigen, dass die Verwendung der CFTC Daten effektiv sein kann.

Ob Sie dieser Methode in realem Trading folgen oder nicht, hängt von Ihnen ab.


4.3 Ein Epilog mit Fortsetzung

Wenn Sie noch immer keine Fragen zu dem Thema haben, kann dies bedeuten, dass Sie den Artikel nicht sorgfältig gelesen haben, oder Sie interessieren sich nicht für das vorgeschlagene Konzept. Ich hoffe, dass Sie gegenwärtig viele Fragen haben, einige Antworten können im Folgenden gefunden werden. Tatsächlich ist es eine kurze FAQ, die Ihnen helfen kann viele Probleme bei der Verwendung der Konzeption zu lösen.


1. Sollte ich die Logik des Position-Öffnens des beschriebenen Experten in der Praxis anwenden?

Natürlich nicht. Sie können leicht eine besser geeignete Technik zum Bestimmen genauer Punkte für den Markteintritt ermitteln. Vielleicht haben Sie bereits eigene Erfahrungen im Bereich der technischen Analyse. Versuchen Sie die CFTC Filter in der Handelsstrategie anzuwenden. Sie können Ihre eigene Technik der Positionsverwaltung in den Meta COT Recherche Roboter einfügen .

2. Den Gruppen-Positionen ist es besser sie zu beobachten un zu folgen?

Darauf gibt es keine bestimmte Antwort. Mit dem Meta COT Experten können Sie ermitteln welche Gruppe die effektivste an einem bestimmten Markt ist. Probieren Sie alle drei Händlergruppen an jedem Markt, und wähle Sie diejenige mit den genaueren Prognosen.

3. Welchen Indikator am besten verwenden?

Hier gibt es keine definitive Antwort. Die vorläufigen Tests zeigen, dass der WILLCO oder der Index Movement eine gute Wahl wären. Noch einmal, Sie müssen den Indikator wählen der, erstens, gut mit dem Markt korreliert und zweitens, gut mit dem verwendeten Handelssystem zu kombinieren ist. In jedem Fall muss der Recherche Roboter den am besten geeigneten Indikator bestimmen, über die Programmlogik des Handelssystems.

4. Welcher Mittelungszeitraum sollte gewählt werden?

Es gibt keine bestimmte Antwort. Vielleicht ist die beste Option für einen kurzfristigen Trader Indikatoren mit 26-Wochen Periode Mittelung oder Indikator Movement Index. Für Trader, die ihre Position halten möchten, sind Indikatoren mit einem großen Berechnungszeitraum besser geeignet. Unterschiedlich zu den anderen 26-Wochen Berechnungen. Längere Zeiträume unterscheiden sich nicht untereinander. Verwenden Sie außerdem keinen Berechnungszeitraum von weniger als 26 Wochen. Auch die halbjahres-Indikatoren sind sehr volatil und haben starke Turbulenzen. Der optimale Zeitraum kann von Markt zu Markt variieren, und er sollte gut mit dem verwendeten Handelssystem korrelieren. Der optimale Berechnungszeitraum kann einfach mit dem Recherche Roboter über Brute Force ermittelt werden.

5. Welches Niveau der Indikatoren wird als kritisch betrachtet?

In seinem Buch, zeigt Larry Williams Charts mit verschiedenen Ebenen. Einige der Diagramme haben die Ebenen 25% - 75%, andere haben 20% - 80%. Vielleicht sind die effektiven Grenzen an einigen Märkten etwas breiter, an anderen etwas enger. In jedem Fall liegt der effiziente Bereich innerhalb von 0% bis 30% und 70% bis 100%. Sie können den Recherche Roboter verwenden, um die optimalen Ebenen zu bestimmen. Erstellen Sie zwei Variablen mit den Werten der oberen und unteren Ebene. Stellen Sie diese Variablen zum Optimieren ein. Versuchen Sie die Werte zu verändern, um die optimalen Ergenisse zu ermitteln.

6. Warum haben die Operatoren (Hedge Fonds, die Masse) an einigen Märkten ein ungewöhnliches Verhalten?

Ein möglicher Grund für das ungewöhnliche Verhalten einer Händlergruppe kann deren interne Struktur sein, und Probleme, die sie versuchen mit Handels an den Rohstoffmärkten zu lösen. Zum Beispiel können die Struktur und Aufgaben von Hedgern am Goldmarkt ganz unterschiedlich zu deren Aufgaben am Währungsmarkt sein. In jedem Fall sollten Sie die effizienteste Gruppe von Händlern nutzen (siehe Frage 2.).

7. Ich möchte mehrere Instrumente mir Mata COT Aggregation in einem kombinieren, aber ich bin nicht sicher, ob die Vereinigung korrekt sein wird. Wie kann ich prüfen, ob ich die Instrumente richtig kombiniert habe?

Zunächst müssen Sie die resultierende Datei in einen Indikator laden und visuell die Werte der Markt-Umkehrpunkte bestimmen. Das allgemeine Prinzip muss beibehalten werden: Die Operatoren müssen das höchste Niveau an Verkäufen vor dem Fall des Marktes haben, die anderen im Gegensatz, müssen die Möglichkeit zum Kaufen haben in diesem Moment. Der Spiegel der Situation sollte am unteren Rand des Marktes sein. Wenn die visuelle Prüfung die richtigen Werte zeigt, dann kann in dem Recherche Roboter getestet werden. Wenn das Ergebnis positiv ist und die aus dem Standard-Bericht erhaltenen Ergebnisse übertrifft, kann die Kombination als richtig angesehen und in den Handel eingefügt werden.

8. Die Berichte funktionieren auf einigen Märkten nicht. Alle Indikatoren erzielen negative Ergebnisse.

Versuchen Sie in solchen Märkten ein Handelssystem ohne CFTC Filter zu verwenden. Vergleichen Sie die Ergebnisse. Wenn das System ohne die Filter schlechtere Ergebnisse hat als mit ihnen, liegt das Problem vielleicht in dem System selbst. In diesem Fall müssen Sie Ihr Handelssystem auf mindestens neutral verbessern, und dann CFTC Filter hinzufügen und erneut testen. Versuchen, Testen und Optimieren - ein üblicher Ansatz zum Erkennen und Lösen von Problemen.

9. Ich kann den Bericht für den Markt nicht finden.

Berichte gibt es nicht für alle Märkte. Vielleicht hat der von Ihnen gewählte Markt keine gesammelten Berichte. Versuchen Sie den von Ihnen gewünschten Markt in der in Abschnitt 4. vorgestellten Tabelle zu finden. Wenn er nicht in der Tabelle ist, dann existiert der Bericht sehr wahrscheinlich nicht, oder er ist nicht vollständig, also kann er nicht verwendet werden. Wenn der Markt in der Tabelle angegeben ist, sehen Sie sich den zugehörigen Namen des Dateiberichts an. Laden Sie diese Datei manuell in den Indikator.

10. Der Indikator (Skript, Expert Advisor) funktioniert nicht. Was muss ich machen?

Sie sollte sorgfältig den 3. Teil des Artikels lesen. Meistens haben Sie etwas vergessen oder falsch durchgeführt. Bitte lesen Sie alles sorgfältig und versuchen Sie das Problem zu lösen.

11. Der Indikator wird nicht angezeigt.

Der häufigste Grund ist das Fehlen der Berichtsdatei. Versichern Sie sich, dass die Datei heruntergeladen wurde. Dazu öffnen Sie das "Terminal", wählen die Registerkarte "Journal" und laden den Indikator erneut. Wenn der Indikator die Berichtsdatei nicht findet, erhalten Sie eine Warnmeldung: "Error downloading the file File_name.scv. Further work is impossible." Gehen Sie zu dem \files Verzeichnis Ihres Terminals und prüfen Sie das Vorhandensein der Datei. Wenn die Datei nicht existiert, löschen Sie alle Aufzeichnungen mit dem Batch Programm erase_cot.bat, und erstellen Sie sie neu. Die erforderliche Datei sollte erschienen.

12. Der Indikator wird angezeigt, aber nicht wie festgelegt. Anstatt des Indikator-Namen ist dort "INSTRUMENT NOT FOUND!".

Meistens stimmt der Name des aktuellen Tools nicht mit einem der Berichte überein. Öffnen Sie die Datei settings.ini und finden Sie den Bericht, der automatisch geladen werden soll. Wenn Sie den Bericht nicht finden, erstellen Sie die Einstellung selbst (siehe Abschnitt 3.4). Fügen Sie das Instrument der Dateiliste hinzu. Starten Sie den Indikator neu und es sollte funktionieren.

13. Der Expert Advisor handelt nicht.

Ein möglicher Grund ist, dass die Berichtsdateien für die Funktion des Expert Advisors nicht in das Verzeichnis \tester\files kopiert wurden. Kopieren Sie alle Dateien, einschließlich der Konfigurationsdatei in das Verzeichnis \tester\files. Der Expert Advisor muss funktionieren.

14. Ist es möglich meinen eigenen Indikator auf Grundlage von Meta COT zu erstellen?

Natürlich. Die Hauptfunktion, die Sie benötigen ist get_data (int type, int bar). Sie gibt den Wert des Indikators zurück, der durch den type Parameter bestimmt wird. Der dritte Teil des Artikels hat mehr Informationen über den Hauptcode und Beispiele.

15. Wie erstelle ich einen Portfolio Expert Advisor?

Wir haben keinen Multi-Instrumente Handel bereitgestellt. Sie müssen ihre eigene Methode für das Herunterladen der Daten entwickeln. Alternativ können Sie auch ein sortiertes Datei-Laden anwenden, in diesem Fall können die Daten für jedes Instrument in einem separaten Bereich gespeichert werden. Aber all dies benötigt weitere Entwicklung.

16. Die Skripte werden ausgeführt ohne die Möglichkeit der Einstellung / Jedes Mal beim Starten des Skripts wird das Einstellungen-Fenster angezeigt, obwohl dies nicht notwendig ist.

Es gibt die #property Anweisung, die den Aufruf der Einstellungen festlegt. Wenn Sie die Einstellungen nicht mehr ändern müssen, kommentieren Sie es einfach. Und umgekehrt, wenn Sie Einstellungen ändern müssen, entfernen Sie den Kommentar. Dann kompilieren Sie das Skript neu.

17. Auch nach dem Lesen des Artikels habe ich viele Fragen...

Sie können das Buch von Larry Williams lesen, "Trade Stocks & Commodities with the Insiders: Secrets of the COT Report for a several times. The CTFC reports analysis is a large topic."


Referenzen

1. Larry Williams, Trade Stocks & Commodities with the Insiders: Secrets of the COT Report (Wiley Trading)

2. Stephen Briese. The Commitments of Traders Bible.

3. Campbell R. McConnell, Stanley L. Brue. Economics: Principles, Problems, and Policies, 16th edition

4. Todd Lofton, Getting Started in Futures

5. http://www.procapital.ru/forumdisplay.php?f=267 Das Thema der CFTC Berichtsanalyse-Anwendung (auf Russisch).

6. http://www.aup.ru/articles/finance/1.htm Das Konzept des Risikos der Wirtschaftstätigkeit von Valery Romanov.

7. http://www.timingcharts.com Seite mit COT Charts.

8. http://www.ireallytrade.com Larry Williams Seite. Sie enthält aktuelle Informationen über CFTC Berichte. Auf der Hauptseite gibt Larry Williams nützliche Ratschläge zu den letzten Handelsmöglichkeiten.

9. http://commitmentsoftraders.org Steve Briese's Seite. Sie handelt meistüber sein Buch. Es enthält ntzliche Analyse und zusätzliche Indikatoren, grundsätzlich in PDF.

10. http://cftc.gov U.S. Commodity Futures Trading Commission Seite. Sie enthäält die letzten Informationen über Händler-Positionen, eine wichtige Quelle für Informationen für die COT Analyse.


Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/ru/articles/1573

Beigefügte Dateien |
MetaCOT.zip (51.11 KB)
Synthetische Balken - Eine Neue Dimension Zur Anzeige Grafischer Informationen über Kurse Synthetische Balken - Eine Neue Dimension Zur Anzeige Grafischer Informationen über Kurse
Der wesentliche Nachteil bei der herkömmlichen Anzeige von Kursinformationen mit Balken und japanischen Kerzen ist, dass sie an einen Zeitrahmen gebunden sind. Es war vielleicht zu der Zeit optimal, als diese Verfahren erzeugt wurden, aber heute sind die Marktbewegungen manchmal zu schnell, auf diese Weise in einem Chart angezeigte Kurse können nicht zu einer sofortigen Reaktion auf eine neue Bewegung beitragen. Das vorgeschlagene Kurs-Chart Anzeigeverfahren hat diesen Nachteil nicht und bietet ein sehr vertrautes Layout.
Mechanisches Handelssystem "Chuvashov's Fork" Mechanisches Handelssystem "Chuvashov's Fork"
Dieser Artikel lenkt Ihre Aufmerksamkeit auf die kurze Bewertung der Methode und des Programmcodes des mechanischen Handelssystems (MTS), basierend auf der von Stanislav Chuvashov vorgeschlagenen Technik. Die in dem Artikel betrachtete Marktanalyse hat etwas gemeinsam mit dem Ansatz von Thomas DeMark zum Zeichnen von Trendlinien für den letzte naheliegenden Zeitintervall. Fractale sind die Referenzpunkte bei der Konstruktion von Trendlinien.
Traders Kit: Drag Trade Library Traders Kit: Drag Trade Library
Der Artikel beschreibt die Drag Trade Library, die Funktionalität für visuelles Trading bereitstellt. Die Bibliothek kann in nahezu jeden Expert Advisor integriert werden. Ihr Expert Advisor kann fast mühelos von einem Automaten in ein Handels- und Informationssystem umgewandelt werden, durch einfaches Hinzufügen von ein paar Zeilen Code.
Fractal Analyse von Gemeinschaften Währungsbewegungen Fractal Analyse von Gemeinschaften Währungsbewegungen
Wie unabhängig sind Währungskurse? Sind ihre Bewegungen koordiniert oder sagt die Bewegung einer Währung nichts aus über die Bewegung einer anderen? Der Artikel beschreibt einen Versuch dieses Problem in Angriff mit nicht-linearer Dynamik und Fraktal-Geometrie-Methoden in Angriff zu nehmen.