Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %% Initialisiere Parameter
- mu=0; % Drift (auch r)
- sigma=1; % Std
- S0=100; % Asset Wert in t=0
- n = 3650; % Anzahl Schritte. Bei sowas hat sich in finance 1-4millionen durchgesetzt (Martin, Reitz und Wehn 2014)
- m=1000; % Anzahl Simulationen
- %% Simuliere BB
- S=zeros(m,n);
- for j=1:m
- S(j,1)=S0;
- end
- Z=normrnd(0,1,m,n);
- delta=1/n;
- % Benutze explizites Euler Schema um BB zu diskretisieren - Alternativen
- % siehe Kienitz 2013 oder Glassermann 2008 (letzteres Monte Carlo
- % Standardwerk) -> auch geometrische BB genannt
- for j=1:m
- for i=2:n
- S(j,i)=S(j,i-1)*exp((mu-(sigma^2/2))*delta+sigma*sqrt(delta)*Z(j,i));
- end
- end
- % muss nicht plotten -> zu viele linien, wenn picke 2,3 raus
- % figure
- % pl=plot(S');
- % %legend('Asset','Location','northeast')
- % title('Assetpfad')
- % xlabel('Zeitpunkt')
- % ylabel('Preis')
- %% Kaufe und verkaufe zufällig
- % dümmste Methode = Münze werfen - wenn 0 verkaufe, wenn 1 kaufe -> viel zu
- % häufige Aktionen
- wurf= round(rand(m,n));
- habe_Asset = 0; % variable um zu speichern ob man Asset besitzt oder nicht
- Rendite_rand=zeros(m,n); % Rendite absolut
- wann_gekauft=0; % Speichere wann Asset grkauft wurde für Renditeberechnung
- % Kaufsignale auswerten - ganz naiv - geht locker numerisch effizienter
- for j=1:m
- for i=1:n
- if wurf(j,i)>0 && habe_Asset==0
- % Dann kaufe Asset
- wann_gekauft=i;
- habe_Asset=1;
- if i>1
- Rendite_rand(j,i)=Rendite_rand(j,i-1);
- else
- Rendite_rand(j,i)=0;
- end
- elseif wurf(j,i)==0 && habe_Asset==1
- % Dann verkaufe Asset
- Rendite_rand(j,i)=Rendite_rand(j,i-1)+S(j,i)-S(j,wann_gekauft); % bisherige rendite + das was neu dazu kommt
- wann_gekauft=-1;
- habe_Asset=0;
- else
- % sonst nichts
- if i>1
- Rendite_rand(j,i)=Rendite_rand(j,i-1);
- else
- Rendite_rand(j,i)=0;
- end
- end
- end
- if habe_Asset ==1
- % Falls ich am ende Asset habe berechne Rendite die aktuell
- % drauf ist
- Rendite_rand(j,i)=Rendite_rand(j,i-1)+S(j,i)-S(j,wann_gekauft); % Endrendite
- end
- wann_gekauft=-1;
- habe_Asset=0;
- end
- %plot(Rendite_rand')
- %% Kaufe und Verkaufe nach Possion
- lambda=1/30; % erhalte Signale durschnittlich 1x im Monat
- poi= poissrnd(lambda,m,n);
- habe_Asset = 0; % variable um zu speichern ob man Asset besitzt oder nicht
- Rendite_poi=zeros(m,n); % Rendite absolut
- wann_gekauft=0; % Speichere wann Asset grkauft wurde für Renditeberechnung
- % Kaufsignale auswerten - ganz naiv - geht locker numerisch effizienter
- for j=1:m
- for i=1:n
- if poi(j,i)>0 && habe_Asset==0
- % Dann kaufe Asset
- wann_gekauft=i;
- habe_Asset=1;
- if i>1
- Rendite_poi(j,i)=Rendite_poi(j,i-1);
- else
- Rendite_poi(j,i)=0;
- end
- elseif poi(j,i)>0 && habe_Asset==1
- % Dann verkaufe Asset
- Rendite_poi(j,i)=Rendite_poi(j,i-1)+S(j,i)-S(j,wann_gekauft); % bisherige Rendite + das was neu dazu kommt
- wann_gekauft=-1;
- habe_Asset=0;
- else
- % sonst nichts
- if i>1
- Rendite_poi(j,i)=Rendite_poi(j,i-1);
- else
- Rendite_poi(j,i)=0;
- end
- end
- end
- if habe_Asset ==1
- % Falls ich am ende Asset habe berechne Rendite die aktuell
- % drauf ist
- Rendite_poi(j,i)=Rendite_poi(j,i-1)+S(j,i)-S(j,wann_gekauft); % Endrendite
- end
- wann_gekauft=-1;
- habe_Asset=0;
- end
- %% Kaufe und Verkaufe mit Durschnittslinien
- % Neuer Code - von 427s auf 61.036 s
- DSL_50=MA_filter(S,50,m,n);
- DSL_200=MA_filter(S,200,m,n);
- for j=1:m
- for i=1:50
- DSL_50(j,i)=mean(S(j,1:i));
- end
- end
- for j=1:m
- for i=1:200
- DSL_200(j,i)=mean(S(j,1:i));
- end
- end
- % Berechne 50 Tage DSL
- % alter, zu langsamer code
- %DSL_50=zeros(m,n);
- % for j=1:m
- % for i=1:n
- % if i<51
- % DSL_50(j,i)=mean(S(j,1:i));
- % else
- % DSL_50(j,i)=mean(S(j,i-50:i));
- % end
- % end
- % end
- % Berechne 200 Tage DSL
- % DSL_200=zeros(m,n);
- %
- % for j=1:m
- % for i=1:n
- % if i<201
- % DSL_200(j,i)=mean(S(j,1:i));
- % else
- % DSL_200(j,i)=mean(S(j,i-200:i));
- % end
- % end
- % end
- % Plotte Assetverlauf + DSLs
- figure
- pl=plot(1:n,S(1,1:n),1:n,DSL_50(1,1:n),1:n,DSL_200(1,1:n));
- set(pl(1),'linewidth',1.5)
- legend('Asset','DSL 50','DSL 200','Location','northeast')
- title('Beispielpfad Durchschnittlinien')
- xlabel('Simulation')
- ylabel('Preis')
- % Werte Kauf/Verkaufsignale aus
- habe_Asset = 0; % variable um zu speichern ob man Asset besitzt oder nicht
- Rendite_dsl=zeros(m,n); % Rendite absolut
- wann_gekauft=0; % Speichere wann Asset keuaft wurde für Renditeberechnung
- for j=1:m
- for i=1:n
- if DSL_50(j,i) > DSL_200(j,i) && habe_Asset == 0
- % Dann kaufe Asset
- wann_gekauft=i;
- habe_Asset=1;
- if i>1
- Rendite_dsl(j,i)=Rendite_dsl(j,i-1);
- else
- Rendite_dsl(j,i)=0;
- end
- elseif DSL_50(j,i) < DSL_200(j,i) && habe_Asset == 1
- % Dann verkaufe Asset
- Rendite_dsl(j,i)=Rendite_dsl(j,i-1)+S(j,i)-S(j,wann_gekauft); % bisherige Rendite + das was neu dazu kommt
- wann_gekauft=-1;
- habe_Asset=0;
- else
- if i>1
- Rendite_dsl(j,i)=Rendite_dsl(j,i-1);
- else
- Rendite_dsl(j,i)=0;
- end
- end
- end
- if habe_Asset ==1
- % Falls ich am ende Asset habe berechne Rendite die aktuell
- % drauf ist
- Rendite_dsl(j,i)=Rendite_dsl(j,i-1)+S(j,i)-S(j,wann_gekauft); % Endrendite
- end
- wann_gekauft=-1;
- habe_Asset=0;
- end
- figure
- pl=plot(1:n,Rendite_rand(1,1:n),1:n,Rendite_poi(1,1:n),1:n,Rendite_dsl(1,1:n));
- %set(pl(2),'linewidth',1.5)
- legend('Random','Poisson','mit DSL','Location','northeast')
- title('Beispielpfad Renditen absolut')
- xlabel('Simulation')
- ylabel('Renditen')
- %% Werte Ergebnisse aus
- return_rand=Rendite_rand(1:m,n);
- return_dsl=Rendite_dsl(1:m,n);
- return_poi=Rendite_poi(1:m,n);
- disp('Rendite mit zufälligen Käufen')
- mean(return_rand)
- disp('Standardabweichung Rendite mit zufälligen Käufen')
- std(return_rand)
- disp('Rendite mit zufälligen poissonvtlten Käufen')
- mean(return_poi)
- disp('Standardabweichung Rendite mit zufälligen poissonvtlten Käufen')
- std(return_poi)
- disp('Rendite mit dsl Strategie Käufen')
- mean(return_dsl)
- disp('Standardabweichung mit dsl Strategie Käufen')
- std(return_dsl)
- %% Random Ideen
- % - Brownsche Bewegungen korrelieren für kleinere Std und realistischere
- % Ergebnisse -> Cholesky Zerlegung
- % - wahrscheinlich x Sachen hier verbessern die eventuell falsch sind :D
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement