You are not logged in.

oldschuren

Semi-Pro

Posts: 1,824

Thanks: 284

  • Send private message

131

Sunday, January 17th 2010, 5:28pm

Danke Dick, ganz große Klasse... :)
ich raube, also bin ich....

DickT

Professional

Posts: 799

Thanks: 218

  • Send private message

130

Sunday, January 17th 2010, 12:35pm

@Oldschuren

das funktioniert mit dem Befehl "Indirekt"

=SUMME(INDIREKT("E"&B1):INDIREKT("E"&B2))

In den Feld B1 steht dann die Zahl "57" und in Feld B2 die Zahl "64".

2 registered users thanked already.

Users who thanked for this post:

Mr. Moon (17.01.2010), trash (30.01.2010)

Posts: 3,295

Thanks: 4088

  • Send private message

129

Sunday, January 17th 2010, 8:39am

@ oldschuren

Ich wollte per PN zur Beantwortung der Frage beitragen, hätte aber noch Informationen gebraucht.

Kommunikations-Einstellungen, die sich erst bemerkbar machen, wenn eine bereits fertig geschriebene PN abgesandt werden soll, haben das vereitelt, so daß zur Vermeidung unnützer Mehr-Aufwände künftig keine Hilfestellung mehr erfolgen wird, auch wenn das zu einem Thema vermutlich sehr gut möglich wäre. Überdies ist diese Funktion einigermaßen sinnlos, da man zur Verfolgung fortlaufender Threads ohnehin sehr häufig auch ausgeblendete Artikel anklicken wird, womit man sich also in erster Linie selber die Arbeit erschwert.
Wer nichts weiß, muß alles glauben.

oldschuren

Semi-Pro

Posts: 1,824

Thanks: 284

  • Send private message

128

Saturday, January 16th 2010, 5:15pm

Hallo Leute,
ich habe mir einen Formelsatz geschrieben, den ich zum auswerten meiner Tradingliste einfach am Ende der Woche reinkopiere. Damit werden dann die Klassiker wie TradeAnzahl, Trefferquote ect. berechnet. Blöd ist aber, dass ich den Bereich, der eingelesen werden soll, immer manuell für jede Formel verändern muss. Daher meine Frage: Die Summe eines Bereiches wird ja so berechnet =SUMME(E57:E64)
Mit welcher Formatierung kann ich die Angaben für (wie hier) 57 und 64 aus einer anderen Zelle transferieren. Das klappt leider nicht: =SUMME(E +F73 :E + F74)
Gruß
OS
ich raube, also bin ich....

DickT

Professional

Posts: 799

Thanks: 218

  • Send private message

127

Monday, December 14th 2009, 4:58pm

Ich habe im Moment zwar keine Verwendung für den Befehl, aber kann ja noch kommen, dann weiß ich schon mal Bescheid. Danke Euch beiden. ;)

trash

Resteverzehrer

Posts: 1,025

Thanks: 1376

  • Send private message

126

Monday, December 14th 2009, 4:36pm

Danke Jungs, hatte die Lösung gestern noch gefunden, siehe Perfect Trader Ansatz.
So sieht es aus,

Source code

1
=INDEX(A1:A6;VERGLEICH(MAX(C1:C6);C1:C6;0))


Wer die gesamte Spalte auslesen möchte anstatt eines Teils, dann z.B. einfach A:A usw.
Es gäbe noch eine Variante mit Sverweis, aber obere ist besser.
Kopieren oder umstellen der Spalten wäre mir zu viel Kuddelmuddel, muss nicht sein, wenn es viel einfacher geht. ;)
"I'm a trader, baby. So, why don't you kill me?!"

2 registered users thanked already.

Users who thanked for this post:

DickT (14.12.2009), Perfect Trader (14.12.2009)

Posts: 3,295

Thanks: 4088

  • Send private message

125

Monday, December 14th 2009, 11:26am

Eine Kopie nur der interessierenden Spalten löst das Problem, ebenso geht eine Rechnung mit den Indizes zur Adressierung der gewünschten Spalte statt der festen Angabe.
Wer nichts weiß, muß alles glauben.

2 registered users thanked already.

Users who thanked for this post:

DickT (14.12.2009), trash (14.12.2009)

DickT

Professional

Posts: 799

Thanks: 218

  • Send private message

124

Monday, December 14th 2009, 7:30am

Ich bin sicher nicht der Excel-Experte, aber soweit ich weiß, funktioniert der SVERWEIS nur, wenn sich die zu durchsuchende Spalten LINKS von der Spalte befinden, aus der Du den Wert extrahierst. In der Tabelle müssen also erst die Suchspalten und dann die Referenzspalte stehen, umgekehrt geht nicht (jedenfalls nicht mit SVERWEIS). Lösung: Spalten umstellen :)
Weiß nicht, ob es einen alternativen Befehl gibt, der dieses Problem nicht hat.

1 registered user thanked already.

Users who thanked for this post:

trash (14.12.2009)

trash

Resteverzehrer

Posts: 1,025

Thanks: 1376

  • Send private message

123

Sunday, December 13th 2009, 9:57pm

Grüzi, fällt jemandem eine Formel ein, die das Problem des Beispiels in Bild zwei beseitigt, wenn sich die Spalten verschieben?



"I'm a trader, baby. So, why don't you kill me?!"

remon

Professional

Posts: 1,027

Thanks: 378

  • Send private message

122

Monday, September 28th 2009, 5:38pm

danke pt,


werde mich dann doch mal in die funktionsweise von markros einlesen müssen.

Posts: 3,295

Thanks: 4088

  • Send private message

121

Monday, September 28th 2009, 10:35am

Mit Excel-Makros können ganze Webseiten, einzelne externe Graphiken und Excel-eigene Graphiken angezeigt, ausgeblendet, erzeugt und entsorgt werden. Dabei ist das Handling in den einzelnen Excel-Versionen verschieden. Bis Excel 2003 muß man für jedes auszulösende Makro ein einzelnes Bedien-Element mit einem eigenen Namen und eigenen Event-Handlern (mindestens BedienElementName_Click) anlegen, in den späteren Versionen kann man mit Bedien-Element-Feldern ein einheitliches Handling ohne Code-Duplizierungen erzeugen.

Eine sinnvolle Vorlage für die eigne Programmierung bekommt man, indem man ein Makro der Bedien-Handlungen für eine Zeile aufzeichet und später auf mehrere Zeilen erweiteret.
Wer nichts weiß, muß alles glauben.

remon

Professional

Posts: 1,027

Thanks: 378

  • Send private message

120

Sunday, September 27th 2009, 7:53pm

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.

Dare

Team Candletrading

Posts: 395

Location: Deutschland

Thanks: 30

  • Send private message

119

Sunday, September 27th 2009, 7:36pm

@remon:

Kannst du nochmal genauer erklären was du damit meinst?

remon

Professional

Posts: 1,027

Thanks: 378

  • Send private message

118

Saturday, September 26th 2009, 6:40pm

gibt es vielleicht eine möglichkeit charts so einzufügen, dass diese sich, ähnlich wie mit der kommentarfunktion, bei einem klick auf die zelle öffnen? ist das überhaupt machbar mir excel?

EndlessTry

Beginner

Posts: 2

  • Send private message

117

Tuesday, July 28th 2009, 7:16pm

Vielen Dank für die kompetenten Lösungsvorschläge! Das Sheet von Perfect Trader hat mir für die Datenmenge ausgereicht und hat auch prima funktioniert.
Ich werde mich aber auch einmal mit Mathlab und den Scripts von Plasmapelz auseinandersetzen, wenn es etwas umfangreicher ausfallen sollte.

Danke!

Posts: 348

Location: Hamburg

Thanks: 42

  • Send private message

116

Sunday, July 26th 2009, 4:23pm

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

Posts: 3,295

Thanks: 4088

  • Send private message

115

Sunday, July 26th 2009, 4:07pm

@ EndlessTry

Ganz ohne selbst-programmierte VBA-Matrix-Funktionen geht es so.

Mit einer VBA-Funktion würde es vielleicht etwas besser aussehen, aber immer noch manuelles Rumtippen im Excel erfordern.

Das würde dann mit einem externen Konvertier-Tool einfacher gehen. So die Dateien als CSV angeliefert werden, ist das mit den gängigen Unix-Tools AWK, PERL oder auch PHP eine kleine Fingerübung. Die gibt es auch für Windows in vielerlei Versionen von verschiedenen Quellen, eine der vollständigsten ist bei Cygwin herunterzuladen (wobei ich selber einen Rechner ohne diese Tools für eine vernünftige Arbeit mit den gängigsten Utilites für kaum brauchbar für umfassende Entwicklungs- und Daten-Handling-Aufgaben halte).

So daran wirklicher Bedarf besteht, könnte ich den AWK-Skript auch nachreichen. Wer keine Lust hat, eine ganze Tool-Suite zu installieren, kriegt den auch mit AWK (und evtl. einer einzigen zusätzlichen DLL) zum laufen.

Nachtrag: Da war plasmapelz schneller, auch wenn das auf den ersten Blick für die Aufgabe etwas umfangreich aussieht, aber Hauptsache es tut.
Perfect Trader has attached the following file:
  • Tick2Min.zip (4.49 kB - 51 times downloaded - latest: May 23rd 2012, 3:14am)
Wer nichts weiß, muß alles glauben.

1 registered user thanked already.

Users who thanked for this post:

EndlessTry (28.07.2009)

Posts: 348

Location: Hamburg

Thanks: 42

  • Send private message

114

Sunday, July 26th 2009, 4:01pm

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.

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

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
function [data, tdrange] = tick2ohlc(Time, Bid, Ask, t0, t1, timeframe)
    t0 = datenum(t0);
    t1 = datenum(t1);
    %idx = find(self.Time >= t0 & self.Time <= t1);
    idx = findrange(Time, t0, t1, 3000);
    time = Time(idx);
    bid = Bid(idx);
    ask = Ask(idx);
    
    tdrange = [idx(1) idx(end)];
    rate = (bid+ask)/2;

    % Start at next full minute/hour etc. Everything before goes in one
    % OHLC, everything after in one.
    dv0 = datevec(time(1));
    if (timeframe < 60) % minute range
        dv0(6) = 0;
        if (mod(dv0(5), timeframe) ~= 0)
            dv0(5) = dv0(5) - mod(dv0(5), timeframe) + timeframe;
        end
    elseif (timeframe < 1440) % day range
        dv0(6) = 0;
        dv0(5) = 0;
        if (mod(dv0(5), timeframe/60) ~= 0)
            dv0(4) = dv0(4) - mod(dv0(4), timeframe/60) + timeframe/60;
        end
    end

    % Calculate the size of the data array. It is the span between t0
    % and t1 divided by the timeframe
    span = ceil((datenum(t1)-datenum(t0))/datenum([0 0 0 0 timeframe 0]))-1;
    data = zeros(span, 5);
    
    j = 1;
    dn0 = datenum(dv0);
    dn1 = datenum(t1);
    while (dn0 < dn1)
        dve = datevec(dn0);
        dve(5) = dve(5) + timeframe;
        dne = datenum(dve);
        if (dne < dn1)
            %idx22 = find(time >= dn0 & time <= dne);
            idx = findrange(time, dn0, dne, 3000);
        else
            %idx22 = find(time >= dn0 & time <= dn1);
            idx = findrange(time, dn0, dn1, 3000);
        end
        if (isempty(idx))
            dn0 = dne;
            continue;
        end
        rrate = rate(idx);
        data(j,1) = time(idx(1));
        data(j,2) = rrate(1);
        data(j,3) = max(rrate);
        data(j,4) = min(rrate);
        data(j,5) = rrate(end);

        j = j+1;
        dn0 = dne;
    end

    data = data(1:j-1,:);

    % Prepend values for before first time frame
    idx = find(time >= datenum(t0) & time <= datenum(dv0));
    if (~isempty(idx))
        tdata = zeros(1,5);
        rrate = rate(idx);
        tdata(1,1) = time(idx(1));
        tdata(1,2) = rrate(1);
        tdata(1,3) = max(rrate);
        tdata(1,4) = min(rrate);
        tdata(1,5) = rrate(end);
        data = [tdata; data];
    end
end


findrange():

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <mex.h>
#include <matrix.h>

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

/*
 * Combined binary and serial search. The procedure looks up a range around
 * x +/- theta using classical binary search, then it "refines" by looking
 * for the closest value to x by serial search from beginning or end.
 */
int bsLookup(double *data, int len, double xval, double theta)
{
    double lb, ub, currVal;
    int start, end, middle;
    
    lb = xval - theta;
    ub = xval + theta;
    start = 0;
    end = len;
    while (start <= end) {
        middle = (start+end)/2;
        currVal = *(data+middle);
        if (lb <= currVal && currVal <= ub) {
            int i = middle;
            if (currVal < xval) {
                //mexPrintf("smaller\n");
                for (i = middle; *(data+i) < xval && i <= len; i++)
                    ;
            } else if (currVal > xval) {
                //mexPrintf("bigger\n");
                for (i = middle; *(data+i) > xval && i >= 0; i--)
                    ;
                i+=2; // Adjust for coordinate transformation (MATLAB starts at 1)
            }
            return i;
            
        } else if (xval < currVal) {
            end = middle-1;
        } else if (xval > currVal) {
            start = middle +1;
        }
    }
    
    return -1;

}

/*
 * Find range in an ascending array, using binary search. This should be 
 * faster than find().
 * call: idx = findrange(array, x0, x1, theta);
 *     
 *      array:  The array of ascending double numbers, e.g. datenums
 *      x0, x1: The Range, x0 < x1
 *      theta:  A threshold to add/subtract to x0/x1 to start serial search.
 */
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
    double *resIdx;
    int idx0, idx1, i;
    mwSize dims[2];
    
    if (nrhs != 4) {
        mexErrMsgTxt("Usage: idx = findrange(array, x0, x1, theta), where x0 < x1");
        return;
    }
    
    /*
     * Find x0 and x1. This returns the indices
     */
    idx0 = bsLookup(mxGetPr(prhs[0]), mxGetNumberOfElements(prhs[0]), 
            mxGetScalar(prhs[1]), mxGetScalar(prhs[3]));
    idx1 = bsLookup(mxGetPr(prhs[0]), mxGetNumberOfElements(prhs[0]), 
            mxGetScalar(prhs[2]), mxGetScalar(prhs[3])) - 1;
    
    dims[0] = idx1-idx0+1;
    dims[1] = 1;
    plhs[0] = mxCreateNumericArray(2, dims, mxDOUBLE_CLASS, mxREAL);
    resIdx = mxGetPr(plhs[0]);
    for (i = 0; i <= idx1-idx0; i++) {
        *(resIdx+i) = idx0+i;
    }
    
}
Glück ist nur ein anderes Wort für Zufall

1 registered user thanked already.

Users who thanked for this post:

EndlessTry (28.07.2009)

EndlessTry

Beginner

Posts: 2

  • Send private message

113

Saturday, July 25th 2009, 8:34pm

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!
EndlessTry has attached the following file:
  • tick2min.zip (2.41 kB - 43 times downloaded - latest: May 9th 2012, 3:21am)

Posts: 3,295

Thanks: 4088

  • Send private message

112

Wednesday, March 4th 2009, 12:46am

Not-Lösung: Explizites Konvertieren

@ Purri

Also bei mir (Excel 2003 SP1, Rel. 11.6355.8172 unter XP SP3 Rel. 5.1.2600) sind es echte Zahlen und kein Text. Im Punkt 7 der Anleitung muß das Format "Standard" sein, nicht "Text".

Wenn der Mangel irreparabel ist, kannst Du immer noch explizit mit den Excel-String-Funktionen konvertieren, z. B. von einem Text "12345.67" auf die Zahl 12345,67 mit =WECHSELN(Kaputte_Zelle;".";",")
Wer nichts weiß, muß alles glauben.