Page 1 of 2

Preis mit dem größten Volumen

Posted: 13 Mar 2013 11:04
by futurewiz1
Hallo WHS,

erstmal vielen Dank für das neue Forum, ist echt ein Lichtblick zum Thema Express und zu allgemeinen Fragestellungen.

Ich habe noch nicht mit Arrays gearbeitet und benötige mal einige Gedankenblitze ;) besonders zur Syntax.

Ich möchte für einen Variabel einzustellenden Zeitraum (von 5 Minuten bis zu 120 Minuten) alle Ticks (Preis und Volume) in ein Array speichern und kontinuierlich den Preis mit dem höchsten Volumen bestimmen. Dieser Preis soll im Masterchart als horizontale Linie für diese Zeitspanne geplottet werden.

Hierbei wird natürlich viel berechnet, so dass ein optimierter Code wichtig ist.

Wie handle ich das Anwachsen des Arrays wenn am Beginn die Anzahl der Ticks unbekannt sind.


Grundidee:
series PlotlineEoP; // beinhaltet den Preis am Periodenende zum Darstellen der Historischen Entwicklung
numeric PlotlineIntraPeriod; // beinhaltet den aktuellen Preis mit dem höchsten Volumen im laufe der Periode um die Entwicklung dynamisch zu zeigen
input $TimeFrame (30,120,5) // Minuten


Wie kann ich das Separieren der TimeFrames managen - bei zBsp. bei 30 Min also (8:00 - 8:30, 8:30 - 9:00 ...) / bei 10 Min also (8:00 - 8:10, 8:10 - 8:20 ...)?

Wenn neue TimeFrame
begin
zurücksetzen des Arrays
PlotlineEoP = PlotlineIntraPeriod; // den letzten Preis der vergangenen Periode in die Series für die Historische Plotlinie
PlotlineIntraPeriod = void; // wieder auf Null setzen
end

//neuer Tick
If Preis bereits im Array then add vol zum bereits vorhandenen vol.
else add neuen Datensatz

PlotlineIntraPeriod = Preis mit dem höchsten Vol im Array // die eigentliche Arrayberechnung

Plot (PlotlineIntraPeriod, "lightRed", 3)
Plot (PlotlineEoP, "lightBlue", 2)

Vielen Dank,
Klaus

Re: Preis mit dem größten Volumen

Posted: 14 Mar 2013 17:36
by WHS Support
Hallo,

Sie sollten dies auch ohne Arrays lösen können. Im Anhang finden Sie diesbezüglich einen kleinen Indikator der Ihnen vielleicht weiterhilft. Er zeichnet eine rote horizontale Linie dort in den Chart, wo das meiste Volumen des Tages gehandelt wurde.

Der Indikator sollte im Tickchart verwendet werden.

Freundliche Grüße,
Timo
WH SelfInvest

PS.: Sie kennen die Funktion MarktProfil? Das bildet ebenfalls das Volumen pro Preis im Chart ab.

Re: Preis mit dem größten Volumen

Posted: 21 Mar 2013 13:46
by futurewiz1
Hallo Timo,

"Marktprofil" ist genau das richtige Stichwort. Wenn ich im 5 oder 10 Minuten Chart trade möchte ich die Veränderung des POC in dem Variabel einzustellenden Zeitraum (zBsp. 30 Minuten) errechnen lassen.

Prinzipell stellt diese Lösung eine Variante des Market Profile dar, die ja anscheinen aus Lizenzgründen(kosten) nicht in den Nanotrader implementiert wird. Das im Nanotrader enthaltene Volumenprofil lässt sich halt nur Tageweise nutzen und ist für die Übersicht ganz nett.

Beispiel; Chart 5min / Zeitspanne 30min
Die Zeitspanne definiert die Start- und Endpunkte des Auswertezeitraumens (8:00 - 8:30 / 8:30 - 9:00 ...)
Für jeden dieser Zeiträume soll der Preis ermittelt werden, bei dem die meisten Kontrakte (für diese 30 Min kumuliert) gehandelt wurden und durch eine waagerechte Linie dargestellt werden.

Somit hilft mir der beiliegende Indikator nicht wirklich weiter, da ich ja während des Zeitraumes (30min) alle gehandelten Volumen den korrespondierenden Preisen zuordnen muss..

Somit gibt es zwei Teile, zum einen die Auswertungszeiträume erechnen und zum anderen das kummulieren des Volumens.

Herzliche Grüße,
FutureWiz

Re: Preis mit dem größten Volumen

Posted: 25 Mar 2013 11:01
by WHS Support
Hallo FutureWiz,

ok, ich denke ich verstehe was Sie meinen. Leider fällt mir auf Anhieb kein Weg ein, wie man dies schnell lösen könnte. Über Arrays wäre es evtl. eine Möglichkeit. Leider ist dies nicht ganz so einfach ;).Wenn etwas Zeit ist werde ich mir das einmal anschauen.

Falls es Sie interessiert, haben wir in unserem Express-Funktionen Handbuch auch einen kurzen Beispielcode für Arrays (auf englisch):
http://www.whselfinvest.de/docs/manual- ... ons-en.pdf

Freundliche Grüße,
Timo
WH SelfInvest

Re: Preis mit dem größten Volumen

Posted: 25 Mar 2013 15:49
by futurewiz1
Hallo Timo,

die PDFs kenne ich bereits. Vielleicht gibt es irgedwo im WHS Fundus umfangreicheren Array Code zum schauen.

meine Idee war, ein Array mit dem Preis anzulegen und ein zweites mit dem Volumen so das ich die Felder über den gleichen Index zuordnen kann.
Die Preis muss ich natürlich konvertieren um Dezimalpunkte oder Kommas wegzubekommen und auch verschiedene Symbole zu integrieren (FDAX/S&P) und es stellt sich auch die Frage wie groß Arrays werden können, ohne die Performance stark zu beeinträchtigen...

Und dann noch das Zerlegen der Zeiten....

Bis zum nächsten Mal,

Gr, FutureWiz

Re: Preis mit dem größten Volumen

Posted: 26 Mar 2013 16:59
by futurewiz1
Hallo Timo und alle anderen Beobachter in diesem Forum.

Ich habe mal begonnen die Ideen umzusetzen. Ist ja auch der beste Weg zum lernen.
Ziel ist zu Beginn unabhängig von Zeiteinheiten eine Linie in den Masterchart bei dem Preis einzuzeichnen bei dem jeweils das höchste Volumen gehandelt wurde.

Fragen (aktualisiert):
  • Bei "Calculateateverytick" ist Open der jeweils zum Tick gehörende aktuelle Preis und Volume das Volumen das zum Tick gehört?
    Wie kann ich die Daten eines Arrays zur Kontrolle exportieren?
    Gibt es Möglichkeiten die Daten im Array zu visualisieren um Fehler zu finden?
    Kann ich Funktionen der Series auch für Arrays nutzen? ZBsp: (AVol ist ein Array) VolLineSeries = IndexOfHighest (AVol, GetArraySize(arr) – 1);
Erstmal Danke an alle fürs lesen und ein noch viel größeres Danke für alle Anregungen,
FutureWiz

Code: Select all

//(c) KN
// Testscript für MP POC Visualisierung

Express KN_TestMP_V1_DE
vars

numeric ArrayIndex, MaxArrayGroesse, PriceRound, PriceMaxVolume;

// input (von,bis,Vorbelegung) Pit Session
input $TimeFrame (0,120,5); // Periodenlänge
numeric ticksize;

array AVol[100]; // Array Volume 
Series VolLineSeries;


calculation
Calculateateverytick(true);

if IsFirstBar() then 
  begin 
    //Arraygroesse festlegen
    ArrayIndex = Round(open, 0); // der Preis wird brachial um die Nachkommastellen gerundet um das Array klein zu bekommen (Die Ungenauigkeit wird bewusst in Kauf genommen)
    // Erhöhen der Arraygröße für alle Eventualitäten (1000 Punkte Kurssprünge nach oben)
    MaxArrayGroesse = ArrayIndex + 1000;
    SetArraySize(AVol, MaxArrayGroesse);  
  end

// Preis runden und Volumen aufaddieren
PriceRound = Round(open, 0); 
AVol[PriceRound] = AVol[PriceRound] + Volume;

