ungewünschte Neuberechnung innerhalb einer Periode

Post Reply
Eifelbacher
Posts: 6
Joined: 14 Jul 2014 14:43

ungewünschte Neuberechnung innerhalb einer Periode

Post by Eifelbacher »

Hallo zusammen,

ich habe ein Problem mit der Umsetzung der External Trigger Funktion. Die Ein- und Ausstiegswerte werden separat in einem Indikator berechnet. Dessen Werte werden am Ende einer Periode für die nächste Periode berechnet (Einstellung: CalculateAtEveryTick(false)). Die Datei für den External Trigger wird in einem Stopp erzeugt der sich jede Periode neu berechnet (ohne CalculateAtEveryTick(false)). Bis zum Einstieg in eine Position läuft alles perfekt. Im Moment des Ein- und Ausstieg berechnet er aber den Indikator neu obwohl es immer noch die selbe Periode ist und auch die Abfrage MarketPosition() gibt nur für den Tick des Einstieg 1 oder -1 zurück und gibt im nächsten Tick 0 zurück obwohl die Position noch offen ist. Selbes passiert mit dem Stopp der auch Werte vom Indikator bezieht. In dem Moment wo er eigentlich ausgelöst werden sollte berechnet er sich neu und kann dadurch z.B. in einer Long Position sogar nochmal sinken.
Hier mein Code:

Code: Select all

Express Stop Indikator_Dax

Vars

Series Platz, Long (KaufsignaleExpress.Long), Short (KaufsignaleExpress.Short), Zeitzaehlerserie (KaufsignaleExpress.Zeitzaehlerserie), KursrichtungEins(KaufsignaleExpress.KursrichtungEins);

numeric wurde_schon_eingestiegen, Wendeblock;

Calculation

if IsFirstBar() then
begin
wurde_schon_eingestiegen = 5;
Wendeblock = 5;
Platz = 1;
end
else
begin

   if Platz[0] = Platz[1] then //Berechnung soll nur einmal pro Periode ausgeführt werden und dafür soll nach der Berechnung Platz[0] <> Platz[1] sein
   begin

      if (Zeitzaehlerserie = 1) then
      begin
      wurde_schon_eingestiegen = 5;
      end

      if Platz[1] = 2 then
      begin
      Platz = 1;
      end
      else
      begin
      Platz = Platz + 1;
      end
   end
end
////////////////////////////////////////////////////////////////////////////

if (KursrichtungEins[1] <> KursrichtungEins[2]) and (wurde_schon_eingestiegen = 5) then 
Wendeblock = 5;
else
if wurde_schon_eingestiegen = 1 then
Wendeblock = -1;
else
if wurde_schon_eingestiegen = -1 then
Wendeblock = 1;

///////////////////////////////////////////////////////////////////////////////
if ((Long <> 0) and (Wendeblock <> -1) and (MarketPosition() = 0) and (wurde_schon_eingestiegen = 5) and (h >= Long)) Then
CreateFile("C:\Users\XXXXXX\Documents\WHS FutureStation Nano\External Trigger\nano.txt","long DAX");


if ((IsIntradayEntry()) and (MarketPosition() = 1)) Then
wurde_schon_eingestiegen = 1;

if ((Short <> 0) and (Wendeblock <> 1) and (MarketPosition() = 0) and (wurde_schon_eingestiegen = 5) and (l <= Short)) Then
CreateFile("C:\Users\XXXXXX\Documents\WHS FutureStation Nano\External Trigger\nano.txt","short DAX");

if ((IsIntradayEntry()) and (MarketPosition() = -1)) Then
wurde_schon_eingestiegen = -1;
Wie kann man diese Neuberechnung verhindern?

Gruß und Dank
P. Kümmel
User avatar
WHS Support
Posts: 2430
Joined: 14 Feb 2013 10:27

Re: ungewünschte Neuberechnung innerhalb einer Periode

Post by WHS Support »

Hallo,

Die Funktion External Trigger ist ja recht speziell.
Von unserer Seite können wir da leider nicht unsterstützen.

Eventuell können andere Nutzer im Forum hier helfen oder Sie kontaktieren einmal einen profefessionellen Programmierer wie z.B. www.signalworks.de

Freundliche Grüße
Dominic
WHS
Eifelbacher
Posts: 6
Joined: 14 Jul 2014 14:43

Re: ungewünschte Neuberechnung innerhalb einer Periode

Post by Eifelbacher »

Mein Hauptproblem liegt ja nicht in der External Trigger Funktion, sondern im Express Code. Im Grunde möchte ich verhindern, dass er nach dem Einsteig weiter neu berechnet. Quasi soll er nach dem Einstieg (bis zum Ende der Periode) CalculateAtEveryTick() auf "false" setzen. Ist soetwas möglich?

Ebenfalls habe ich das Problem das er mir MarketPosition() nur bis zum Ende der Periode korrekt anzeigt und dann wieder auf 0 springt obwohl die Position noch im Markt ist. Wenn CalculateAtEveryTick(false) nicht im Code steht wird MarketPosition() sogar nur für die Länge eines Tick korrekt angezeigt. Ich vermute hier einen Fehler in der Software.
Pjotrha
Posts: 12
Joined: 30 Aug 2014 19:04

Re: ungewünschte Neuberechnung innerhalb einer Periode

Post by Pjotrha »

Mir geht es die letzten Tage auch so, dass MarketPosition() manchmal kurz nach Tradeeröffnung 0 anzeigt (über Showtip in einem Stop-Indikator), obwohl der Trade geöffnet ist (im Livehandel mit Echtgeld!). Nach mehreren Sekunden stabilisiert sich MarketPosition() und bleibt konsequent bei 0 (ich nutze keine External Trigger). Einmal geschah das, als der Kurs bei einer Longposition kurz unter den Einstiegskurs fiel (bei den anderen Malen habe ich nicht darauf geachtet). Ich tippe auch auf einen Bug :?
User avatar
WHS Support
Posts: 2430
Joined: 14 Feb 2013 10:27

Re: ungewünschte Neuberechnung innerhalb einer Periode

Post by WHS Support »

Hallo Zusammen,

da es ja doch ein sehr spezielles Problem ist, haben wir mit den Programmierern von Fipertec gesprochen:

Bei der Programmierung in Express ist zu beachten, dass das Skript regelmässig auf den geladenen Bars neu ausgeführt wird. Die Berechnung aller Werte erfolgt dabei pro einzelner Bar beginnend bei der ältesten bis zur aktuellsten Bar. Aus diesem Grund gibt die Funktion MarketPosition() - je nachdem für welche Bar sie berechnet wird - unterschiedliche Werte aus. Wer mit dem aktuellen Wert von MarketPosition() arbeiten möchte, muss sicherstellen, dass dieser unter Verwendung von IsFinalBar() abgefragt wird. Wenn ein Stop nicht bei jedem eingehenden Tick neu berechnet werden soll, ist darauf zu achten, dass nirgendwo im Skript die Funktion SetIntraPeriodUpdate() aufgerufen wird.

Freundliche Grüße
Dominic
WHS
Jackpot
Posts: 11
Joined: 13 Feb 2015 21:28

Re: ungewünschte Neuberechnung innerhalb einer Periode

Post by Jackpot »

In der Platform habe ich Skripte mit folgendem Inhalt gefunden:
...
Calculation
if IsFirstBar() then
begin
CalculateAtEveryTick(false);
SetYScaleFormat(GetPriceFormat());
end
...
Kann ich das so interpretieren, dass nur für den ältesten Bar die EoP-Berechnung erfolgen soll?

Freundliche Grüße
Matthias
User avatar
WHS Support
Posts: 2430
Joined: 14 Feb 2013 10:27

Re: ungewünschte Neuberechnung innerhalb einer Periode

Post by WHS Support »

Hallo Matthias,

durch CalculateAtEveryTick(false) wird das Express-Skript nicht bei jedem neuen Tick, sondern nur zum Ende einer Periode ausgeführt. Dies sollte bei allen aufwendigeren und rechenintensiven Skripten benutzt werden.

Mit freundlichen Grüßen,
Timo
WH SELFINVEST
Jackpot
Posts: 11
Joined: 13 Feb 2015 21:28

Re: ungewünschte Neuberechnung innerhalb einer Periode

Post by Jackpot »

Hallo Timo,

meine Frage ging auf die Verbindung von CalculateAtEveryTick(false) mit if IsFirstBar() hinaus, mit der ich nichts anfangen kann.
Oder anders gefragt : was ist dazu der Unterschied, wenn CalculateAtEveryTick(false) ohne die Bedingung if IsFirstBar() ausgeführt wird?

Gruß
Matthias
User avatar
WHS Support
Posts: 2430
Joined: 14 Feb 2013 10:27

Re: ungewünschte Neuberechnung innerhalb einer Periode

Post by WHS Support »

Hallo Matthias,

okay verstehe. Nein, es ist egal wo die Funktion ausgeführt wird. IsFirstBar() oder irgendwo mitten im Code macht hier keinen Unterschied.

Mit freundlichen Grüßen,
Timo
WH SELFINVEST
Post Reply

Return to “WHS NANOTRADER - EXPRESS PROGRAMMING”