Samstag, 27. April 2024, 18:39 UTC+2

Sie sind nicht angemeldet.

  • Anmelden
  • Registrieren

Lieber Besucher, herzlich willkommen bei: INVESTOX-Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

Lenzelott Männlich

Experte

Registrierungsdatum: 30. Dezember 2002

Beiträge: 3 051

Wohnort: Giessen

1

Dienstag, 9. September 2008, 11:27

Tradegenerierung in der Datenfeed Simulation

mit folgendem Code brechne ich die Startzeit meiner Trades:

Quellcode

1
2
3
4
// Seit wann bin ich im Trade ------------------------------------------------------------
global calc investiert:Schalter(0,(enter_long and high>enterlong_level) or (enter_short and low<entershort_level), 1,Tageswechsel(),0);
global calc tradestartzeit:Ersatz(ValueWhen(Uhrzeit(),(investiert-Ref(investiert,-1))=1,1,v),time_set);
// ---------------------------------------------------------------------------------------


Das funktioniert auch prima.
Leider nur nicht in der Datenfeedsimulation, wenn im (durch Realtime Leistungsschema) begrenzten Zeitraum noch kein Trade vorliegt.
Dann kommt ständig die Fehlermeldung:

Zitat

Datenreihe: Datenfeed-Simulation EuroSTOXX50-Future (Eurex)
Indikator: ValueWhen
Meldung: Für die Berechnung des Indikators stehen (bei dieser Datenkomprimierung) nicht genügend Daten zur Verfügung.Beachten Sie bitte, dass einige Indikatoren (wie ValueWhen oder BarsSince) es erfordern, dass die im Indikator angegebene Bedingung innerhalb des berechneten Datenbereichs mindestens einmal zutrifft.


Und es werden keine Trades erzeugt.

Ich war der Auffassung, dass ich mit der Ersatz() Funktion den Fehler aushebeln kann.
Leider ist dem anscheinend nicht so.

Man kann es umgehen, in dem man die Datenhistorie im Leistungsschema vor den letzten Trade verlängert. Leider ist das für den Realhandel nicht besonders brauchbar.
  1. Wenn man x-Tage begrenzt oder y- Perioden weiß man nie, ob innerhalb des Zeitfensters ein Trade liegt.
    Wenn man x oder y so groß wählt, dass eigentlich immer ein Trade drinnen liegen sollte, kommt Murphy und es liegt keiner drinnen und man verpaßt den Tad seines Lebens.
    Wenn man ab einem definierten Datums-Startpunkt die Datenhistorie lädt, von dem man 100%ig weiss, dass ein "Starttrade" zur Initialisierung der Valuewhen Funktion vorhanden ist, hat man

a) eine zu lange Historie und IV wird extrem langsam und evtl. nicht mehr Realhandelsfähig dadurch
b) man muss jeden Tag den Startzeitpunkt für das Leistungsschema überprüfen und manuell umstellen um a) zu vermeiden
c) kann dann aber nur dieses einzige HS mit dem Leistungsschema Traden

Man hat also nur so ein bisschen die Wahl zwischen Pest und Kolera.
  • Geht vielleicht nicht
    Geht, ist aber meist zu langsam

Ein Taufelskreis. :evil2:

Hat jemand eine (formelmäßig) Idee wie ich den Teufelskreis durchbrechen kann?

Edit:
was erschwerende hinzukommt ist folgendes: wenn ich in den HS Einstellungen die Periodenlimiterung von 32000 auf 31999 runterstelle kommt der selbe Fehler.
Allerdigs hat das System zu dem Zeitpunkt nur 900 Perioden.
If you think it´s expensive to hire a professional, wait until you hire an amateur.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Lenzelott« (9. September 2008, 14:10)


Investox

Administrator

Registrierungsdatum: 31. August 2002

Beiträge: 5 680

2

Dienstag, 9. September 2008, 14:14

Hallo,

die Verbindung von kurzfristigen Berechnungen auf Tickbasis mit langfristigen Betrachten ist immer eine Herausforderung für die Performance. Oft helfen da Berechnungstitel. Im speziellen Fall kann die Fehlermeldung durch ValueWhen z.B. wie folgt vermieden werden:

Quellcode

1
2
3
global calc IstInvestiert: ROC(Investiert,1,$)>0;
global calc IstInvestiertPeriode: If(CUM(IstInvestiert)=0, -1, IstInvestiert);
global calc TradeStartZeit: ValueWhen(Uhrzeit(), IstInvestiertPeriode, 1, v);


Gflls. kann man durch IstInvestiertPeriode<0 feststellen, ob schon ein Trade im Datenbereich eröffnet wurde.

Viele Grüße

Andreas Knöpfel

Lenzelott Männlich

Experte

Registrierungsdatum: 30. Dezember 2002

Beiträge: 3 051

Wohnort: Giessen

3

Dienstag, 9. September 2008, 16:45

Hallo Herr Knöpfel,

vielen Dank für die schnelle Antwort.

Da ich gerade eine Datenfeedsimulation am laufen habe und nicht währendessen in den Code eingreifen möchte, kann ich es nicht sofort testen.
If you think it´s expensive to hire a professional, wait until you hire an amateur.

Lenzelott Männlich

Experte

Registrierungsdatum: 30. Dezember 2002

Beiträge: 3 051

Wohnort: Giessen

4

Sonntag, 21. September 2008, 17:37

Hallo Herr Knöpfel,

Sorry für die späte Rückmeldung.
Mittlerweile konnte ich die Formel implentieren und testen.
Funktioniert.

Danke nochmal.
If you think it´s expensive to hire a professional, wait until you hire an amateur.