Spread zwischen zwei Futures

 

Guten Tag zusammen!

Ich habe einen Indikator geschrieben, der den Spread zwischen zwei Futures zeichnet. Ich habe zwei Probleme:

1) Der Indikator ist sehr fehlerhaft, manchmal wird er angezeigt, manchmal nicht, dann zeigt er irgendeinen Unsinn an (ich muss auf Aktualisieren drücken, und dann scheint er wieder zu funktionieren);

2) Der Algorithmus des Autors für die Synchronisierung der Preise von zwei Futures: Da bei Futures oft der eine oder andere Balken fehlt (aufgrund geringer Liquidität), war es ein Problem, ihre Balken zu synchronisieren, um einen echten Spread zwischen ihnen zu erhalten. Ich habe im Forum gesucht und nichts zu diesem Thema gefunden. Schließlich kam ich auf die folgende Methode: Wir nehmen 4 Zeitreihen - Balkenzeit für Instrument #1, Balkenschlusskurse von Instrument #1, Balkenzeit von Instrument #2, Balkenschlusskurs von Instrument #2. Wenn wir die gleiche Anzahl von Balken in der Zeitreihe angeben, sind sie für ein Instrument identisch und für ein anderes identisch (verbindliche Zeit und Schlusskurse). Es bleibt nur noch, die Zeit des einen Instruments mit der des anderen zu synchronisieren. Nachfolgend ein Beispiel für die Spreadbildung auf der Grundlage der Daten von Instrument Nr. 1: Wir nehmen den i-ten Schlusskurs von Instrument Nr. 1 und subtrahieren davon den Kurs von Instrument Nr. 2, dessen Index gleich dem Index der Zeitreihe von Instrument Nr. 2 ist, dessen Zeitwert mit der Reihe für Instrument Nr. 1 übereinstimmt.

   if(Flag==SincForIn1)									// Синхронизируем по первому инструменту.
      {
       while(i>=0)                                                			// Цикл перебора для расчета спреда для всех непосчитанных баров, от самого последнего i до нулевого.
         {
          SpreadBuffer[i]=closeIn1[i]-closeIn2[ArrayBsearch(timeIn2,timeIn1[i])]; 	// Расчет спреда (существуют различия в количесве баров двух инструментов, за основу берутся бары Инструмента №1)
          i--;                                                    			// Снижение индекса бара для перехода расчетов к следующему бару и так до нулевого включительно.
         }

Ich kann mir nichts Besseres vorstellen. Ich würde gerne Ihre Vorschläge hören, vielleicht gibt es einen viel einfacheren, klareren und effektiveren Weg, einen synchronisierten Spread-Chart von zwei Futures zu erstellen. Vielleicht hört es dann auf zu stören, oder ich schreibe "coole" Indikatoren...

Ich habe den Indikator an den Beitrag angehängt.

Vielen Dank im Voraus.

Dateien:
Spread.mq5  24 kb
 
iiivasyaiii:

Guten Tag zusammen!

Ich habe einen Indikator geschrieben, der den Spread zwischen zwei Futures zeichnet. Ich habe zwei Probleme:

1) Der Indikator ist sehr fehlerhaft, manchmal wird er angezeigt, manchmal nicht, dann zeigt er irgendeinen Unsinn an (ich muss auf Aktualisieren drücken, und dann scheint er wieder zu funktionieren);

2) Der Algorithmus des Autors für die Synchronisierung der Preise von zwei Futures: Da bei Futures oft der eine oder andere Balken fehlt (aufgrund geringer Liquidität), war es ein Problem, ihre Balken zu synchronisieren, um einen echten Spread zwischen ihnen zu erhalten. Ich habe im Forum gesucht und nichts zu diesem Thema gefunden. Schließlich kam ich auf die folgende Methode: Wir nehmen 4 Zeitreihen - Balkenzeit für Instrument #1, Balkenschlusskurse von Instrument #1, Balkenzeit von Instrument #2, Balkenschlusskurs von Instrument #2. Wenn wir die gleiche Anzahl von Balken in der Zeitreihe angeben, sind sie für ein Instrument identisch und für ein anderes identisch (verbindliche Zeit und Schlusskurse). Es bleibt nur noch, die Zeit des einen Instruments mit der des anderen zu synchronisieren. Nachfolgend ein Beispiel für die Spreadbildung auf der Grundlage der Daten von Instrument Nr. 1: Wir nehmen den i-ten Schlusskurs von Instrument Nr. 1 und subtrahieren davon den Kurs von Instrument Nr. 2, dessen Index gleich dem Index der Zeitreihe von Instrument Nr. 2 ist, dessen Zeitwert mit der Reihe für Instrument Nr. 1 übereinstimmt.

