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)
-   -   Order schließen wenn der Kurs eine HLine überschritten wird??? (http://www.expert-advisor.com/forum/showthread.php?t=5577)

Richi777 30.03.17 01:25

Order schließen wenn der Kurs eine HLine überschritten wird???
 
Hallo wieder einmal :D ,

wollte mal fragen, ob es möglich ist, wenn ich eine Hline in den Chart bei einer geöffneten Order einzeichne und diese vom Kurs überschritten wird, dass darauf hin die Order geschlossen wird, egal ob Profit oder Loss???
Ich habe schon versucht so einige verschiedene Codes in einen EA einzubauen aber irgendwie habe ich einen Denkfehler oder es liegt an etwas anderen.
Dass beim überschreiten einer Hline eine Order geöffnet wird, ist überhaupt kein Problem aber beim Schließen geht das nicht. :confused:
Ist es überhaupt möglich und wenn ja, welchen Code würde funktionieren?

Für Hilfe wäre ich sehr dankbar :)

Leopold 30.03.17 10:18

Wenn du es beim eröffnen geschafft hast, sollte es doch auch zum schließen möglich sein.

Du müsstest den Code mal Posten, damit man das auch nachvollziehen kann wie du das machst.

--- Leopold ---

RetepM 30.03.17 11:15

Siehe Mt4 Doku:
https://docs.mql4.com/objects/objectgetvaluebyshift
oder
https://docs.mql4.com/objects/objectgetshiftbyvalue

Richi777 30.03.17 12:09

Code:

if(Bid == BuyLine)
    {
      Order=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slipage,0,0,"",0,0,Lime);
    }

int CL;
   
if(OrderType()==OP_BUY)
  {
  if(Bid< CloseLine) CL=True;
     
  if(CL==True)
    {
      bool CloseOrder= OrderClose(OrderTicket(),Lots,CloseLine,3);
    }
  }

Beim Order öffnen funktioniert das wie ich will aber andersrum geht das nicht

Leopold 30.03.17 12:37

Auf den ersten Blick fehlt mal "OrderSelect".
Du musst ja festlegen welche Order geschlossen werden soll.

--- Leopold ---

Richi777 30.03.17 13:09

Code:

int i,cnt,CL;
cnt = OrdersTotal();   
for (i=0;i<cnt;i++)
    {
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {
          if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
          {
            if (OrderType() == OP_BUY)
            {
              if(Bid < CloseLine) CL=True;
              if (CL==True)
              {
              bool CO= OrderClose(OrderTicket(),Lots,CloseLine,3);
              }
            }
          }
      }     
  }

