Autor |
|
_Donald$
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 94
|
|
|
03.12.2001, 20:10 |
|
_Tina
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 31
|
|
|
03.12.2001, 20:10 |
|
_Donald$
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 94
|
|
|
04.12.2001, 16:10 |
|
_Tina
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 31
|
|
Hallo Donald$,
ich verstehe deine Frage nicht so ganz.
Wenn du einen Indikator in verschiedenen Charts einer Workspace oder auch unterschiedlicher Workspace nutzt, werden natürlich alle Regeln dieses Indikators jeweils auf Grundlage der Chartdaten befolgt. Ich glaube es ist besser, wenn du mal konkret schreibst was du machen willst und was das Problem ist. Dann ist mit Sicherheit eine Lösung möglich. In diesem Bord gibt es gigantisches Potenzial und Kompetenz, wie selbst schon erfahren durfte.
Gruß Tina
|
|
05.12.2001, 10:10 |
|
_Donald$
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 94
|
|
|
05.12.2001, 21:10 |
|
_Helmut
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 11
|
|
|
06.12.2001, 14:10 |
|
_Tina
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 31
|
|
Hallo Donald$,
ich glaube, da gibt es zwei unterschiedliche Aspekte. Du kannst schreiben:
If Date < Date[1] Then Begin
{deine Bedingungen so wie sie sind}
End;
Aber damit läßt sich nicht vermeiden, daß in den Indikatoren trotzdem mit dem Gap gerechnet wird, denn z.B. bei dem Average(c,10) werden die Schlußkurse der Letzten 10 Bars berechnet. Wenn du willst, daß der jeweilige Indikator nur mit den Daten des jeweiligen Tages berechnet wird, erhälst du aber abhängig von der eingestellten Länge, in dem Beispiel 10 Bars keine Indikatorenanzeige. Ist es die 2. Variante oder liege ich völlig falsch?
Gruß Tina
|
|
06.12.2001, 16:10 |
|
_Donald$
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 94
|
|
|
06.12.2001, 18:10 |
|
_Donald$
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 94
|
|
|
06.12.2001, 18:10 |
|
_Tina
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 31
|
|
nicht so schnell aufgeben.
wie gesagt, wenn du die Berechnung eines Indikators zu Beginn eines Tages starten willst, kann das als Beispiel so gehen:
Vars: Counter(0); If Date < Date[1] Then Counter = 0; Counter = Counter +1;
If Counter > Length Then Begin;
{Hier deine Bedingungen}
End;
Du hast nun in den ersten Bars keine Anzeige von Deinem Indikator. Erst dann, wenn nur die Daten des aktuellen Tages für die Berechnung vorhanden sind beginnt die Anzeige. Wenn du mehrere Inputs als zurückliegende Periode verwendest muß die längste mit dem Counter verglichen werden.
Testen kannst du das indem du einen neuen Indikator anlegst und deinen "alten" reinkopierst und die genannten Ergänzungen durchführst und in einen extra Chart legst.
Ich hoffe ich konnte helfen
Tina
|
|
06.12.2001, 21:10 |
|
_Uwe
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 313
|
|
RE: TINA Danke für Deine Bemühungen - Var 2 ist | |
Hallo Donald!
Du wirst Dir dazu viele Indikatoren neu schreiben müssen, da Du ja Zugriff auf die Variablenliste der Funktion haben mußt, um Deine Effekt zu erzielen.
Am Beispiel eine 5min-Charts, in dem ein Gleitender Durchschnitt nach Deinen anforderungen funktionieren soll, verdeutlicht:
AvStandard=Average(close,14);
mit jedem Bar wird die Funktion Average aufgerufen, der Durchschnittawert ermittelt.
Diese Berechnung könnte auf zwei Arten in der Funktion programmiert werden:
- einfach: vierzehn Closewerte werden addiert und durch 14 geteilt,
- "optimiert": von der in der Funktion gespeicherten Summe der Closekurse, wird der älteste abgezogen und der jüngste addiert, bevor die Division durch 14 vollzogen wird.
Es wird jeweils der Mittelwert an das aufrunde Programmteil zurück gegeben.
Wie es konkret bei der TS-Average-Funktion programmiert ist, ist bei Aufruf der Average-Function im PowerEditor zu sehen; spielt hier aber keine Rolle, da nur das Prinzip erläutert werden soll, warum Du Zugriff auf die funktionsinternen Variablien haben mußt.
Kommt nun ein neuer Tag (nach tinas if-Anweisung zu erkennen), könntest Du nun versucht sein, einfach die nächsten 14 Bars nicht den Average berechnen (14x5=70min) und nach 70min die Funktion wieder ausführen zu lassen:
NoCalc=NoCalc+1; if date>date[1] then NoCalc=1; if NoCalc>=14 then begin DayAverage=Average(close,14); ... end else DayAverage=0;
Leider wird dieser Ansatz nicht klappen, wenn die Funktion gemäß der zweiten Variante programmiert ist, wohl aber wenn die Logik gem. der 1. Beschreibung umgesetzt ist.
Also bleibt nur als erster Schrit zu untersuchen, mit welcher Funktion kann man diesen Ansatz verfolgen ohne die Funktionen umschreiben zu müssen.
Zur Lösung des zweiten Problems, wonach ein Schalter über die Art der Berechnungsmodi entscheiden soll (kontinuierliche Fortschreibung oder täglich neuer Start), bietet sich die Lösung von zwei Indikatorenversionen nebeneinander an oder aber über einen Input eine entsprechende Fahne zu setzen.
Input:...LenAv, CalcOption(0),... vars: MyAv(0);
if CalcOption=0 then begin MyAv=Average(Close,Length); end else begin if date>date[0] then NoCalc=-1; NoCalc=NoCalc+1; if NoCalc>=LenAv then {....eigene Averageberechnung...} MyAv=Summation(close,LenAv)/LenAv; end; {...Ab hier stehen Dir je nach CalcOption die Mittelwerte zur Verfügung...} ....
Wie gesagt, die eigene Programmierung die eigene Programmierung der Indikatoren ist nur erforderlich, sofern die Funktion intern auf Ergebnisse der Vorberechnung zugreift.
Hoffentlich war soweit alles verständlich beschrieben, ansonsten bitte Rückfragen
Gruß Uwe
|
|
06.12.2001, 21:10 |
|
_Klaus Eckhoff
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 149
|
|
|
06.12.2001, 23:10 |
|
_Donald$
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 94
|
|
|
07.12.2001, 12:10 |
|
_Donald$
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 94
|
|
|
07.12.2001, 12:10 |
|
|