|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
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); |
|
|||
BuyTicket = OrderSend("EURUSD", OP_BUY,1,Ask....
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Und wie setze ich das um wenn z.b. beide Trades in der Summe zusammen bei 20€ sind das alle Orders geschlossen werden?
|
|
|||
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. |
|
|||
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); } } |
|
|||
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); } } } } } 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
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
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? |
|
|||
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); } } } } traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
Lesezeichen |
Stichworte |
chart, symbol, trade |
|
|