Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Horizontale Linie bewegen lassen, wie eine Trailing Stoploss? (http://www.expert-advisor.com/forum/showthread.php?t=5581)

Richi777 02.04.17 19:33

Horizontale Linie bewegen lassen, wie eine Trailing Stoploss?
 
Hallo nochmal,

ja ja...ich und meine Linien :p ....

Für meinen letzten Schritt sollte meine vorgegebene HLine sich bewegen wie ein Trailing Stoploss. Also nur in einer von mir bestimmten Richtung. Wenn der Kurs in die gegengesetzen Richung läuft sollte die Linie stehen bleiben.
Ich habe zwar was versucht mit "High[0]" aber nach jeder neuen Kerze wird der Wert neu berechnet und verschiebt meine Linie, was nicht sein sollte.
Ich weis dass es Codes gibt für Trailing Stoploss gibt und könnte mit Sicherheit die Linie damit ankoppeln aber das sollte gerade nicht sein. Denn wenn keine Order geöffnet ist, würde das nicht funktionieren. Die Hline solle unabhängig von einer geöffneten Order sich nur in einer Richtung bewegen. Momentan stehe ich auf den Schlauch und komme da nicht weiter. für Hilfe wäre ich wieder sehr dankbar.

Gruß Richi :cool:

Adlerauge 03.04.17 21:25

hi,
der Code, den ich Dir letztens geschrieben habe, war im Prinzip ein (EA-interner) Trailing-Stop. Du must jetzt nur noch den gewünschten Abstand hinzu- bzw. abrechnen...
Wenn der Kurs dann durch die Linie geht, machst Du einen OrderClose.

Richi777 04.04.17 15:24

Zitat:

Zitat von Adlerauge (Beitrag 38172)
PHP-Code:

extern color             Deine_Lieblings_Farbe       clrBlue;
extern ENUM_LINE_STYLE   Dein_Lieblings_Linienstil   STYLE_SOLID;
enum LinienRichtung
    
{
     
rauf   0// Linie trailt nach oben
      
runter 1// Linie trailt nach unten
    
};
extern LinienRichtung Linien_Richtung 1;

double Aktueller_LinienPreis Bid;

void OnTick()
  {
   
ObjectDelete("Bid-Linie");
    
   if (
Linien_Richtung == 0)
     {
      if (
Aktueller_LinienPreis Bid)
         
Aktueller_LinienPreis Bid;
     }
   if (
Linien_Richtung == 1)
     {
      if (
Aktueller_LinienPreis Bid)
         
Aktueller_LinienPreis Bid;
     }
   
ObjectCreate(NULL,"Bid-Linie",OBJ_HLINE,0,1,Aktueller_LinienPreis);
    
ObjectSetInteger(NULL,"Bid-Linie",OBJPROP_COLOR,Deine_Lieblings_Farbe);
     
ObjectSetInteger(NULL,"Bid-Linie",OBJPROP_STYLE,Dein_Lieblings_Linienstil);
  } 

Viel Spass damit ;-)

Meinst Du das?
Ich habe das versucht aber irgendwie bewegt sich die Line trotzdem in beiden Richtungen. Irgend etwas muss ich da wohl verkehrt gemacht oder falsch verstanden haben

next user 06.04.17 00:44

Mal ne Frage, wieso löscht du die Linie jedesmal um sie dann neu zu erzeugen?
Wieso nutzt du nicht einfach ObjectMove?

traderdoc 06.04.17 10:41

Zitat:

Zitat von next user (Beitrag 38299)
Mal ne Frage, wieso löscht du die Linie jedesmal um sie dann neu zu erzeugen?
Wieso nutzt du nicht einfach ObjectMove?

Das ist eine sehr berechtigte Frage, zumal nicht nur beim Wandern der Linie diese jedes mal erst gelöscht und dann wieder erzeugt wird, sondern auch ohne dass sich die Linie bewegt, wird sie mit jedem Tick gelöscht und wieder gesetzt.

Das ist zwar alles möglich, aber im Endeffekt ressourcenfressend und ein optimierbarer Codingstil.

traderdoc

next user 06.04.17 11:44

Jap. Generell würde ich bei OnTick() wenn überhaupt, dann nur nach Abfragen benötigter Vorraussetzungen ein Object erstellen.
Hier allerdings nicht nötig. Wäre ungefähr so:
Code:

void OnTick()
{
if (Linien_Richtung == 0)
  {
      if (Aktueller_LinienPreis < Bid)
      {
        Aktueller_LinienPreis = Bid;
        ObjectMove(0,"Bid-Linie",0,0,Aktueller_LinienPreis);
      } 
  }
if (Linien_Richtung == 1)
  {
      if (Aktueller_LinienPreis > Bid)
      {
        Aktueller_LinienPreis = Bid;
        ObjectMove(0,"Bid-Linie",0,0,Aktueller_LinienPreis);
      } 
  }
}


Adlerauge 07.04.17 13:57

@nextuser: gegen Deine Lösung habe ich nichts einzuwenden...

@richi777: wenn die Linie bei Dir in beide Richtungen trailt, hast Du irgendeinen Fehler gemacht... ich kann aber nicht hellsehen, welchen.

next user 07.04.17 14:31

Hi Adlerauge,

soweit ich es richtig verstanden habe ist der Codeabschnitt von dir.
Ich wollte dich nur fragen, wieso hast du ein Aufzählung genommen und nicht einfach eine Bool-Variable? Immerhin geht es hier ja nur um 2 Zustände.

Adlerauge 07.04.17 15:32

Das funktioniert natürlich auch mit einer bool-Variablen.
Dann wird aber beim Starten des EA in der Eingabemaske aber nur "true" und "false" als Auswahlmöglichkeit angezeigt.
Bei einer Aufzählung hingegen wird angezeigt, was man im Code in der Zeile als Kommentar hinter die beiden Slashes geschrieben hat.
Ist netter ..))) ...und selbsterklärender.
Ausserdem war es als anpassbare und erweiterbare Vorlage gedacht.

next user 07.04.17 16:24

Cool. Das mit dem angezeigten Kommentar ist mich ehrlich gesagt noch nie aufgefallen. Dann ist deine Variante ja echt besser ;)


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:51 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum