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)
-   -   Ausführen von Buy und Sell Order nacheinander (http://www.expert-advisor.com/forum/showthread.php?t=6295)

dd2509 06.01.19 03:42

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 :mad:
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

MA-EA 06.01.19 04:12

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); }


dd2509 06.01.19 05:31

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ß

MA-EA 06.01.19 07:28

Ach so. Dann probier Stop- oder Limit.


https://docs.mql4.com/trading/ordersend


https://docs.mql4.com/constants/trad...rderproperties

AVT 06.01.19 13:10

Zitat:

Zitat von dd2509 (Beitrag 41970)
..., sobald ich den OP_BUY Befehl durch OP_SELL ersetze funkt garnichts mehr :mad:
Was kann ich machen ?

Du mußt nicht nur OP_BUY durch OP_SELL ersetzen, sondern auch die SL und TP umkehren.
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

dd2509 06.01.19 15:51

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);

MA-EA 06.01.19 16:17

Was soll das Ganze überhaupt werden? :confused: :rolleyes: Willst Du ständig Orders offen haben? Dann öffne mehrere Stop-Orders, jeweils mit eigener MN, eigenem Price, usw.

traderdoc 06.01.19 16:50

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);
}

traderdoc

dd2509 06.01.19 16:51

ich glaube ich brauche 2 Zählschleifen, eine für die Buy und eine für die Sell Orders...

traderdoc 06.01.19 17:20

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


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