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)
-   -   Definieren der Magic Number (http://www.expert-advisor.com/forum/showthread.php?t=5199)

TraderHolic 05.10.16 19:30

Definieren der Magic Number
 
Guten Abend,
ich bin Thomas und programmiere seit einer Woche an meinem EA.
Ich bin 22 Jahre alt komme aus Bayern, habe keine Programmierkenntnisse, handel seit 4 Jahren an der Börse und habe mir bis jetzt alle selbst beigebracht.
Ich bin neu hier :o

Zu meiner Frage:
ich möchte gerne eine Position schließen nachdem eine gewissen Bedingung erfüllt ist. Dies wollte ich mit dem Befehl "OrderClose" lösen.
Allerdings möchte der Befehl eine "Order_ID", wie definiere ich diese?

Hat doch irgendwas mit der Magic Number auf sich oder? :confused:

PHP-Code:

void Verkaufen()
   {
      
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,(LastCandleHigh+5),NULL,NULL,1,0,Red);
   }
   
void StopForSell()
   {
      
OrderClose(1,0.1,Ask,3,Green);
   } 

ich möchte die "Verkaufen" Position mit dem "void StopForSell()" schließen.

MA-EA 05.10.16 21:11

"void" dient nur dazu, Nachrichten auszugeben.
Lern erst mal die Grundlagen.;)

TraderHolic 05.10.16 21:15

Zitat:

Zitat von MA-EA (Beitrag 36111)
"void" dient nur dazu, Nachrichten auszugeben.
Lern erst mal die Grundlagen.;)

Mit void rufe ich meine vorher definierte Funktion auf.

Kronenchakra 05.10.16 21:45

void bedeutet nur, dass diese Funktion keinen Rückgabewert liefert.

Code:

void MyFunction()
{
  // Diese Funktion macht was (in diesm Fall nichts) :D
  // und liefert auch keinen Wert zurück
}

F1 im Metaeditor->Inhalt->MQL Reference->Language Basics

Viel Erfolg wünscht der

OPA-Trader

SusanneH 05.10.16 21:55

Zitat:

Zitat von Kronenchakra (Beitrag 36118)
void bedeutet nur, dass diese Funktion keinen Rückgabewert liefert.

Code:

void MyFunction()
{
  // Diese Funktion macht was (in diesm Fall nichts) :D
  // und liefert auch keinen Wert zurück
}

F1 im Metaeditor->Inhalt->MQL Reference->Language Basics

Viel Erfolg wünscht der

OPA-Trader

...und einfach einmal die Beispiel EA´s anschauen/durchlesen & verstehen :cool:

traderdoc 05.10.16 22:08

Zitat:

Zitat von MA-EA (Beitrag 36111)
"void" dient nur dazu, Nachrichten auszugeben.
Lern erst mal die Grundlagen.;)

Der Inhalt des ersten Satzes ist grottenfalsch.
Der Inhalt des zweiten Satzes, gerade von Dir geschrieben, ist an Komik nicht mehr zu überbieten. Wobei mit Komik die Tragik eigentlich gar nicht richtig trifft. Da schreibt der lernresistendende User, er solle erst mal die Grundlagen lernen. Ich kippe vor Lachen jetzt wirklich fast hinten über.

traderdoc

TraderHolic 05.10.16 22:08

Danke für die Antworten.
Dann wäre das ja mit void geklärt. Wusste ich aber ja schon.

Wie siehts jetzt aus mit der Magic Number Definiton?
Ich kenn die Beispiele schon aber ich verstehe die einfach nicht.
Die schreiben immer irgendwas von Index...

https://www.mql5.com/de/articles/1359

PHP-Code:

int total=OrdersTotal();
int mymagic;

for(
int pos=0;pos<total;pos++)
{
     if(
OrderSelect(pos,SELECT_BY_POS)==false) continue;
     
mymagic OrderMagicNumber();


Ich verstehe das einfach nicht und finde auch keine verständliche Erklärung dazu..

TogoTiger 05.10.16 22:12

Wenn du eine Order erstellst, codierst du doch etwa sowas:

Ticketnummer = OrderSend(Symbol,OP_BUY, Lots,Ask, SlipPips,0,0, "Kauf-Order", MagicNumber,0,Green);

Wenn's geklappt hast, dann hast du die Nummer der Order in Ticketnummer
Diese gibst du beim Schliessen der Order wieder an. Die MagicNumber spielt beim Close keine Rolle.

Etwa so:

Geschlossen = OrderClose(Ticketnummer, Lots, Ausstiegspreis, SlipPips, Red);

Gruss
Erwin

TraderHolic 05.10.16 22:20

Zitat:

Zitat von TogoTiger (Beitrag 36123)
Wenn du eine Order erstellst, codierst du doch etwa sowas:

Ticketnummer = OrderSend(Symbol,OP_BUY, Lots,Ask, SlipPips,0,0, "Kauf-Order", MagicNumber,0,Green);

Wenn's geklappt hast, dann hast du die Nummer der Order in Ticketnummer
Diese gibst du beim Schliessen der Order wieder an. Die MagicNumber spielt beim Close keine Rolle.

Etwa so:

Geschlossen = OrderClose(Ticketnummer, Lots, Ausstiegspreis, SlipPips, Red);

Gruss
Erwin

Ah ok, jetzt versteh ichs. Ich probiere es am Freitag mal.
Vielen Dank! =)

traderdoc 05.10.16 22:48

Zitat:

Zitat von TogoTiger (Beitrag 36123)
Wenn du eine Order erstellst, codierst du doch etwa sowas:
Ticketnummer = OrderSend(Symbol,OP_BUY, Lots,Ask, SlipPips,0,0, "Kauf-Order", MagicNumber,0,Green);
Wenn's geklappt hast, dann hast du die Nummer der Order in Ticketnummer
Diese gibst du beim Schliessen der Order wieder an. Die MagicNumber spielt beim Close keine Rolle.
Etwa so:
Geschlossen = OrderClose(Ticketnummer, Lots, Ausstiegspreis, SlipPips, Red);
Gruss
Erwin

Das funktioniert nur, wenn nur eine Order offen ist. Sobald eine weitere dieses Währungspaares offen ist oder zusätzlich eine andere Order eines anderen Währungspaares, dann funktioniert das nicht mehr.

Eine Möglichkeit wäre (hängt immer von den Erfordernissen ab!)

Code:

int BuyTicketNumber = 0, SellTicketNumber = 0;
double BuyLot, SellLot;

void CheckOrders() {
  for (int i = 0; i < OrdersTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_Number) {
            if (OrderType() == OP_BUY)  {
              BuyTicketNumber = OrderTicket();
              BuyLot = OrderLots();
            }
            if (OrderType() == OP_SELL) {
              SellTicketNumber = OrderTicket();
              SellLot = OrderLots();
            }
        }
      }
  }
}

Bei diesem Code wird schon mal nach dem Währungpaarsymbol selektiert und zusätzlich nach der MagicNumber, d.h. es werden wirklich nur die Orders selektiert, die auch mit dem EA auf dem Chart dieses Währungspaares geöffnet wurden.

Aber auch dieser Code wird nur zuverlässig funktionieren, wenn maximal eine BuyOrder und/oder eine SellOrder dieses Währungspaares existiert, weil die weiteren Orders die Werte überschreiben würden.

Die erhaltene TicketNumber wird dann eingesetzt in die Close-Funktion. Die Slippage ist ein Wert in Pips, der die tolerierbare Abweichung des tatsächlichen Ausführungskurses von den CloseKursen Bid bzw. Ask angibt. Als erstes einfach mal z.B. eine 2 einsetzen. Bei einem 5-Digit-Broker entsprechend eine 20. Red ist die Farbe des grafischen Close-Dreiecks im Chart.

Code:

if (BuyTicketNumber > 0) OrderClose(BuyTicketNumber, BuyLot, Bid, Slippage, Red);
if (SellTicketNumber > 0) OrderClose(SellTicketNumber, SellLot, Ask, Slippage, Red);

Ansonsten, einfach fertige Programme anschauen, wie diese programmiert wurden.

traderdoc


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