Handel mit einem Portfolio von Währungspaaren - Seite 9

 
MetaDriver:

Sie sind wegen der Geschichte da. (Wirklich ganz in Weiß, was ganz im Sinne der Werbung ist, wie ich bestätige).

Sie müssen nur weiß und flauschig sein, denn nach dem von Neumann-Morgenstern-Theorem ist der MiniMax-Wert der Preis des Spiels, d. h. der minimale Erwartungswert. Ein optimal diversifiziertes Portfolio muss rentabel sein, unabhängig davon, in welche Richtung sich die Kurse der ausgewählten Instrumente bewegen. Wenn das Portfolio also zumindest in einer historischen Periode Verluste zulässt, ist seine erwartete Auszahlung gemäß dem obigen Lehrsatz negativ und es ist nicht optimal diversifiziert.
 
C-4:

Aber niemand, der bei Verstand ist, würde etwas benutzen, nur weil es offen ist, ohne zu verstehen, wie es funktioniert.

Niemand ist gezwungen, sie zu benutzen. Der Quellcode ist offen, die grundlegende mathematische Theorie und die Algorithmen sind nicht geheim. Diejenigen, die bei klarem Verstand sind und ein gutes Gedächtnis haben, sind in der Lage, selbst herauszufinden, wie es funktioniert. Der Rest von uns kann sich ausruhen.
 
kharko:

Die Implementierung erfordert die Aufzählung aller Varianten. Die Gesamtzahl der Varianten ist 2 hoch N, wobei N die Anzahl der Instrumente im Portfolio ist. Vielleicht kann jemand helfen - mit fertigem Code. Dafür wäre ich sehr dankbar.

Optimiert für die Absenkung. Die Linie ist jetzt gerader. Doch während ich darüber nachdachte, tauchte plötzlich eine Frage auf. Wie berechnen Sie den Spread? Schließlich müssen Sie wissen, wie viele Geschäfte in welchem Umfang zustande kommen werden! Ich berücksichtige den Spread in meinem Indikator nicht, aber ich habe versucht zu zählen, wie viele Punkte wir bei Swaps verlieren/gewinnen werden. Bei der Optimierung werden Swaps nicht berücksichtigt.

Warnung! Ich empfehle dringend, nicht eine große Anzahl von Währungspaaren und die Anzahl der zu analysierenden Balken zu verwenden.

Bei der Optimierung durch Drawdown von 10 Währungspaaren und dem Parameter Lengh = 100 initialisiert der Indikator etwa 5 Sekunden! Haben Sie Geduld :)

 

Beispiel für das Ausfüllen der Datei ET_para.csv, die sich im Ordner files befinden sollte:

Symbol Typ
EURUSD1
EURGBP0
EURCHF1
EURJPY1
GBPUSD1
USDCHF0
USDJPY1
AUDUSD1
USDCAD1
NZDUSD0

Die erste Zeile wird für die Kopfzeile verwendet und geht nicht in die Berechnungen ein!

Dateien:
et_para.zip  1 kb
 
EvgeTrofi:

Optimiert für die Absenkung. Die Linie ist jetzt gerader. Doch während ich darüber nachdachte, tauchte plötzlich eine Frage auf. Wie berechnen Sie den Spread? Schließlich müssen Sie wissen, wie viele Geschäfte in welchem Umfang zustande kommen werden! Ich berücksichtige den Spread in meinem Indikator nicht, aber ich habe versucht zu zählen, wie viele Punkte wir bei Swaps verlieren/gewinnen werden. Bei der Optimierung werden Swaps nicht berücksichtigt.

Warnung! Ich empfehle dringend, nicht eine große Anzahl von Währungspaaren und die Anzahl der zu analysierenden Balken zu verwenden.

Bei der Optimierung durch Drawdown von 10 Währungspaaren und dem Parameter Lengh = 100 initialisiert der Indikator etwa 5 Sekunden! Habt Geduld :)

Gute Arbeit...

Spreads und Swaps werden nicht berücksichtigt. Der Indikator funktioniert nur mit Punkten.

Wenn wir das Volumen, den Spread und den Pip-Wert berücksichtigen, erhalten wir eine virtuelle Equity-Kurve, die direkt von den richtigen Werten dieser Parameter abhängt. Wir müssen den Pip-Wert auf jedem Balken für alle Instrumente im Portfolio in der Depotwährung berechnen. Bei vielen Maklerhäusern variiert der Spread-Wert, was die Kurve erheblich verzerrt.

Ich interessiere mich für Ihren Algorithmus, mit dem Sie alle Optionen ausprobieren. Für Ihre Hilfe wäre ich Ihnen sehr dankbar.

 

Die Optionsmatrix wird wie folgt gebildet:

