Excel

      das ganze soll der bildlichen dokumetation innerhalb meines tradingjounals dienen, so dass ich meine verlusttrades später nur noch übereinandergereit sortiert und dann jeweils durch einen klick auf die zelle auch visuell dargestellt bekomme.

      das ganze wäre auch mit

      - Zelle anklicken
      - Menü: 'Einfügen'
      - Kommentar
      - Rechtsklick auf den Rand des Kommentars
      - Kommentar formatieren
      - Register: 'Farben und Linien'
      - Farbe: 'Fülleffekte...'
      - Register: 'Grafik'
      - Grafik auswählen...
      - (Jetzt auswählen)
      - OK
      - OK

      möglich, jedoch wird die grafik dann so klein dargestellt, dass ich keine einzelnen trades mehr erkennen kann. es sollte also doch auch irgendwie möglich sein die grafik so anzuzeigen, dasss diese sich in orginalgröße öffnet oder?



      nachtrag:


      habe die lösung gerade gefunden. das bild muss einzeln am rand großgezogen werden. excel speichert es dann auch so.

      Perfect Trader schrieb:

      Nachtrag: Da war plasmapelz schneller, auch wenn das auf den ersten Blick für die Aufgabe etwas umfangreich aussieht, aber Hauptsache es tut.

      Naja, diese Lösung ist mehr darauf ausgelegt, Tickdatensätze der Größenordnung >=30 Mio zu verarbeiten und die dann in MATLAB auch gleich weiterzuverwenden, z.B. für Monte Carlo Simulationen, VaR Berechnungen, Portfolio Optimierungen usw.. Das stell ich mir in Excel schwierig vor.
      Für weniger Daten tut es natürlich auch...
      Glück ist nur ein anderes Wort für Zufall

      Tick in Minuten umwandeln

      EndlessTry schrieb:

      Guten Abend, ich stehe vor dem Problem, wie man am Besten mit Hilfe von Excel Tickdaten in Minutendaten (OHLC) umwandeln könnte.

      Es ist nicht Excel, aber ich habe vor Längerem mal eine Funktion für MATLAB geschrieben, die mir da sehr dienlich ist. Mit etwas Glück läuft sie auch in Octave, hab ich aber nicht ausprobiert. Die konvertierten Daten können dann ganz einfach mit xlswrite() in Excel importiert werden.

      Da hier keine .m oder .c Dateien als Anhang zugelassen sind und ich nicht Lust habe diese beiden kleinen ASCII Dinger erst in Zip zu verpacken, hab ich sie in Plain Text unten angefügt. Einfach eine neue Datei "tick2ohlc.m" erzeugen und den Inhalt reinkopieren.
      Die Funktion setzt vorraus dass Time, Ask und Bid Preise als Variablen im Workspace vorhanden sind, und dass die Zeiten im MATLAB typischen datenum() Format vorliegen. Das Argument timeframe wird in Minuten angegeben, also "1" für eine Minute, "10" für 10min, "60" für eine Stunde usw. Es existiert eine Abhängigkeit zur Funktion findrange(), die ich auch mit unten anhänge. Das ist eine C Routine, die eine kombinierte Binär- und serielle Suche auf einem Array aus sequenziell aufsteigenden Zeitdaten durchführt. Sie ist damit wesentlich schneller als das in MATLAB eingebaute find()... was sich bei großen Mengen von Tickdaten sehr stark bemerkbar macht. Die muss einfach mit mex kompiliert werden und im path liegen. Alternativ kann man in tick2ohlc() auch die Aufrufe von findrange() durch die adäquaten find() Aufrufe ersetzen, die jeweils obendrüber stehen und auskommentiert sind.

      Ich übernehme selbstverständlich keine Garantie 8o.

      tick2ohlc.m

      Quellcode

      1. function [data, tdrange] = tick2ohlc(Time, Bid, Ask, t0, t1, timeframe)
      2. t0 = datenum(t0);
      3. t1 = datenum(t1);
      4. %idx = find(self.Time >= t0 & self.Time <= t1);
      5. idx = findrange(Time, t0, t1, 3000);
      6. time = Time(idx);
      7. bid = Bid(idx);
      8. ask = Ask(idx);
      9. tdrange = [idx(1) idx(end)];
      10. rate = (bid+ask)/2;
      11. % Start at next full minute/hour etc. Everything before goes in one
      12. % OHLC, everything after in one.
      13. dv0 = datevec(time(1));
      14. if (timeframe < 60) % minute range
      15. dv0(6) = 0;
      16. if (mod(dv0(5), timeframe) ~= 0)
      17. dv0(5) = dv0(5) - mod(dv0(5), timeframe) + timeframe;
      18. end
      19. elseif (timeframe < 1440) % day range
      20. dv0(6) = 0;
      21. dv0(5) = 0;
      22. if (mod(dv0(5), timeframe/60) ~= 0)
      23. dv0(4) = dv0(4) - mod(dv0(4), timeframe/60) + timeframe/60;
      24. end
      25. end
      26. % Calculate the size of the data array. It is the span between t0
      27. % and t1 divided by the timeframe
      28. span = ceil((datenum(t1)-datenum(t0))/datenum([0 0 0 0 timeframe 0]))-1;
      29. data = zeros(span, 5);
      30. j = 1;
      31. dn0 = datenum(dv0);
      32. dn1 = datenum(t1);
      33. while (dn0 < dn1)
      34. dve = datevec(dn0);
      35. dve(5) = dve(5) + timeframe;
      36. dne = datenum(dve);
      37. if (dne < dn1)
      38. %idx22 = find(time >= dn0 & time <= dne);
      39. idx = findrange(time, dn0, dne, 3000);
      40. else
      41. %idx22 = find(time >= dn0 & time <= dn1);
      42. idx = findrange(time, dn0, dn1, 3000);
      43. end
      44. if (isempty(idx))
      45. dn0 = dne;
      46. continue;
      47. end
      48. rrate = rate(idx);
      49. data(j,1) = time(idx(1));
      50. data(j,2) = rrate(1);
      51. data(j,3) = max(rrate);
      52. data(j,4) = min(rrate);
      53. data(j,5) = rrate(end);
      54. j = j+1;
      55. dn0 = dne;
      56. end
      57. data = data(1:j-1,:);
      58. % Prepend values for before first time frame
      59. idx = find(time >= datenum(t0) & time <= datenum(dv0));
      60. if (~isempty(idx))
      61. tdata = zeros(1,5);
      62. rrate = rate(idx);
      63. tdata(1,1) = time(idx(1));
      64. tdata(1,2) = rrate(1);
      65. tdata(1,3) = max(rrate);
      66. tdata(1,4) = min(rrate);
      67. tdata(1,5) = rrate(end);
      68. data = [tdata; data];
      69. end
      70. end


      findrange():

      C-Quellcode

      1. #include <mex.h>
      2. #include <matrix.h>
      3. #include <stdio.h>
      4. #include <stdlib.h>
      5. #include <time.h>
      6. #include <string.h>
      7. /*
      8. * Combined binary and serial search. The procedure looks up a range around
      9. * x +/- theta using classical binary search, then it "refines" by looking
      10. * for the closest value to x by serial search from beginning or end.
      11. */
      12. int bsLookup(double *data, int len, double xval, double theta)
      13. {
      14. double lb, ub, currVal;
      15. int start, end, middle;
      16. lb = xval - theta;
      17. ub = xval + theta;
      18. start = 0;
      19. end = len;
      20. while (start <= end) {
      21. middle = (start+end)/2;
      22. currVal = *(data+middle);
      23. if (lb <= currVal && currVal <= ub) {
      24. int i = middle;
      25. if (currVal < xval) {
      26. //mexPrintf("smaller\n");
      27. for (i = middle; *(data+i) < xval && i <= len; i++)
      28. ;
      29. } else if (currVal > xval) {
      30. //mexPrintf("bigger\n");
      31. for (i = middle; *(data+i) > xval && i >= 0; i--)
      32. ;
      33. i+=2; // Adjust for coordinate transformation (MATLAB starts at 1)
      34. }
      35. return i;
      36. } else if (xval < currVal) {
      37. end = middle-1;
      38. } else if (xval > currVal) {
      39. start = middle +1;
      40. }
      41. }
      42. return -1;
      43. }
      44. /*
      45. * Find range in an ascending array, using binary search. This should be
      46. * faster than find().
      47. * call: idx = findrange(array, x0, x1, theta);
      48. *
      49. * array: The array of ascending double numbers, e.g. datenums
      50. * x0, x1: The Range, x0 < x1
      51. * theta: A threshold to add/subtract to x0/x1 to start serial search.
      52. */
      53. void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
      54. {
      55. double *resIdx;
      56. int idx0, idx1, i;
      57. mwSize dims[2];
      58. if (nrhs != 4) {
      59. mexErrMsgTxt("Usage: idx = findrange(array, x0, x1, theta), where x0 < x1");
      60. return;
      61. }
      62. /*
      63. * Find x0 and x1. This returns the indices
      64. */
      65. idx0 = bsLookup(mxGetPr(prhs[0]), mxGetNumberOfElements(prhs[0]),
      66. mxGetScalar(prhs[1]), mxGetScalar(prhs[3]));
      67. idx1 = bsLookup(mxGetPr(prhs[0]), mxGetNumberOfElements(prhs[0]),
      68. mxGetScalar(prhs[2]), mxGetScalar(prhs[3])) - 1;
      69. dims[0] = idx1-idx0+1;
      70. dims[1] = 1;
      71. plhs[0] = mxCreateNumericArray(2, dims, mxDOUBLE_CLASS, mxREAL);
      72. resIdx = mxGetPr(plhs[0]);
      73. for (i = 0; i <= idx1-idx0; i++) {
      74. *(resIdx+i) = idx0+i;
      75. }
      76. }
      Glück ist nur ein anderes Wort für Zufall

      Tick in Minuten umwandeln

      Guten Abend, ich stehe vor dem Problem, wie man am Besten mit Hilfe von Excel Tickdaten in Minutendaten (OHLC) umwandeln könnte. Ich habe im WWW nach Lösungen gesucht und bin auf der Suche nach Excel Experten u.a. hier gelandet. Das Problem sollte doch mit u.a. Kgrösste, Kkleinste zu lösen möglich sein, nur so richtig voran gekommen bin ich nicht. Ich habe als Beispiel ein Excel Sheet hochgeladen. Vielleicht gibt es auch ein anderes Tool außer Excel, mit welchem man diese Aufgbe erledigen könnte? Für eventuelle Lösungsvorschläge bedanke ich mich schon einmal im Voraus!
      Dateien
      • tick2min.zip

        (2,41 kB, 374 mal heruntergeladen, zuletzt: )
      hier: Daten / Externe Daten importieren / Daten importieren
      Dann im Assistenten rumgefummelt und voilà! :D
      Bilder
      • excel-csv.PNG

        21,81 kB, 519×474, 378 mal angesehen
      Wie Samen, die unter der Schneedecke träumen, träumen eure Herzen vom Frühling. Vertraut diesen Träumen, denn in ihnen verbirgt sich das Tor zur Unendlichkeit. Khalil Gibran

      goso schrieb:

      Extras>Optionen>International, dort kannst du einstellen ob die Dezimal- und Trennzeichen vom Betriebssystem übernommen werden oder du sie selbst definieren willst. (soweit ich weiss ist das ab Excel 2003 möglich)

      Geht bei mir auch mit Excel 2002

      goso schrieb:

      Dann mach's über den Editor, da änderst du die Quelldatei, das ist dann einmalig.

      Meinst du den VB Editor von Excel? Oder einen Texteditor?
      Wie Samen, die unter der Schneedecke träumen, träumen eure Herzen vom Frühling. Vertraut diesen Träumen, denn in ihnen verbirgt sich das Tor zur Unendlichkeit. Khalil Gibran