|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Ausführen von Buy und Sell Order nacheinander
Hallo liebe Traderfreunde,
ich bin neu in der Welt des MQL 4 Programmierens. Ich möchte ein Programm schreiben, dass mir einfach nacheinander Buy und Sell Order ausführt. Wenn eine Buy Order ausgeführt ist dann möchte ich danach eine Sell Order ausführen. Leider führt der Code nur die Buy Orders in der richtigen Reihenfolge aus, sobald ich den OP_BUY Befehl durch OP_SELL ersetze funkt garnichts mehr Was kann ich machen ? extern int TP = 20; extern int SL = 10; void OnTick() { if(OpenPosCount(OP_BUY)==0){ OrderSend (Symbol(), OP_BUY,0.0, Price, 3, Price-SL*10*Point,Price+TP*10*Point, "MarketOrder", 123456, 0, Blue); } if(OpenPosCount(OP_BUY)==1){ OrderSend (Symbol(), OP_BUY,0.00, Price, 3, Price-SL*10*Point,Price1+TP*10*Point, "MarketOrder", 123456, 0, Blue); } if(OpenPosCount(OP_BUY)==2){ OrderSend (Symbol(), OP_BUY,0.00, Price, 3, Price-SL*10*Point,Price+TP*10*Point, "MarketOrder", 123456, 0, Blue); } } int OpenPosCount(int Orderart) { int OffenePositionen=0; for (int x=0;x<=OrdersTotal()-1;x++) { if (OrderSelect(x,SELECT_BY_POS)==true) { if(OrderSymbol()==Symbol()&&OrderType()==Orderart) OffenePositionen++;}} return(OffenePositionen); } Nette Grüße dd |
|
|||
Beides öffnen, wenn gar nix offen ist. z.B.
Code:
for(i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS)) { if(OrderType()==OP_BUY&&OrderMagicNumber()==Buy_MN&&OrderSymbol()==Symbol())bool Buy_Mark_inv=true; if(OrderType()==OP_SELL&&OrderMagicNumber()==Sell_MN&&OrderSymbol()==Symbol())bool Sel_Mark_inv=true; } } Code:
if( ... Buy_Mark_inv==false && Sel_Mark_inv==false ) { if( Buy==true )OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Buy_SL,Buy_TP,0,Buy_MN,0,MediumBlue); if( Sell==true )OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Sel_SL,Sel_TP,0,Sell_MN,0,BurlyWood); } |
|
|||
D
Ich verstehe gerad garnchts...
Ich möchte bei einem bestimmten Preis eine Buy Order öffnen, nur wenn diese geöffnet ist, möchte ich bei einem bestimmten Preis eine Sell Order öffnen... nicht beide gleichzeitig sondern nacheinander gruß |
|
|||
Ach so. Dann probier Stop- oder Limit.
https://docs.mql4.com/trading/ordersend https://docs.mql4.com/constants/trad...rderproperties |
|
|||
Zitat:
Und wenn direkt nach der 1. Buy Order eine 1. Sell Order rausgehen soll, mußt Du sehen, ob Dein OpenPosCount(OP_BUY)==1 ist und dann den 1. Verkauf senden. AVT |
|
|||
Super Danke...
Jetzt führt er mir die erste Sell Position nach der ersten Buy Position aus, leider dann aber die Sell Position mehrfach gleichzeitig... also nicht nur eine Sell Position if(OpenPosCount(OP_BUY)==0){ OrderSend (Symbol(), OP_BUY,0.10, Price, 3, Price-SL*10*Point,Price+TP*10*Point, "MarketOrder", 123456, 0, Blue); } if(OpenPosCount(OP_BUY)==1){ OrderSend (Symbol(), OP_SELL,0.1, Price1, 3, Price1+SL*10*Point,Price1-TP*10*Point, "MarketOrder", 123456, 0, Red); } if(OpenPosCount(OP_SELL)==1){ OrderSend (Symbol(), OP_BUY,0.1, Price, 3, Price-SL*10*Point,Price+TP*10*Point, "MarketOrder", 123456, 0, Blue); |
|
|||
Was soll das Ganze überhaupt werden? Willst Du ständig Orders offen haben? Dann öffne mehrere Stop-Orders, jeweils mit eigener MN, eigenem Price, usw.
|
|
|||
Gut, dann will ich mal zwischengrätschen:
Als Erstes solltest Du Dir bitte angewöhnen, den Code über den Button # zu schreiben, damit man den besser lesen kann. Wenn Du wirklich nur nach dem Öffnen der ersten! BuyOrder eine erste SellOrder öffnen willst, dann geht da ganz einfach so: Code:
if (!OrderCheck()) { bool res = OrderSend (Symbol(), OP_BUY, 0.1, Ask, 3, NormalizeDouble(Ask-SL*10*Point, Digits), NormalizeDouble(Ask+TP*10*Point, Digits), "MarketOrder", 123456, 0, Blue); if (res) { OrderSend (Symbol(), OP_SELL, 0.1, Bid, 3, NormalizeDouble(Bid+SL*10*Point, Digits), NormalizeDouble(Bid-TP*10*Point, Digits), "MarketOrder", 123456, 0, Red); } } bool OrderCheck() { for (int x=0; x<=OrdersTotal()-1; x++) { if (OrderSelect(x, SELECT_BY_POS)) { if (OrderSymbol()== Symbol()) { return(true); } } return(false); }
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
ich glaube ich brauche 2 Zählschleifen, eine für die Buy und eine für die Sell Orders...
|
|
|||
Das hängt jetzt ganz davon ab, was Du eigentlich wirklich wolltest.
Ich habe die Erfahrung über meine jahrelange Auftragsprogrammierung gesammelt, dass sich sehr häufig die Kunden nicht exakt genug ausgedrückt haben und damit etwas anderes programmiert wurde als angedacht. Daher nochmals mein Appell an alle Fragenden: Überlegt Euch im Vorfeld ganz, ganz genau, was Ihr tatsächlich erreichen wollt. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
Lesezeichen |
Stichworte |
order management |
|
|