void Sbor(int& Ar[][]){
   //Создание массива вариантов сочитаний действий над валютными парами
   int Begin = 0;
   int Size = MathPow(V, CountSy);
   int min = 0;
   int max = 1;
   if(V==3) min = -1;
   ArrayResize(Ar, Size);
   for(int i = 0; i < Size; i++){ // Варианты (строки)
      for(int j = 0; j < CountSy; j++){ // Инструменты (столбцы)
         if(i==0){
            Ar[i][j]=0;
         }else{
            if(j==0){
               if(Ar[i-1][j]<max){
                  Ar[i][j]++;
               }else{
                  Ar[i][j]=min;
               }
            }else{
               if(Ar[i][j-1]<Ar[i-1][j-1]){
                  if(Ar[i-1][j]<max){
                     Ar[i][j]++;
                  }else{
                     Ar[i][j]=min;
                  }
               }else{
                  Ar[i][j]=Ar[i-1][j];
               }
            }
         }
      }//Next j
   }//Next i
}//Sbor()

Um das Verständnis dieses Codes zu erleichtern, habe ich eine Excel-Tabelle mit Formeln für die Bildung einer solchen privaten Matrix hochgeladen.

Dann müssen Sie einfach alle Varianten mit roher Gewalt durchspielen :)

Dateien:
arvar.zip  5 kb
 
EvgeTrofi:

Die Optionsmatrix wird wie folgt gebildet:

Um das Verständnis dieses Codes zu erleichtern, habe ich eine Excel-Tabelle mit Formeln für die Bildung einer solchen privaten Matrix hochgeladen.

Danach müssen Sie nur noch alle Varianten durchspielen :)

spb

Ich habe einen einfacheren Code geschrieben:

void Matrica()
{
   double size = MathPow(2,Num.Para);
   int trend[];
//---
   ArrayResize(trend,Num.Para);
   for(int i=0;i<size;i++)
   {
      int x = i;
      int pos = 0;
      ArrayInitialize(trend,0);
      while(x>0)
      {
         trend[pos] = x % 2;
         pos++;
         x = MathFloor(x / 2);
      }
// Вывод варианта      
   }
}
Die Variantennummer wird in einem binären Zahlensystem dargestellt.


 

Es wurde eine Anzeige des Drawdowns und des Gewinnfaktors (Verhältnis zwischen aktuellem Saldo und maximalem Drawdown) hinzugefügt. Je größer diese Zahl ist, desto stabiler sieht das Diagramm aus. Mit diesem Wert wird die Optimierung durchgeführt.

Die Anzahl der für die Optimierung aufgewendeten Sekunden wird in den Kommentaren angezeigt. :)

 

EvgeTrofi:

Achtung! Ich empfehle dringend, nicht eine große Anzahl von Währungspaaren und die Anzahl der analysierten Balken zu verwenden.

Bei der Optimierung des Drawdowns von 10 Währungspaaren und dem Parameter Lengh = 100, initialisiert der Indikator etwa 5 Sekunden!!! Habt Geduld :)

Ich habe mir überlegt, wie ich die Begrenzung der Anzahl der Balken umgehen kann. Sie müssen das Zeitintervall für die Optimierung durch eine Zahl teilen, z. B. durch 100. Wenn das Intervall 1000 Balken umfasst, ergeben sich 1000 / 100 = 10 Zeitpunkte, an denen wir Berechnungen durchführen können. Je kleiner also die Zahl ist, desto höher ist die Rechengenauigkeit.
 
kharko:
Ich habe eine Möglichkeit gefunden, die Begrenzung der Anzahl der Balken zu umgehen. Es ist notwendig, den Zeitrahmen für die Optimierung durch eine Zahl zu teilen, z. B. durch 100. Bei 1000 Balken im Intervall ergeben sich 1000 / 100 = 10 Zeitpunkte, an denen wir Berechnungen durchführen können. Je kleiner also die Zahl ist, desto höher ist die Rechengenauigkeit.

Darüber habe ich mir auch schon den Kopf zerbrochen. Es zeigt sich, dass die Wahrscheinlichkeit einer Anpassung umso höher ist, je weniger Abschnitte es gibt.

Andererseits verwendet R-Portfolio Zahlungsmatrizen, von denen die informativsten quadratisch sind, d.h. wie viele Finanzinstrumente analysiert werden, so viele Abschnitte sollten ungefähr sein.

Der Punkt ist jedoch, dass selbst gut korrelierte Instrumente zu bestimmten Zeitpunkten ihre Korrelationsvorzeichen ändern können. D.h. wenn man die Fragmente nach eigenem Gutdünken zerlegt, dann besteht die Möglichkeit, dass die Analyse genau solche schlechten Momente mit den veränderten Vorzeichen enthält.

Um es kurz zu machen, bin ich zu dem Schluss gekommen, dass wir die Abschnitte nicht in gleichen Abständen (mit der gleichen Anzahl von Balken) unterbrechen sollten, sondern an den Extremen eines einzelnen Symbols (z. B. desjenigen, das den größten Anteil im Portfolio hat). D.h. Anwendung von ZigZag oder eines anderen Algorithmus, Erkennung von Trendbruchpunkten und anhand dieser Punkte (nur auf diesen Balken) Abzug von Kursen zur weiteren Einspeisung in R-Portfolio (oder ein anderes Portfolioanalyseprogramm). Das scheint der koscherste und informativste Weg zu sein. Andernfalls kommt es zu einer Art Rauschanalyse zwischen den Korrekturpunkten, zum Beispiel bei seitlichen Änderungen.