Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools  
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4245
Beiträge: 39291
Benutzer: 6.551
Aktive Benutzer: 260
Links: 80
Wir begrüßen unseren neuesten Benutzer: Jonnes
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 7 Stunden
- Jonnes
vor 14 Stunden
- bluesdd
vor 2 Tagen
- KEY
vor 3 Tagen
- aliconii
vor 5 Tagen
- Matthias

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 85
Gesamt: 85
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 12.12.18
Mitglied
 
Registriert seit: Sep 2018
Beiträge: 84
Max2018 befindet sich auf einem aufstrebenden Ast
Standard Gleicher Preis einer Pending Order

Hi,
ich möchte prüfen, ob es bereits eine andere geöffnete PendingOrder mit dem gleichen Startpreis gibt und wenn dies der Fall ist, eröffne ich die Position NICHT. Wie kann ich das hier machen ? irgendeine if Abfrage mit einem break? Aber wie?

Code:
for (int vv = 0; vv <= 300; vv++) 
{
   price[vv] = NormalizeDouble(ObjectGetDouble(0,vv,OBJPROP_PRICE2),NACHKOMMA);   
   priceSL[vv] = NormalizeDouble(ObjectGetDouble(0,vv,OBJPROP_PRICE1),NACHKOMMA)-NormalizeDouble(spreadReal,NACHKOMMA);   // da spreadReal negativ hier minus !
   priceZIEL[vv] =NormalizeDouble(price[vv]-((priceSL[vv]-price[vv])*MARGE),NACHKOMMA);
 
   result[vv]=OrderSend(Symbol(),OP_SELLSTOP,Lots,price[vv],Slippage,0,0,"X"+MARGE+"_"+MagicNumber,MagicNumber,0,Blue); 
   TheStopLoss=priceSL[vv]+AufschlagSL;
   TheTakeProfit=priceZIEL[vv]-AufschlagSL; 
   if(StopLoss>0) TheStopLoss=priceSL[vv]+AufschlagSL;
   OrderSelect(result[vv],SELECT_BY_TICKET);
   OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green); 
}
  #2 (permalink)  
Alt 12.12.18
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 731
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Die Pending Order löschen, wenn Eine entsprechend im Markt ist?
  #3 (permalink)  
Alt 12.12.18
Mitglied
 
Registriert seit: Sep 2018
Beiträge: 84
Max2018 befindet sich auf einem aufstrebenden Ast
Standard

Nein, die neue Pending Order soll nicht gesetzt werden.
also ich vergleiche price[vv] mit allen bereits gesetzten SELLSTOPS und hat einer bereits einen Preis in genau dieser Höhe , dann setze ich einen break, also wird die neue Pending Order nicht platziert. Aber wie mache ich das, da ich ja dann eine Schleife in der Schleife habe und alle bereits gesetzten SellStops abgleichen muss......
  #4 (permalink)  
Alt 12.12.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.208
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ach @MA-EA, richtig lesen ist schon eine Kunst!

Prinzipiell läuft das so:

Code:
bool PO_Check() {
   for(int i = OrdersTotal()-1; i >= 0; i--) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber){
            if (OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP) {
               if (OrderOpenPrice() == Vergleichspreis) return(false);
            }
         }
      }
   }
   return(true);
}

//oder über die TicketNumber:

bool PO_Check() {
   if (OrderSelect(TicketNumber, SELECT_BY_TICKET)) {
      if (OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP) {
         if (OrderOpenPrice() == Vergleichspreis) return(false);
      }
   }
   return(true);
}
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #5 (permalink)  
Alt 12.12.18
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 731
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Nach welchem Prinzip werden die Stop-Orders gesetzt? Wie funktioniert das ganze System?

Der einfachste Weg wäre eben, die Stop-Order zu löschen. Wenn dann gar nichts mehr investiert ist, neue Stop-Order setzen. Dann brauch man nicht nach irgendwelchen Preisen suchen.
  #6 (permalink)  