:( ....hmmmm.....irgend etwas habe ich wohl immernoch übersehen. :confused:
Die CloseLine ist der unter "double CloseLine;" gespeicherte Preis.
Beim Order öffnen geht das komischer Weise.

Leopold 30.03.17 13:14

Verwende bei der LotSize "OrderLots()" und beim ClosePrice "Bid".
Und CL würde ich als "bool" deklarieren.

traderdoc 30.03.17 14:56

Dazu kommt, dass bei

if(Bid == BuyLine)

ein Öffnen der Order in den seltensten Fällen real!! vorgenommen werden würde.
Viel besser wäre:

if(Bid >= BuyLine)

traderdoc

Deepack 30.03.17 18:03

Wobei man noch anmerken sollte
wenn der Kurs die Linie überschritten hat
bei jedem Tick wieder > BuyLine ist und erneut setzten würde

Richi777 31.03.17 12:52

Code:

int i,cnt;
bool CL;
cnt = OrdersTotal();   
for (i=0;i<cnt;i++)
    {
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {
          if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
          {
            if (OrderType() == OP_BUY)
            {
              if(Bid >= CloseLine) CL=True;
              if (CL==True)
              {
              bool CO= OrderClose(OrderTicket(),OrderLots(),Bid,3);
              }
            }
          }
      }     
  }

Okay... Danke vielmals für die Infos aber ich dreh noch durch :( ...
Bin ich zu blöd dafür oder warum geht das immer noch nicht???
Irgendwo muss doch noch ein Fehler sein?
Auf meinen Chart sehe ich die CloseLine aber wenn der Kurs sie durchquert passiert nichts....Hilfe!!! Das muss doch irgendwie funktionieren...

RetepM 31.03.17 16:23

Liste der Anhänge anzeigen (Anzahl: 1)
Hi, in der Anlage schicke ich Dir einen Indikator, der eine blaue "UpperRange" und rote "LowerRange" Linie malt. Wenn Du diese Linien über die aktuelle Kerze bewegst, zeigt der Indikator den Wert an. Der Wert wird mit

valUpper= ObjectGetValueByShift("UpperRange", 0);
valLower= ObjectGetValueByShift("LowerRange", 0);

in die Variablen valUpper bzw valLower geschrieben.

Dann nimmst Du in Deinem EA z.B. Ask > valUpper und hast den Trigger zum Auslösen einer Close-Funktion.

traderdoc 31.03.17 17:12

Zitat:

Zitat von Richi777 (Beitrag 38236)

Okay... Danke vielmals für die Infos aber ich dreh noch durch :( ...
Bin ich zu blöd dafür oder warum geht das immer noch nicht???
Irgendwo muss doch noch ein Fehler sein?
Auf meinen Chart sehe ich die CloseLine aber wenn der Kurs sie durchquert passiert nichts....Hilfe!!! Das muss doch irgendwie funktionieren...

Ich kann aufs Erste keinen Fehler entdecken, außer das evtl. der Variablen CloseLine ein falscher Wert zugeordnet wurde.
Lass Dir den Wert mal mit Print(DoubleToStr(CloseLine, Digits)); anzeigen.
Wo wird dieser Variablen der Wert zugeordnet?

Das geht einfacher und damit übersichtlicher:
Code:

if(Bid >= CloseLine) CL=True;
  if (CL==True)
  {
      bool CO= OrderClose(OrderTicket(),OrderLots(),Bid,3);
  }

per direkt:
Code:

if(Bid >= CloseLine) {
  bool CO= OrderClose(OrderTicket(),OrderLots(),Bid,3);
}

traderdoc

RetepM 31.03.17 17:52

Zitat:

Zitat von Richi777 (Beitrag 38219)
Hallo wieder einmal :D ,
wollte mal fragen, ob es möglich ist, wenn ich eine Hline in den Chart bei einer geöffneten Order einzeichne und diese vom Kurs überschritten wird, dass darauf hin die Order geschlossen wird, egal ob Profit oder Loss???

Das war der erste Satz in diesem Thread. Ich bin deshalb davon ausgegangen, das händisch eine Linie gezeichnet wird oder?

traderdoc 31.03.17 18:39

Zitat von Richi777
Hallo wieder einmal ,
wollte mal fragen, ob es möglich ist, wenn ich eine Hline in den Chart bei einer geöffneten Order einzeichne und diese vom Kurs überschritten wird, dass darauf hin die Order geschlossen wird, egal ob Profit oder Loss???

"Das war der erste Satz in diesem Thread. Ich bin deshalb davon ausgegangen, das händisch eine Linie gezeichnet wird oder?"

Nun ja, wenn dem so wäre, dann hätte aber über den folgenden Code überhaupt keine Order geöffnet werden dürfen, denn aufgrund einer händisch eingezeichneten Buy-Linie wird nicht automatisch der Variablen BuyLine ein Wert > 0 zugewiesen, mal davon abgesehen, dass aufgrund des Vergleichsoperators == das Öffnen eher ein Zufall ist.

Code:

if(Bid == BuyLine)
{
  Order=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slipage,0,0,"",0,0,Lime);
}

Ansonsten könnte man tatsächlich aus seiner Beschreibung eine händisch eingezeichnete Linie schlussfolgern.

traderdoc

Richi777 02.04.17 18:54

Eine händisch gezeichnete Line war nicht der Sinn. Ich habe es leider falsch formuliert. Die Linie hat schon einen vorgegebenen Wert.
Egal...ich habe auf jeden Fall herausgefunden wie es jetzt doch funktioniert.
Dafür das ich eigentlich ein blutiger Anfänger bin was das EA programmieren angeht, habe ich schon so einiges umsetzen können.

Ich habe ein CloseAllOrders Script gefunden und mir den Code angeschaut.
Den habe ich dann versucht einzubauen und es hat funktioniert.
Damit schließt sich jetzt die Order wenn die Linie überschritten wird. ;)

Code:

  for( i=cnt-1;i>=0;i--)
  {
    OrderSelect(i, SELECT_BY_POS);
    int type  = OrderType();

    bool result = false;
   
  if(Bid < CloseLine)
    {
      //Close opened long positions
      result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(), MODE_BID), 5, Red );
      break;
    }
   
    if(result == false)
    {
      Alert("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
      Sleep(3000);
    } 
  }


  return(0);
  }


traderdoc 02.04.17 22:25

Zitat:

Zitat von Richi777 (Beitrag 38219)
Hallo wieder einmal :D ,

wollte mal fragen, ob es möglich ist, wenn ich eine Hline in den Chart bei einer geöffneten Order einzeichne und diese vom Kurs überschritten wird, dass darauf hin die Order geschlossen wird, egal ob Profit oder Loss???