// Preis mit dem Max Volumen im Array bestimmen

// Linie beim Preis mit dem höchsten Volumen einzeichen
//  VolLineSeries = PriceMaxVolume;





//=========================== Test zum Visualisieren von Variablen ================================================================
ShowTip(
    "\n\nArrayIndex: " + (NumericToString(ArrayIndex, "%6.4f")) +
    "\n\nMaxArrayGroessex: " + (NumericToString(MaxArrayGroesse, "%6.4f")) +
    "\n\nTimeOpen: " + (TimeToString(timeopen, "%H:%M:%S")) + 
    "\nTimeClose: " + (TimeToString(time, "%H:%M:%S")) +
    "\nPriceOpen: " + (NumericToString(open, "%f")) +
    "\nPriceClose: " + (PriceToString(close)) +
    "\nVolume: " + (NumericToString(volume, "%6.0f")) +
    "\nTickSize: " + (NumericToString(ticksize, "%f"))
    );

//=================================================================================================================================


interpretation 
  begin
  end

//Plot (VolLineSeries, "lightRed", 3);

Re: Preis mit dem größten Volumen

Posted: 05 Apr 2013 11:54
by WHS Support
Hallo FutureWiz,

entschuldigen Sie die verspätete Antwort, aber über die Osterfeiertage waren wir hier leider nicht 100%ig komplett :) .

Nachfolgend finden Sie ein kleines Beispiel wie Array-Werte geplottet oder in einer Messagebox ausgegeben werden können. Die Funktionen der Serien (z.B. IndexOfHighest) können nicht mit Arrays benutzt werden.

---

express test;

vars
array test[10];
numeric i;
series test2;
string text;

calculation
test2 = void;
for i = 0 to GetArraySize(test)-1
begin
test = i+1;
end

if (IsFinalBar()) then
begin
for i = 0 to GetArraySize(test)-1
begin
test2[GetArraySize(test)-1-i] = test;
text = text + NumericToString(test, "%.0f") + " ";
end
MessageBox(text);
end

interpretation
begin
end

plot(test2, blue, 1);
------

Vielleicht hilft Ihnen dies ja etwas weiter.

Freundliche Grüße,
Timo
WH SelfInvest

Re: Preis mit dem größten Volumen

Posted: 18 Apr 2013 13:20
by futurewiz1
Hallo Timo,

vielen Dank für Deine Unterstützung. Das hat mir sehr weitergeholfen. Es wäre prima, wenn es heute oder auch später Möglichkeiten geben würde, Messageboxen in der Größe zu verändern oder Sie aus dem Script wieder ganz zu schließen.

Darüber hinaus wäre es super, wenn beim Plotten von Linien eine Bezeichnung der Linie mitgegeben und am Bildschirm angezeigt werden kann (Linksbündig am Bildschirmrand).

Herzliche Grüße, futurewiz

Re: Preis mit dem größten Volumen

Posted: 24 Apr 2013 12:44
by WHS Support
Hallo futurewiz,

es freut uns das wir helfen konnten.

Gerne nehmen wir Ihre Anregungen auf und werden Sie an Fipertec weiterleiten. Je nach Aufwand können diese Änderungen evtl. in einem kommenden Update berücksichtigt werden.

Freundliche Grüße,
Timo
WH SelfInvest

Re: Preis mit dem größten Volumen

Posted: 03 Jun 2013 15:32
by futurewiz1
Hallo Timo,

mit meinem Code sammle ich bei jedem Tick (calculateateverytick) das Volumen und den dazugehörigen Preis in eine Tabelle. Die weitere Verarbeitung ist jedoch rechenintensiv und ist auch nur einmal je Bar notwendig.

Ist es möglich, mit einem zweiten Express Code auf die Tabelle im ersten zuzugreifen. Ein Programm sammelt die Daten und das zweite wertet aus.
Wenn mann auf die Series Daten über Programme hinweg zugreifen kann, warum nicht auch auf arrays?

Gibt es darüber hinaus Möglichkeiten, einen ganzen Bereich (mehrere Zeilen) per Kommentar // stillzulegen?

Danke, futurewiz