Autor |
|
_Tina
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 31
|
|
Hallo Leute,
es müßte doch möglich sein, mit Hilfe einer dll, einen "Schalter" zu basteln, der innerhalb einer Bar reagiert. Leider bin ich mit dieser Art der Programmierung absolut nicht vertraut, könnte es mir aber so vorstellen: Variable1 = 0; Ein Ereignis "X" tritt ein dadurch wird an den externen "Schalter" ein Signal gegeben der nun ein Signal an den PowerEditor gibt und die Variable1 = 1; schaltet.
Geht sowas? Oder hat jemand schon sowas programmiert?
Danke Tina
|
|
30.11.2001, 10:10 |
|
_Klaus Eckhoff
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 149
|
|
Hallo Tina,
was willst Du genau machen? Jeder Indikator arbeitet Tickweise, wenn Du "Update every tick" einschaltest. Folglich kannst Du (auch ohne DLL) jederzeit Variablen setzen.
Lediglich Signale arbeiten (abgesehen von den eingebauten Stops) nur Barweise, d.h. Du kannst immer nur am Ende eines jeden Bars neue Orders generieren welche dann aber auch wieder im nächsten Bar tickweise (bei Stop- und Limit-Orders) abgearbeitet werden.
Also was genau ist das Ziel Deiner Frage?
-Klaus
|
|
30.11.2001, 11:10 |
|
_Tina
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 31
|
|
Hallo Klaus,
Du hast das Problem im Prinip schon geschildert. Im PowerEditor wird eine Variable immmer erst am Ende oder besser zu Beginn der nächsten Bar verändert. Meine Frage ist nun, ob es eine Möglichkeit gibt(wie auch immer) eine Variable auch innerhalb einer Bar zu verändern. Der PowerEditor arbeitet ja wohl so, daß er von oben nach unten das Script durcharbeitet. Wenn also irgend eine Variable am Anfang steht und von einem exteren Schalter verändert werden könnte, wären somit Veränderungen von einem Tick zum anderen auch innerhalb einer Bar möglich.
Danke für jeden Hinweis
Tina
PS: Tut mir leid, daß ich mich so schlecht verständlich machen kann (;-(
|
|
30.11.2001, 12:10 |
|
_Uwe
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 313
|
|
Hallo Tina,
wie Kalus ja schon ausführte, wird bei jedem Tick das EL-Skript abgearbeitet, sodass die Variablen auch bei jedem Tick berechnet werden, wenn die entsprechende Umgebungsvariable (Schalter) gesetzt ist.
Das Skript, welches abgearbeitet wird, nimmt den Tickwert als Close-Kurs. sollte während der Abarbeitung ein weiterer Tick eingehen, so sollte dieser in einer Warteschlange stehen, bis der Durchgang des EL-Codes mit diesem Tick erfolgt (könnte vielleicht auch etwas mit dem Refresh zu tun haben, wenn die Tickanzahl zu groß wird).
Es wäre also ein unötiger Umweg über eine DLL, da sich die Werte für einen Tick-Berechnungsdurchgang nicht ändern und somit z.B. ein average(close,9) am Anfang berechnet, genau den gleichen Wert liefert, wie ein Average(clos,9) am Ende des Durchgangs.
Gruß Uwe
|
|
30.11.2001, 14:10 |
|
_Klaus Eckhoff
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 149
|
|
Hallo Tina,
also noch einmal: Der Unterschied ist Signal zu Indikator. Im Indikator kannst Du alles auch Tickweise machen (innerhalb eines Bars) in einem Signal nicht.
Selbst wenn Du eine Variable in einer DLL speichern würdest (z.B. durch einen Indikator gesteuert) würde ein Signal trotzdem innerhalb eines Bars nicht daruaf zugreifen bzw. reagieren.
Wenn Du auf Tickbasis eine Strategie abarbeiten möchtest dann muss auch der zugrundeliegende Chart ein Tickchart sein.
Deshalb noch mal die Frage: Was genau willst Du erreichen oder was soll die "Variable" bewirken? Schilder uns doch einfach mal Dein eigentliches Problem (losgelöst von irgendwelchen Variablen).
-Klaus
|
|
30.11.2001, 15:10 |
|
_Tina
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 31
|
|
also,
nehmen wir mal an, ich will die Aktion"xy" ausführen wenn irgendeine Linie die Nulllinie von unten nach oben kreuzt. Wenn nun die Linien kreuzen und sich bis zum Ende dieser Bar nichts mehr ändert, dann ist alles okay und es gibt kein Problem. Wenn das Kreuzen der Linien aber nicht bis zum End dieser Bar anhält, kann man nicht in der nächsten Bar prüfen, ob die Linien mal gekreuzt hatten.
Anderes Beispiel: Ich möchte, wie Steffen(s.u.), auf ein Ereignis durch "PlaySound" aufmerksam gemacht werden. Mit einem Indikator in der TS mit 5 Minuten Chart kann es passieren, daß die Bedingungen gleich zu Beginn der neuen Bar erfüllt werden und nun geht es 5 Minuten lang Tut,Tut,Tut,Tut,Tut,Tut,Tut,Tut,Tut......... Tut,Tut.... (nerv). Wenn man nun wie geschildert den Schalter unabhängig von den Bars sondern abhängig vom Ereignis steuern könnte(z.B.über eine DLL) wäre nach dem ersten Tut Ruhe und man kann unabhängig vom weitern Verlauf in der nächsten Bar wieder abfragen war eine Kreuzung der Linien gewesen. Das sind nur zwei Beispiele es gibt aber bestimmt noch viel mehr Anwendungsmöglichkeiten. Problematik erkannt?
Gruß Tina
|
|
30.11.2001, 16:10 |
|
_Klaus Eckhoff
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 149
|
|
Tina, OK was Du brauchst sind globale Variable. Diese - da hast Du Recht - werden üblicherweise mit Hilfe einer DLL implementiert.
Ist allerdings nicht ganz so einfach damit zu arbeiten, da man sich um Synchronität und ähnliche Dinge selber kümmern (ausprogrammieren) muss.
Ich selbst verwende eine solche DLL von Heiko Schröder "HeikoS@trade4cast.de", Du kannst ihm ja mal eine Mail Schreiben und fragen, zu welchen Bedingungen er diese weitergibt.
Ansonsten gibt es weitere kommerzielle Anbieter solcher DLLs, eine Suche in diesem Forum sollte da eigentlich Quellen liefern.
Gruss
-Klaus
|
|
30.11.2001, 18:10 |
|
_Tina
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 31
|
|
Danke dir Klaus,
aber noch mal, ist es, mit der von dir genutzten DLL möglich, das von mir geschilderte Vorhaben (z.B.PlaySound nur einmal) umzusetzen bzw. wie aufwendig ist das?
Danke Tina
|
|
30.11.2001, 18:10 |
|
_Klaus Eckhoff
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 149
|
|
Tina,
ja, das ist relativ einfach möglich. Du speicherst Dir beim PlaySound die Uhrzeit in der DLL und fragst sie vor einem neuen PlaySound wieder ab. Wenn nicht mindestens x Minuten vergangen sind ignorierst Du den neuen PlaySound.
Gruss
-Klaus
|
|
30.11.2001, 19:10 |
|
_Tina
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 31
|
|
|
30.11.2001, 19:10 |
|
_Uwe
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 313
|
|
|
30.11.2001, 20:10 |
|
_Klaus Eckhoff
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 149
|
|
|
30.11.2001, 23:10 |
|
_Uwe
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 313
|
|
RE: Intrabar- Schalter ... als An-/Ausschalter für Sound | |
Klaus: Wenn am Anfang eines längeren Bars ein Ereignis (z.B. Kurs schneidet GD) stattgefunden hat, dann wird dieses bei jedem weiteren Tick immer wieder als "neues" Ereignis gewertet.
Das ist schon richtig, Klaus, da ja die Abfrage läuft:
if close[1] < GD[1] AND close > GD then ...Kurs schneidet GD von unten nach oben....
und dies ist mit jedem Tick=close so, solange die zweite Bedingung erfüllt ist. Wenn Du allerdings recht damit hast, dass die Variablenwerte bei jedem Rechengang auf Ausgangswerte zurückgesetzt werden, dann würde meine Vorschlag natürlich nicht so funktionieren, doch bin ich mir nicht sicher, ob nicht nur beim ERSTEN Durchlauf einerhalb einer Barperiode, die Werte durch die Werte des Vorbars "vorbesetzt" werden.
Kommt auf einen Versuch an, wenn er noch nicht mit negativen Ergebnis durchgeführt wurde. Der muß allerdings wohl dann doch bis Montag warten, da ohne Dateneingänge das Verhalten nun leider nicht getestet werden kann.
Schönes Wochenende Uwe
|
|
01.12.2001, 00:10 |
|
_Klaus Eckhoff
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 149
|
|
RE: Intrabar- Schalter ... als An-/Ausschalter für Sound | |
Hallo Uwe,
Hier der entsprechende Passus aus dem ELA-Reference Manual:
--- Also, when you’re receiving data on a real-time/delayed basis, and have the Update every tick option enabled for an analysis technique (or the Generate orders for next bar option for trading strategies), EasyLanguage evaluates the analysis technique or trading strategy as well as any series functions that are referenced by the analysis technique or trading strategy, for each new tick. To keep accumulated values accurate, each time a new tick is received, all variables, arrays and function values are “pushed-back” to their values from the previous bar, and the calculation based on the most recent tick is performed. This ensures that the trading signals, analysis technique, and functions perform their calculations as though each tick were the last tick of the bar. ---
Das ist genau das, was auch ich in der Vergangenheit beobachtet habe.
Gruss
-Klaus
|
|
01.12.2001, 09:10 |
|
_Uwe
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 313
|
|
|
01.12.2001, 17:10 |
|
_Tina
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 31
|
|
|
01.12.2001, 20:10 |
|
_Tina
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 31
|
|
|
01.12.2001, 20:10 |
|
_Uwe
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 313
|
|
Nachricht kam mit folgender Meldung zurück.
This message was created automatically by mail delivery software (Exim).
A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed:
tina251@freenet.de SMTP error from remote mailer after RCPT TO:: host mx.freenet.de [194.97.50.136]: 550 Unknown local part tina251 in
tina: Hat sich erledigt- hatte deinen Beitrag oben übersehen Hat sich Deine Anfrage zur "Kurzfassung"-SWITCH-DLL mit Heikos Angebot insgesamt erledigt?
Gruß Uwe
|
|
01.12.2001, 20:10 |
|
_Tina
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 31
|
|
|
02.12.2001, 11:10 |
|
_Klaus Eckhoff
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 149
|
|
Hallo Tina,
habe von Heiko die Erlaubnis erhalten, Dir die verwendete OUGD.DLL zu schicken.
Damit sieht eine mögliche Variante der Lösung (unter Verwendung der Barnummer) so aus:
{ --- } if {Bedingung fuer Playsound erfüllt} then begin if GetGlobal2(1, 1) < CurrentBar then begin Var: x(0); x = SetGlobal2(1, 1, CurrentBar); Playsound(...) end; end; { --- }
Andere Lösungen (z.B. mit Uhrzeit wie schon geschrieben) sind möglich und sinnvoll, denke, Du wirst damit zurecht kommen...
Gruss
-Klaus
|
|
03.12.2001, 11:10 |
|
|