Alt 12.12.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.208
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Er will aber die alten PendingOrders nicht löschen, wenn sie bereits gesetzt wurden, und damit sie nicht zweimal gesetzt werden, z.B. bei Grid-Systemen, werden die gesetzten POs dahingehend gecheckt.

Das ist doch ganz einfach.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #7 (permalink)  
Alt 13.12.18
Mitglied
 
Registriert seit: Sep 2018
Beiträge: 84
Max2018 befindet sich auf einem aufstrebenden Ast
Standard

Hi,

super Danke.... ABER es gibt da noch ein Problem aus der Ausgangsfrage

ich habe jetzt in die Formel eingefügt:
Code:
if (PO_Check()==true)break;
also

Code:
for (int vv = 0; vv <= 300; vv++) 
{
   price[vv] = NormalizeDouble(ObjectGetDouble(0,vv,OBJPROP_PRICE2),NACHKOMMA);   
   priceSL[vv] = NormalizeDouble(ObjectGetDouble(0,vv,OBJPROP_PRICE1),NACHKOMMA)-NormalizeDouble(spreadReal,NACHKOMMA);   // da spreadReal negativ hier minus !
   priceZIEL[vv] =NormalizeDouble(price[vv]-((priceSL[vv]-price[vv])*MARGE),NACHKOMMA);
 
if (PO_Check()==true)break;
   result[vv]=OrderSend(Symbol(),OP_SELLSTOP,Lots,price[vv],Slippage,0,0,"X"+MARGE+"_"+MagicNumber,MagicNumber,0,Blue); 
   TheStopLoss=priceSL[vv]+AufschlagSL;
   TheTakeProfit=priceZIEL[vv]-AufschlagSL; 
   if(StopLoss>0) TheStopLoss=priceSL[vv]+AufschlagSL;
   OrderSelect(result[vv],SELECT_BY_TICKET);
   OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green); 
}
und unten die Boolische Abfrage

Code:
  bool PO_Check() {
   for(int i = OrdersTotal()-1; i >= 0; i--) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber){
            if (OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP) {
               if (OrderOpenPrice() == price[vv]) return(false);
            }
         }
      }
   }
Aber da wirft er mir den Fehler aus -und sagt er kennt price[vv] nicht und da auch meine Frage - wie das mit price[vv] abgeglichen wird.... da müsste ich doch eine Schleife in der Schleife haben oder nicht und wie macht man das? Er muss doch jeden price[vv] Wert mit den bereits bestehenden PendingOrders OrderOpenPrice() abgleichen. Damit muss er ja 2 Schleifen durchlaufen ...oder nicht? ..und wie baut man das hier ein?
  #8 (permalink)  
Alt 14.12.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.208
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ja klar wird er die Variable nicht kennen, da sie dafür nicht am richtigen Ort deklariert wurde.

Das sollte auf jeden Fall gehen:

if (PO_Check(price[vv]) break;

Und dann

bool PO_Ckeck(double price) {
...
if (OrderOpenPrice() == price) ...
}

Damit sollte auf jeden Fall der aufgetretene Compilerfehler beseitigt sein.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #9 (permalink)  
Alt 16.12.18
Mitglied
 
Registriert seit: Sep 2018
Beiträge: 84
Max2018 befindet sich auf einem aufstrebenden Ast
Standard

Hi,
SUUUUPER DANKE -

traderdoc Du bist ein Genie.... was würde das Forum ohne Dich machen, das würde jämmerlich dahin vegetieren
Wirklich absolut SPITZE

DU BIST ABSOLUT GENIAL

DANKE und schöne Feiertag


Geändert von Max2018 (16.12.18 um 13:50 Uhr)
Thema geschlossen

Lesezeichen


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +2. Es ist jetzt 01:19 Uhr.


Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2019 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2017 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------