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)
-   -   2 Trades 2 Charts (http://www.expert-advisor.com/forum/showthread.php?t=5983)

Ceo 22.01.18 21:27

2 Trades 2 Charts
 
Hallo, ich brauch mal Hilfe und zwar habe ich 2 Probleme bei meinem Expert Advisor.

1. Ich möchte z.b. im EUR/USD und im USD/CHF 2 Trades platzieren haben, wie mach ich das im Code?

2. Wenn z.b. die Gesamtsumme von denn 2 Trades 20€ Beträgt wie kann ich beide Orders schließen?



zu 1: Wie schreib ich beim "Symbol()" EUR/USD rein? Damit er nur in diesem Chart ein Trade macht und natürlich auch im USD/CHF


Code:

BuyTicket = OrderSend(Symbol(),OP_BUY,1,Ask,3,stoploss,takeprofit,"My Order",1200,0,clrGreen);

traderdoc 23.01.18 12:59

BuyTicket = OrderSend("EURUSD", OP_BUY,1,Ask....


traderdoc

Ceo 23.01.18 18:02

Und wie setze ich das um wenn z.b. beide Trades in der Summe zusammen bei 20€ sind das alle Orders geschlossen werden?

Adlerauge 23.01.18 19:36

Na, die gewünschten Orders mit OrderSelect in der üblichen for-Schleife auswählen, jeweils den OrderProfit() auslesen, zusammenzählen, und wenn der dann >= 20 ist, mit OrderClose die gewünschten Orders schliessen.
Wenn Du sonst keine Orders öffnest, ist es einfacher, dann brauchst Du nicht mit OrderTicket oder Magicnumber zu arbeiten.

Ceo 24.01.18 14:41

Ich würde gerne mit MagicNumber arbeiten da ich später mehrere Trades Öffnen möchte und alle für sich berechnen möchte. Ich hab es mir jetzt so vorgestellt. Nur wie schließe ich beide Trades geht es über die MagicNumber?




Code:

      OrderMagicNumber() == MagicNumber && MagicNumber1);
      {
        if(OrderProfit() > Profit)
            {
           
              OrderClose(OrderTicket(),Lots,price,slippage,clrBlue);
            }
     
      }


traderdoc 24.01.18 15:20

Code:

profit = 0;
for (int i = OrdersTotal()-1; i >= 0; i--) {
  if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderMagicNumber() == MagicNumber_EURUSD || OrderMagicNumber() == MagicNumber_USDCHF) {
        if (OrderSymbol() == "EURUSD" || OrderSymbol() == "USDCHF") {
            profit += OrderProfit() + OrderSwap() + OrderCommission();
        }
      }
  }
}
if (profit >= 20) {
  bool result = false;
  for (int i = OrdersTotal()-1; i >= 0; i--) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
        if (OrderMagicNumber() == MagicNumber_EURUSD) {
            if (OrderSymbol() == "EURUSD") {
              if (OrderType() ==OP_BUY)  result = OrderClose(OrderTicket(), OrderLots(), MarketInfo("EURUSD", MODE_BID), 0, Red);
              if (OrderType() ==OP_SELL) result = OrderClose(OrderTicket(), OrderLots(), MarketInfo("EURUSD", MODE_ASK), 0, Red);
            }
        }
        if (OrderMagicNumber() == MagicNumber_USDCHF) {
            if (OrderSymbol() == "USDCHF") {
              if (OrderType() ==OP_BUY)  result = OrderClose(OrderTicket(), OrderLots(), MarketInfo("USDCHF", MODE_BID), 0, Red);
              if (OrderType() ==OP_SELL) result = OrderClose(OrderTicket(), OrderLots(), MarketInfo("USDCHF", MODE_ASK), 0, Red);
            }
        }
      }
  }
}

Das ist die Sicherheitsvariante, falls mit je einer! MagicNumbers gearbeitet wird und das Schließen selbst aus irgendeinem Chart heraus erfolgt.

Im Prinzip kann die "gleichzeitige" Schließerei von Orders verschiedener Währungspaare und das noch mit verschiedenen MagicNumbers zur Herausforderung werden, denn jeder EA eines Charts wird nur die Eigenschaften des EAs berücksichtigen, die auch dort drin stehen. D.h. sieht der EA beim Schließen einer EURUSD-Order die MagicNumber 12345 in den Eigenschaften, dann wird er auch diese Order berücksichtigen, aber eben keine EURUSD-Order mit der MagicNumber 23456! D.h. will man die Orders verschiedener Währungspaare mit unterschiedlichen MagicNumbers hinsichtlich des "gleichzeitigen" Schließens verwalten, dann bietet sich ein 2. EA auf einem nicht benutzten Chart an, der nur die Orderschließung berücksichtigt. Damit der EA tickunabhängig arbeitet wird die Timerfunktion auf 1 Sekunde oder kürzer gestellt.

Um zu einer optimalen Lösung bei Dir zu gelangen, wäre es jedoch notwendig, zu erfahren, was Du genau erreichen willst.

traderdoc

Ceo 24.01.18 16:01

Ich will ein Ea programmieren der einmal Kauf und einmal verkauft, wenn die Signale da sind. Sollte dann die Summe der beiden Orders im plus sein werden die Orders geschlossen und ich bin im Gewinn natürlich dasselbe mit Verlust. Als Beispiel:


EURUSD + 25€
USDCHF - 5€
Gesamtsumme: 20€

Also die Orders werden geschlossen und ich bin im Gewinn.



Sollte ich dann einen extra EA programmieren um die Orders zu schließen oder würde es gehen wenn ich nur eine OnStart() Funktion hinzufüge in einem Ea?

traderdoc 24.01.18 16:18

Ok, dann vereinfache ich das mal auf Deinen speziellen Fall.

Code:

double profit = 0;
for (int i = OrdersTotal()-1; i >= 0; i--) {
  if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol() == "EURUSD" || OrderSymbol() == "USDCHF") {
        profit += OrderProfit() + OrderSwap() + OrderCommission();
      }
  }
}
if (profit >= 20) {
  bool result = false;
  for (int i = OrdersTotal()-1; i >= 0; i--) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
        if (OrderSymbol() == "EURUSD") {
            if (OrderType() ==OP_BUY)  result = OrderClose(OrderTicket(), OrderLots(), MarketInfo("EURUSD", MODE_BID), 0, Red);
            if (OrderType() ==OP_SELL) result = OrderClose(OrderTicket(), OrderLots(), MarketInfo("EURUSD", MODE_ASK), 0, Red);
        }
        if (OrderSymbol() == "USDCHF") {
            if (OrderType() ==OP_BUY)  result = OrderClose(OrderTicket(), OrderLots(), MarketInfo("USDCHF", MODE_BID), 0, Red);
            if (OrderType() ==OP_SELL) result = OrderClose(OrderTicket(), OrderLots(), MarketInfo("USDCHF", MODE_ASK), 0, Red);
        }
      }
  }
}

OnStart() kann man nur in einem Script benutzen, und wenn sich das bei Dir nur auf zwei Paare beschränkt, lohnt sich auch nicht ein separater EA.

traderdoc

Ceo 25.01.18 22:29

Hat funktioniert, danke:)


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