Wie erstellt man ein Magic Number-Array? - Seite 2

 
7bit:
Bitte beschreiben Sie grob, was Ihr EA tun wird. Wie viele verschiedene Arten von Aufträgen, die separat verwaltet werden müssen, gibt es. Vielleicht ist Ihr Problem gar kein Problem, wenn wir wissen, was Sie eigentlich erreichen wollen.


Ich möchte eine eindeutige Kennzeichnung wie eine magische Zahl haben, wenn ich eine Bestellung aufgebe. Keine feste Anzahl von Aufträgen.

Jeder neue Auftrag ist als neue Gruppe zu behandeln und separat zu verwalten.

int ticket=OrderSend(Symbol(),OP_BUY,LotSize,MarketInfo(Symbol(),MODE_ASK),3,0,0,"My EA",12345,0,Green)
&   ticket=OrderSend(Symbol(),OP_BUY,LotSize,MarketInfo(Symbol(),MODE_ASK),3,0,0,"My EA",12345,0,Green);

Anstatt 12345 festzulegen, möchte ich, dass die magische Zahl mit jeder neuen Bestellung erhöht wird, z. B. 1, dann nächste Bestellung 2, dann 3, dann 4 usw.

Außerdem befindet sich der OrderSend in einer Funktion, die keine Schleife bildet. Wie kann man so etwas machen?

Irgendwie wie ein dynamisches array[i]?

Wenn ich versuche, zu schließen, könnte ich durch OrdersTotal() und jede einzelne magische Zahl array[i] gehen? Und würde diese in der gleichen Gruppe schließen, wenn die Bedingung erfüllt ist.

 
7bit:
Bitte empfehlen Sie solchen Unsinn nicht. Die magische Zahl ist nicht dazu gedacht, Werte zu speichern, die bereits in der Bestellung selbst enthalten sind.

Können Sie mir bitte zeigen, wo genau in der Bestellung Period(); enthalten ist?
 
qjol:
Kannst du mir bitte zeigen, wo genau in der Anweisung Period(); enthalten ist?

Es ist nicht.

IMHO, wenn du nicht planst, andere Experten mit diesem zu benutzen, und nicht planst, es zu verschenken, dann kannst du die Magic Number zum Speichern von allem benutzen, was du willst...

 
qjol:

können Sie mir bitte zeigen, wo genau in der Bestellung enthalten ist Period(); ?
Was ist OrderPeriod()???
 
gordon:

Das ist es nicht.

IMHO, wenn du nicht vorhast, andere Experten damit zu benutzen, und nicht vorhast, sie zu verschenken, dann kannst du die Magic Number zum Speichern von allem benutzen, was du willst...


Vielleicht eine Funktion zum Speichern der aufsteigenden magischen Zahl

Vor jedem OrderSend die Funktion ausführen, um herauszufinden, welche magische Zahl als nächstes zugewiesen werden soll.

Irgendeine Idee, wie man eine solche Funktion erstellen kann?

 
johnnybegoode:

Haben Sie eine Idee, wie man eine solche Funktion erstellen kann?

Es gibt ein relativ komplexes Beispiel in diesem Artikel -> http://mqlmagazine.com/mql-programming/object-oriented-trading-an-oop-approach-to-trading/.
 
gordon:
Es gibt ein relativ komplexes Beispiel in diesem Artikel -> http://mqlmagazine.com/mql-programming/object-oriented-trading-an-oop-approach-to-trading/.


Danke dafür!
Das ist wirklich kompliziert, gibt es eine einfachere Methode?
 
johnnybegoode:


Ich möchte, dass die magische Zahl bei jeder neuen Bestellung inkrementiert wird, z. B. 1, dann die nächste Bestellung 2, dann 3, dann 4 usw.

Aber würde dies nicht garantieren, dass Sie niemals zwei Aufträge mit derselben eindeutigen Nummer haben? Ihre "Gruppen" würden aus nur einem Handel in jeder Gruppe bestehen? Habe ich Sie richtig verstanden?

Sie haben erklärt, was Sie tun wollen (Array von MN usw.), basierend auf dem, was Sie als einzige Lösung des Problems ansehen, aber Sie haben immer noch nicht das Problem selbst erklärt, wie das Handelssystem entscheiden soll, welche Aufträge geschlossen und welche behalten werden sollen. Wie würde es funktionieren, wenn man manuell damit handeln wollte? Gibt es vielleicht ein öffentlich verfügbares Handelssystem, das diesem System ähnlich genug ist, um das Konzept zu erklären und deutlich zu machen, um welche Art von System es sich handelt?

Zum Beispiel versucht man "normalerweise" (sehr oft) Orders zu schließen, die bestimmte Anforderungen erfüllen, die aus der Order selbst ermittelt werden können, z.B. "älteste Order", "x Pips Gewinn", "Break Even", "x Pips Verlust", usw. und die magische Zahl wird nur verwendet, um die eigenen Trades und die Trades von ganz anderen EAs zu unterscheiden.

Könnte man mit diesem System manuell handeln (weiter handeln), wenn man sich nur den Chart mit den bereits geöffneten Orders anschaut und *ohne* die IDs dazu zu schreiben?

Was ist in Ihrem System, dass Sie nur eine einzige ID von einer einzigen Order benötigen, um zu entscheiden, ob die Order geschlossen werden soll? Und warum können Sie nicht einfach die Ticketnummer selbst verwenden, wenn jeder Auftrag ohnehin eindeutig ist?

Wenn ich mehr darüber wüsste, könnte ich einen Schritt zurücktreten und die ganze Sache aus einem anderen Blickwinkel betrachten und vielleicht eine viel elegantere und einfachere Lösung finden.

 
7bit:

Aber würde dies nicht garantieren, dass Sie niemals zwei Aufträge mit derselben eindeutigen Nummer haben? Ihre "Gruppen" würden aus nur einem Handel in jeder Gruppe bestehen? Habe ich Sie richtig verstanden?

Sie haben erklärt, was Sie tun wollen (Array von MN usw.), basierend auf dem, was Sie als einzige Lösung des Problems ansehen, aber Sie haben immer noch nicht das Problem selbst erklärt, wie das Handelssystem entscheiden soll, welche Aufträge geschlossen und welche behalten werden sollen. Wie würde es funktionieren, wenn man manuell damit handeln wollte? Gibt es vielleicht ein öffentlich verfügbares Handelssystem, das diesem System ähnlich genug ist, um das Konzept zu erklären und deutlich zu machen, um welche Art von System es sich handelt?

Zum Beispiel versucht man "normalerweise" (sehr oft) Aufträge zu schließen, die bestimmte Anforderungen erfüllen, die aus dem Auftrag selbst ermittelt werden können, zum Beispiel "ältester Auftrag", "x Pips Gewinn", "Break Even", "x Pips Verlust", usw. und die magische Zahl wird nur verwendet, um die eigenen Trades und die Trades von völlig verschiedenen EAs zu unterscheiden.

Könnte man mit diesem System manuell handeln (weiter handeln), wenn man sich nur den Chart mit den bereits geöffneten Orders anschaut und *ohne* die IDs dazu zu schreiben?

Was ist in Ihrem System, dass Sie nur eine einzige ID von einer einzigen Order benötigen, um zu entscheiden, ob die Order geschlossen werden soll? Und warum können Sie nicht einfach die Ticketnummer selbst verwenden, wenn jeder Auftrag ohnehin eindeutig ist?

Wenn man mehr darüber wüsste, könnte man einen Schritt zurücktreten und die ganze Sache aus einem anderen Blickwinkel betrachten und vielleicht eine viel elegantere und einfachere Lösung finden.


"Aber würde das nicht garantieren, dass man nie zwei Bestellungen mit der gleichen eindeutigen Nummer hat?

Ja, es ist möglich, 2 oder mehr Aufträge mit einer eindeutigen Nummer zu haben. Führen Sie die Inkrementierung nach den Gruppenaufträgen durch.

 

Jon diese Funktion gibt eindeutige Nummern aus

//+------------------------------------------------------------------+
//| Function..: SequenceNumber                                       |
//| Purpose...: Generate a sequential number.                        |
//| Returns...: dSeqNum - next sequence number.                      |
//| Notes.....: MT4 keeps the value of the global variable at the    |
//|             client terminal for 4 weeks since the last access.   |                        
//|             Use SequenceNumber() to generate a unique identity   |
//|             for each order (and passed via parameter <magic>     |
//|             number, or converted to a string and passed via the  |
//|             parameter <comment> to the OrderSend() function) as  |
//|             the trade servers of some brokers do modify the      |
//|             ticket number of a pending order when it changes to  |
//|             a market order.                                      |
//|             The same sequence number could, for example, be used |
//|             to identify the two positions of a straddle order.   |
//|             ******************************************************
//|             * If the expert has to close partial lots, then MT4  *
//|             * retains in the new order the contents of the       *
//|             * OrderMagicNumber() but loses OrderComment().       *
//|             ******************************************************
//| Sample....: string sNumber=DoubleToStr(SequenceNumber(),0);      |
//|             if(OrderSend("EURUSD",OP_BUY,1,Ask,3,Ask-25*Point,   |
//|                          Ask+25*Point,sNumber,16384,0,Green) > 0)|
//|                OrderSend("EURUSD",OP_BUY,1,Ask,3,Ask-25*Point,   |
//|                          Ask+65*Point,sNumber,16384,0,Green);    |
//+------------------------------------------------------------------+
double SequenceNumber() {
  double dSeqNum=1, d;
  string sName="SequenceNumber";

  while(GlobalVariableCheck("Semaphore")) d+=0;
  GlobalVariableSet("Semaphore",1);
  if(GlobalVariableCheck(sName)) dSeqNum=GlobalVariableGet(sName)+1;
  GlobalVariableSet(sName,dSeqNum);
  GlobalVariableDel("Semaphore");
  return(dSeqNum);
}