WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Optimierung technischer Finanzindikator

 

hammy
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 25.10.10
Wohnort: Schweiz
Version: ---
     Beitrag Verfasst am: 28.10.2010, 21:38     Titel: Optimierung technischer Finanzindikator
  Antworten mit Zitat      
Hallo zusammen

Bin an einer Optimierungsarbeit dran, komme aber nicht wirklich auf die Lösung. Habe zwar gesehen, dass man Gleichungen minimieren / maximieren kann. Wie man das aber mit ganzen Scripts macht, ist mir nicht ganz klar.

Ausgangslage:
1. Ich lade 105 Tageskurse der IBM Aktie
2. Ich rechne die Tagesrendite für jeden Tag aus
3. Ich Berechne den 10-Tagesdurchschnitt für die 105 Tage
4. Ich vergleiche den Durchschnitt mit dem aktuellen Kurs
a) wenn der aktuelle Kurs > Durschnitt, dann ist das Signal +1
b) vice versa; Signal = -1
5. Multiplikation der Signale mit der Rendite.

Wir ihr im Beispiel sieht, weicht die so erzielte massgeblich von jener der Aktie selbst ab.

Code:

load -ascii 'kursreihe.txt';
rendite = zeros(length(kursreihe),1);
moving = zeros(length(kursreihe),1);
rendite = log(kursreihe(1:end-1, :) ./ kursreihe(2:end, :));
rendite(end+1,1) = [0];

for count = 1:(length(kursreihe)-10)
   moving(count) = mean(kursreihe(count:count+9));
end

signal = zeros(length(kursreihe),1);

for count = 1:length(kursreihe)
   if kursreihe(count,1) > moving(count,1)
      signal(count,1) = 1;
   else
      signal(count,1) = -1;
   end
end

trueyield = rendite(1:end,1) .* signal(1:end,1);

Uebersicht = [kursreihe moving rendite signal trueyield]
Uebersicht =

  141.4300  140.3930    0.0054    1.0000    0.0054
  140.6700  140.2870    0.0059    1.0000    0.0059
  139.8400  140.2050    0.0012   -1.0000   -0.0012
  139.6700  140.1870   -0.0011   -1.0000    0.0011
  139.8300  140.1050    0.0054   -1.0000   -0.0054
  139.0700  139.9940    0.0075   -1.0000   -0.0075
  138.0300  139.8710   -0.0342   -1.0000    0.0342
  142.8300  139.8340    0.0125    1.0000    0.0125
  141.0600  139.0760   -0.0031    1.0000   -0.0031
  141.5000  138.5340    0.0080    1.0000    0.0080
  140.3700  137.7980    0.0037    1.0000    0.0037
  139.8500  137.3090    0.0014    1.0000    0.0014
  139.6600  136.8130    0.0058    1.0000    0.0058
  138.8500  136.3120    0.0009    1.0000    0.0009
  138.7200  135.8380    0.0064    1.0000    0.0064
  137.8400  135.1330    0.0013    1.0000    0.0013
  137.6600  134.6060    0.0177    1.0000    0.0177
  135.2500  134.0380   -0.0029    1.0000   -0.0029
  135.6400  133.6920    0.0111    1.0000    0.0111
  134.1400  133.1470   -0.0099    1.0000   -0.0099
  135.4800  132.7000    0.0044    1.0000    0.0044
  134.8900  132.0950    0.0018    1.0000    0.0018
  134.6500  131.4910    0.0040    1.0000    0.0040
  134.1100  130.9870    0.0184    1.0000    0.0184
  131.6700  130.3750   -0.0068    1.0000   -0.0068
  132.5700  129.8440    0.0045    1.0000    0.0045
  131.9800  129.1950    0.0014    1.0000    0.0014
  131.7900  128.5920    0.0122    1.0000    0.0122
  130.1900  128.1710    0.0040    1.0000    0.0040
  129.6700  127.6560    0.0019    1.0000    0.0019
  129.4300  127.2660    0.0045    1.0000    0.0045
  128.8500  126.6360   -0.0059    1.0000   -0.0059
  129.6100  126.0910    0.0126    1.0000    0.0126
  127.9900  125.6030    0.0128    1.0000    0.0128
  126.3600  125.0820    0.0022    1.0000    0.0022
  126.0800  124.9730    0.0010    1.0000    0.0010
  125.9500  124.8550   -0.0129    1.0000   -0.0129
  127.5800  124.9070    0.0201    1.0000    0.0201
  125.0400  124.8990   -0.0058    1.0000   -0.0058
  125.7700  125.2850    0.0212    1.0000    0.0212
  123.1300  125.6470   -0.0022   -1.0000    0.0022
  123.4000  126.1790   -0.0107   -1.0000    0.0107
  124.7300  126.6160    0.0158   -1.0000   -0.0158
  122.7800  126.9300   -0.0201   -1.0000    0.0201
  125.2700  127.4820    0.0030   -1.0000   -0.0030
  124.9000  127.9380   -0.0125   -1.0000    0.0125
  126.4700  128.6320   -0.0081   -1.0000    0.0081
  127.5000  129.1850   -0.0109   -1.0000    0.0109
  128.9000  129.4490   -0.0038   -1.0000    0.0038
  129.3900  129.6770    0.0073   -1.0000   -0.0073
  128.4500  129.8000    0.0053   -1.0000   -0.0053
  127.7700  129.9280   -0.0008   -1.0000    0.0008
  127.8700  130.1630   -0.0034   -1.0000    0.0034
  128.3000  130.1530   -0.0119   -1.0000    0.0119
  129.8300  130.0620   -0.0154   -1.0000    0.0154
  131.8400  129.8590   -0.0012    1.0000   -0.0012
  132.0000  129.4750    0.0142    1.0000    0.0142
  130.1400  129.0530   -0.0080    1.0000   -0.0080
  131.1800  128.8140    0.0043    1.0000    0.0043
  130.6200  128.3800    0.0068    1.0000    0.0068
  129.7300  127.7830   -0.0030    1.0000   -0.0030
  130.1200  127.4030    0.0182    1.0000    0.0182
  127.7700  127.3060    0.0030    1.0000    0.0030
  127.3900  127.2690   -0.0032    1.0000   -0.0032
  127.8000  127.5380   -0.0016    1.0000   -0.0016
  128.0000  127.7660    0.0017    1.0000    0.0017
  127.7800  127.9500    0.0002   -1.0000   -0.0002
  127.7500  127.9760    0.0071   -1.0000   -0.0071
  126.8400  127.9340    0.0174   -1.0000   -0.0174
  124.6500  127.9840   -0.0102   -1.0000    0.0102
  125.9300  128.1560   -0.0252   -1.0000    0.0252
  129.1500  127.8480    0.0136    1.0000    0.0136
  127.4000  127.0590   -0.0208    1.0000   -0.0208
  130.0800  126.5160         0    1.0000         0
  130.0800  125.7950    0.0018    1.0000    0.0018
  129.8400  125.2340    0.0140    1.0000    0.0140
  128.0400  125.0840    0.0056    1.0000    0.0056
  127.3300  124.9290   -0.0001    1.0000   -0.0001
  127.3400  124.9520    0.0076    1.0000    0.0076
  126.3700  125.1650    0.0283    1.0000    0.0283
  122.8500  125.3940    0.0130   -1.0000   -0.0130
  121.2600  126.1100   -0.0058   -1.0000    0.0058
  121.9700  126.9350   -0.0074   -1.0000    0.0074
  122.8700  127.7710   -0.0129   -1.0000    0.0129
  124.4700  128.4550   -0.0306   -1.0000    0.0306
  128.3400  128.9230    0.0145   -1.0000   -0.0145
  126.4900  128.8760   -0.0084   -1.0000    0.0084
  127.5600  129.0090   -0.0149   -1.0000    0.0149
  129.4700  128.9580    0.0063    1.0000    0.0063
  128.6600  128.3400   -0.0104    1.0000   -0.0104
  130.0100  127.7850    0.0039    1.0000    0.0039
  129.5100  127.1360   -0.0063    1.0000   -0.0063
  130.3300  126.6510    0.0048    1.0000    0.0048
  129.7100  126.3510    0.0043    1.0000    0.0043
  129.1500  126.0580    0.0100    1.0000    0.0100
  127.8700         0    0.0004    1.0000    0.0004
  127.8200         0    0.0060    1.0000    0.0060
  127.0500         0    0.0300    1.0000    0.0300
  123.2900         0    0.0015    1.0000    0.0015
  123.1100         0   -0.0033    1.0000   -0.0033
  123.5200         0   -0.0092    1.0000   -0.0092
  124.6600         0   -0.0212    1.0000   -0.0212
  127.3300         0    0.0043    1.0000    0.0043
  126.7800         0    0.0244    1.0000    0.0244
  123.7300         0         0    1.0000         0

>> sum(rendite)

ans =

    0.1337

>> sum(trueyield)

ans =

    0.4390
 


So, wie wir sehen hätte man damit viel besser abgeschnitten als wenn man einfach nur die Aktie gehandelt hätte. Nun stelle ich mir natürlich die Frage, ob der 10-Tages-Durchschnitt der richtige ist und möchte den nun "optimieren". Das heisst der Computer soll mir ausrechnen, für welches Intervall (z.B. 2-90) der grösste Ertrag erzielt worden wär.

Also grundsätzlich die Summe des "trueyield" maximieren.

Wie löse ich das?

kursreihe.txt
 Beschreibung:

Download
 Dateiname:  kursreihe.txt
 Dateigröße:  826 Bytes
 Heruntergeladen:  379 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.10.2010, 13:53     Titel:
  Antworten mit Zitat      
Hallo,

zu
Code:
rendite = log(kursreihe(1:end-1, :) ./ kursreihe(2:end, :));


Berechnet man die Renditen normal nicht andersherum? Neuer Kurs/alter Kurs?
Code:
rendite = log(kursreihe(2:end, :) ./ kursreihe(1:end-1, :));


Zitat:
Nun stelle ich mir natürlich die Frage, ob der 10-Tages-Durchschnitt der richtige ist und möchte den nun "optimieren". Das heisst der Computer soll mir ausrechnen, für welches Intervall (z.B. 2-90) der grösste Ertrag erzielt worden wär.

Wenn das nicht extrem lange dauert, würde ich das in einer for-Schleife
(for Intervall = 2:90) abarbeiten und schauen, wann du das beste Ergebnis bekommst.
Es kann allerdings sein, dass du mehr und längere Zeitreihen brauchst, um auf aussagekräftige Ergebnisse zu kommen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
hammy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 25.10.10
Wohnort: Schweiz
Version: ---
     Beitrag Verfasst am: 29.10.2010, 15:26     Titel:
  Antworten mit Zitat      
Hallo Harald

Die Berechnung stimmt schon so wie du sagst. Nur ist bei meiner Datenbank der aktuelle Kurs in Zeile 1 und der älteste in Zeile 105 Wink

Hmm... das könnte ich auch so machen.
Dann einfach eine Nx2 Matrix erstellen und in die erste Spalte den Intervallwert und in die 2. die Summe schreiben?
Wie kann ich dann in der 2. Spalte nach dem Maximum suchen und das dementsprechende Intervall ausgeben?

Mein Problem wird dann wohl sein, wenn ich Indikatoren einbaue, die mehrere Inputs haben, dann wirds dann schnell mühsam. Aber Matlab ist ja schnell Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.10.2010, 16:50     Titel:
  Antworten mit Zitat      
Hallo,

ich würde das so machen:
Code:
[m, ind] = max(A(:,2)); % Maximum in der 2. Spalte
bestIntervall = A(ind, 1);


Wenn es mehr Aufwand wird, muss man sich evtl. eine systematischere Suche überlegen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.