Code:

for( i=cnt-1;i>=0;i--)
  {
    OrderSelect(i, SELECT_BY_POS);
    int type  = OrderType();

    bool result = false;
   
  if(Bid < CloseLine)
    {
      //Close opened long positions
      result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(), MODE_BID), 5, Red );
      break;
    }
   
    if(result == false)
    {
      Alert("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
      Sleep(3000);
    } 
  }


  return(0);
  }


Also ich verstehe hier mehrere Dinge nicht:
1. Im Eröffnungspost steht was von "Kurs überschritten", im o.g. Code steht allerdings:
if(Bid < CloseLine)
Das wäre aber ein Unterschreiten!!
2. Wenn im o.g. Code die selektierte Order eine SellOrder wäre, würde permanent ein Fehler auftreten, weil eine SellOrder nicht mit dem Bid-, sondern mir dem Ask-Kurs geschlossen wird, denn in diesem Code wird nicht nach dem Ordertype selektiert.
3. Würde diese Code nicht durch den Compiler gehen.
4. Wäre das int type = OrderType(); so wie es da steht überflüssig, obwohl es eigentlich unabdingbar ist.
5. Es würde permanent eine Fehlermeldung generiert, wenn Bid nicht kleiner als CloseLine wäre.
6. Dass Deine BuyOrder also geschlossen wurde, lag nich daran, dass der Bid-Kurs über der CloseLine lag, sondern darunter. In Summe also ein reiner Zufallscode - schmeiss ihn einfach weg!

traderdoc

Richi777 03.04.17 18:55

Ja....mein Fehler. Ich habe geschrieben überschritten und meinte unterschritten, weil es sich um eine Buy-Order handelt.
Trotzdem funktioniert das und meine Buy-Order wird beim unterschreiten der Linie geschlossen. Wie auch immer aber es funktioniert komischerweise bei mir ;)

traderdoc 03.04.17 19:42

Punkt 2. - 5. des Post #16 bleiben aber weiterhin bestehen.

traderdoc

next user 06.04.17 02:14

Zitat:

Zitat von Richi777 (Beitrag 38227)
Code:

if(Bid == BuyLine)
    {
      Order=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slipage,0,0,"",0,0,Lime);
    }

int CL;
   
if(OrderType()==OP_BUY)
  {
  if(Bid< CloseLine) CL=True;
     
  if(CL==True)
    {
      bool CloseOrder= OrderClose(OrderTicket(),Lots,CloseLine,3);
    }
  }

Beim Order öffnen funktioniert das wie ich will aber andersrum geht das nicht

Eine Sache verstehe ich nicht. Du sendest eine BUY-Order, sobald der Kurs deine definierte Linie erreicht hat, steigst also nicht "On Market" ein. Wäre da nicht ein BUY-STOP/LIMIT auch sinvoll?

Zitat:

Zitat von Richi777 (Beitrag 38219)
... wenn ich eine Hline in den Chart bei einer geöffneten Order einzeichne und diese vom Kurs überschritten wird, dass darauf hin die Order geschlossen wird, egal ob Profit oder Loss??? ...

Naja, so ganz egal ist es wohl nicht, oder? Beim Profit überschreiten und beim Loss unterschreiten wäre glaube ich sinnvoller, oder? Vielleicht habe ich dich auch falsch verstanden.

Zitat:

Zitat von Richi777 (Beitrag 38230)
Code:

int i,cnt,CL;
cnt = OrdersTotal();   
for (i=0;i<cnt;i++)
    {
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {
          if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
          {
            if (OrderType() == OP_BUY)
            {
              if(Bid < CloseLine) CL=True;
              if (CL==True)
              {
              bool CO= OrderClose(OrderTicket(),Lots,CloseLine,3);
              }
            }
          }
      }     
  }


Hier ist außerdem das letzte if sinnlos.
Code:

if(Bid < CloseLine) CL=True;
if (CL==True)
{
bool CO= OrderClose(OrderTicket(),Lots,CloseLine,3);
}

zu
Code:

if(Bid < CloseLine)
{
  bool CO= OrderClose(OrderTicket(),Lots,CloseLine,3);
}

Ich habe dich vielleicht falsch verstanden, aber ich frage mich immer noch, was genau du mit der Linie bezwecken willst.
Soll sie die Funktion eines TakeProfit oder StopLoss einnehmen?
Wieso spielt es keine Rolle, ob der Kurs im "Gewinn" oder "Verlust" auf deine Linie trifft und du da einfach nur die Order schließt?


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:34 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