Ich kann mir nichts Besseres vorstellen. Ich würde gerne Ihre Vorschläge hören, vielleicht gibt es einen viel einfacheren, klareren und effektiveren Weg, einen synchronisierten Spread-Chart von zwei Futures zu erstellen. Vielleicht hört es dann auf zu stören, oder ich schreibe "coole" Indikatoren...

Ich habe den Indikator an den Beitrag angehängt.

Vielen Dank im Voraus.

Sie müssen die Geld- und Briefkurse nehmen, um die Spanne darzustellen. Das Diagramm ist von Flipper gezeichnet und das wäre nicht korrekt.
 
Maxim Romanov:
Ich muss die Geld- und Briefkurse nehmen, um den Spread zu bilden. Das Diagramm wird mit dem Flipper gezeichnet und ist daher nicht korrekt.

Maxim, ich danke Ihnen für Ihre Aufmerksamkeit für mein Problem.

Ich habe ein paar Anmerkungen zu Ihrer Antwort:

1) Die Preise der (zuletzt) getätigten Transaktionen werden nicht gezeichnet, es handelt sich nicht um Forex. Wenn Sie etwas anderes gemeint haben, erklären Sie es bitte genauer.

2) Bid and Ask ist sicherlich gut, aber es ist um eine Größenordnung komplizierter. Ich habe versucht, zwei zusätzliche Zeilen für den Haupt-Spread zu schreiben, z. B. Buy Spread und Sell Spread. Ich habe es einmal versucht (übrigens war es lange Zeit so gezeichnet), aber dann habe ich etwas im Code geändert und es verschwand und tauchte nie wieder auf)), wenn ich es brauche, kann ich dir seinen Code schicken. Und der größte Nachteil von bid und ax: wenn ich mich erinnere, sind die Daten bid und ax für die letzten 2000 Ticks gespeichert, so dass eine lange Geschichte auf sie kann nicht analysiert werden.

Beginnenwir also damit, den Spread zwischen den beiden Instrumenten auf Basis der Schlusskurse zu berechnen. Ist mein Ansatz, die Preise von zwei Instrumenten mit ArrayBsearch() zu synchronisieren, richtig oder gibt es eine einfachere Methode?

 
iiivasyaiii:

Maxim, ich danke Ihnen für Ihre Aufmerksamkeit für mein Problem.

Ich habe ein paar Anmerkungen zu Ihrer Antwort:

1) Die Preise der (zuletzt) getätigten Transaktionen werden nicht gezeichnet, es handelt sich nicht um Forex.

Mit diesem Wissen ist es zu früh für Sie, solche Indikatoren zu schreiben.

 
iiivasyaiii:

Guten Tag zusammen!

Ich habe einen Indikator geschrieben, der den Spread zwischen zwei Futures zeichnet. Ich habe zwei Probleme:

1) Der Indikator ist sehr fehlerhaft, manchmal wird er angezeigt, manchmal nicht, dann zeigt er irgendeinen Unsinn an (ich muss auf Aktualisieren drücken, und dann scheint er wieder zu funktionieren);

2) Der Algorithmus des Autors für die Synchronisierung der Preise von zwei Futures: Da bei Futures oft der eine oder andere Balken fehlt (aufgrund geringer Liquidität), war es ein Problem, ihre Balken zu synchronisieren, um einen echten Spread zwischen ihnen zu erhalten. Ich habe im Forum gesucht und nichts zu diesem Thema gefunden. Schließlich kam ich auf die folgende Methode: Wir nehmen 4 Zeitreihen - Balkenzeit für Instrument #1, Balkenschlusskurse von Instrument #1, Balkenzeit von Instrument #2, Balkenschlusskurs von Instrument #2. Wenn wir die gleiche Anzahl von Balken in der Zeitreihe angeben, sind sie für ein Instrument identisch und für ein anderes identisch (verbindliche Zeit und Schlusskurse). Es bleibt nur noch, die Zeit des einen Instruments mit der des anderen zu synchronisieren. Nachfolgend ein Beispiel für die Spreadbildung auf der Grundlage der Daten von Instrument Nr. 1: Wir nehmen den i-ten Schlusskurs von Instrument Nr. 1 und subtrahieren davon den Kurs von Instrument Nr. 2, dessen Index gleich dem Index der Zeitreihe von Instrument Nr. 2 ist, dessen Zeitwert mit der Reihe für Instrument Nr. 1 übereinstimmt.

Ich kann mir nichts Besseres vorstellen. Ich würde gerne Ihre Vorschläge hören, vielleicht gibt es einen viel einfacheren, klareren und effektiveren Weg, einen synchronisierten Spread-Chart von zwei Futures zu erstellen. Vielleicht hört es dann auf zu stören, oder ich schreibe "coole" Indikatoren...

Ich habe den Indikator an den Beitrag angehängt.

Ich habe sie an den Beitrag angehängt, vielen Dank im Voraus.

Guten Tag!

1. Sie müssen in der Rubrik "Aktienhandel" schreiben.

2. Sie können 2 Futures nicht per Balken synchronisieren.

Als Basis sollten Sie die Barren eines der Futures nehmen (der liquideste SBRF 9.20 ist besser).

3. Um ein vollständiges Bild des Spreads zu erhalten, sollten Sie nicht Close, sondern Ticks nehmen und diese mit den Bars eines als Hauptfutures ausgewählten Futures synchronisieren.

4. Um eine schnelle Neuberechnung zu ermöglichen, sollten Sie sich die zuletzt berechnete Position merken.

Beispiel für einen Code zur Neuberechnung der Streuung mit Synchronisierung der Balkenzeit

int pr_pos = 0;
            int sec_pos = 0;
            bool is_found;
            int pr_mem = 0;
            int sec_mem = 0;
            for(int i = 0; i < a_bars; i++)
            {
              is_found = false;
              while(pr_pos < pr_cnt) 
              {
                if((ulong(data_time[i].time) <= ulong(pr_ticks[pr_pos].time)) &&
                   (ulong(data_time[i].time) + 60 > ulong(pr_ticks[pr_pos].time)))
                {
                  pr_mem = pr_pos;
                  while(sec_pos < sec_cnt) 
                  {
                    if((ulong(data_time[i].time) <= ulong(sec_ticks[sec_pos].time)) &&
                       (ulong(data_time[i].time) + 60 > ulong(sec_ticks[sec_pos].time)))
                    {
                      is_found = true;
                      sec_mem = sec_pos;
                      if((sec_ticks[sec_pos].bid > 0.0) && (pr_ticks[pr_pos].ask > 0.0) &&
                         (sec_ticks[sec_pos].ask > 0.0) && (pr_ticks[pr_pos].bid > 0.0))
                      {
                        data_time[i].hi_value = sec_ticks[sec_pos].bid - pr_ticks[pr_pos].ask;
                        data_time[i].low_value = sec_ticks[sec_pos].ask - pr_ticks[pr_pos].bid;
                      }
                      break;
                    }
                    sec_pos++;
                  }
                  break;
                }
                pr_pos++;
              }
              if(is_found == false)
              {
                pr_pos = pr_mem;
                sec_pos = sec_mem;
              }
            }
 
Alexey Viktorov:

Mit diesem Wissen ist es noch zu früh für Sie, solche Indikatoren zu schreiben.

Da Sie so schlau sind, können Sie mir vielleicht sagen, wie man zwei Preisreihen durch Schlusskurse synchronisiert ;)

 
prostotrader:

Guten Tag!

1. Sie müssen den Abschnitt "Börsenhandel" anschreiben.

2. Es ist nicht möglich, 2 Futures über Balken zu synchronisieren.

Als Basis sollten Sie die Barren eines der Futures nehmen (der liquideste SBRF 9.20 ist besser).

3. Um ein vollständiges Bild des Spreads zu erhalten, sollten Sie nicht Close, sondern Ticks nehmen und diese mit den Balken eines als Hauptfutures ausgewählten Futures synchronisieren.

4. Um eine schnelle Neuberechnung zu ermöglichen, sollten Sie sich die zuletzt berechnete Position merken.

Ein Beispiel für einen Code zur Neuberechnung der Streuung mit Synchronisierung der Taktzeit

Prostotrader, vielen Dank für den Hinweis! Interessante Lösung, ich werde sie jetzt ausprobieren und später Bericht erstatten.

 
iiivasyaiii:

Da Sie so schlau sind, können Sie mir vielleicht sagen, wie man zwei Preisreihen durch Schlusskurse synchronisiert ;)

Das Wesentliche der Frage wurde Ihnen bereits mitgeteilt. Sie können einen Spread nicht nach den Preisen der Geschäfte (geschweige denn nach den Schlusskursen!) bilden, da es im langsamen Teil möglicherweise lange Zeit keine Geschäfte gibt, und selbst wenn es welche gibt, sind sie nicht mit den Preisen der Geschäfte im schnellen Teil synchronisiert. D.h. der Wert einer solchen Information ist gleich Null. Es gibt immer (oder fast immer) aktuelle Geld- und Briefkurse auf dem Markt, und genau diese sollten analysiert werden.

 
iiivasyaiii:

Maxim, ich danke Ihnen für Ihre Aufmerksamkeit für mein Problem.

Ich habe ein paar Anmerkungen zu Ihrer Antwort:

1) Die Preise der (zuletzt) getätigten Transaktionen werden nicht gezeichnet, es handelt sich nicht um Forex. Wenn Sie etwas anderes gemeint haben, erklären Sie es bitte genauer.

2) Bid and Ask ist sicherlich gut, aber es ist um eine Größenordnung komplizierter. Ich habe versucht, zwei zusätzliche Zeilen für den Haupt-Spread zu schreiben, z. B. Buy Spread und Sell Spread. Ich habe es einmal versucht (übrigens war es lange Zeit so gezeichnet), aber dann habe ich etwas im Code geändert und es verschwand und tauchte nie wieder auf)), wenn ich es brauche, kann ich dir seinen Code schicken. Und der größte Nachteil von bid und ax: wenn ich mich erinnere, sind die Daten bid und ax für die letzten 2000 Ticks gespeichert, so dass eine lange Geschichte auf sie kann nicht analysiert werden.

Beginnenwir also damit, den Spread zwischen den beiden Instrumenten auf Basis der Schlusskurse zu berechnen. Ist mein Ansatz, die Preise von zwei Instrumenten mit ArrayBsearch() zu synchronisieren, richtig oder gibt es eine einfachere Methode?

Ich bin kein Programmierer, ich brauche den Code nicht, ich kann nicht mit den Codes helfen. Aber ich werde Ihnen im Wesentlichen einen Tipp geben. Die Börseninstrumente werden also durch den Preis im Terminal gebildet, und, wie prostotrader schrieb, ist es nicht korrekt, sie durch nahe Preise zu synchronisieren. Nach Zecken, ja, das wird richtig sein. Suchen Sie sofort nach dem richtigen Weg, warum sollten Sie einen Fehler machen.)
 
prostotrader:

Guten Tag!

1. Sie müssen den Abschnitt "Börsenhandel" anschreiben.

2. Es ist nicht möglich, 2 Futures über Balken zu synchronisieren.

Als Basis sollten Sie die Barren eines der Futures nehmen (der liquideste SBRF 9.20 ist besser).

3. Um ein vollständiges Bild des Spreads zu erhalten, sollten Sie nicht Close, sondern Ticks nehmen und diese mit den Balken eines als Hauptfutures ausgewählten Futures synchronisieren.

4. Um eine schnelle Neuberechnung zu ermöglichen, sollten Sie sich die zuletzt berechnete Position merken.

Ein Beispiel für einen Code zur Neuberechnung der Streuung mit Synchronisierung der Taktzeit

Prostotrader, guten Tag! Bitte beraten Sie mich, ich habe Ihren Code nicht ganz verstanden:

1) Haben Sie die Funktion CopyTicksRange oder CopyTicks verwendet?

2) Die Beschreibung dieser Funktionen sagt, dass sie nicht mehr als 2000 Ticks kopieren können, bedeutet das, dass dieser Indikator keine längere Geschichte analysieren kann?

 
Dmi3:

Das Wesentliche der Frage wurde Ihnen bereits mitgeteilt. Die Spanne kann nicht auf Geschäftspreisen (geschweige denn auf Schlusskursen!) beruhen, da es im langsamen Teil möglicherweise lange Zeit keine Geschäfte gibt, und selbst wenn es welche gibt, sind sie nicht mit den Geschäftspreisen des schnellen Teils synchronisiert. D.h. der Wert einer solchen Information ist gleich Null. Auf dem Markt gibt es immer (oder fast immer) tatsächliche Geld- und Briefkurse, und diese müssen wir analysieren.

Ich bestreite nicht, dass die Gebote genauer sind (obwohl, als ich einen kurzen Zeitindikator hatte, der drei Spreads anzeigte: Flipper, Ask-Bead und Bid-Ask, lag der Flipper meistens zwischen den letzten beiden, was zeigt, dass der Flipper-Spread bei liquiden Instrumenten im Allgemeinen angemessen ist).

Lassen Sie uns dann herausfinden, wie wir die Synchronisierung von asc und bid möglichst ressourcenschonend und vorzugsweise mit einem tiefen Verlauf durchführen können.

Prostatrader bietet zum Beispiel eine interessante Option (siehe oben).

Grund der Beschwerde: