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

 
Ich hätte gerne eine separate Nummer für Kauf- und Verkaufsaufträge - ist das möglich?
 
7bit:
Idee: Sie könnten immer dieselbe magische Zahl wie üblich verwenden, um es mit allem anderen kompatibel zu machen, das magische Zahlen verwendet, aber es auch mit dem Kommentarstring kombinieren, indem Sie eine Zahl in den Kommentar aufnehmen, die für jedes Handelspaar eindeutig ist. Sie könnten dann den anderen Handel eines jeden Handelspaares finden, indem Sie einfach nach einem Handel mit derselben magischen Zahl und demselben Kommentar suchen.

Wie kann ich einen Auftrag nach Kommentar und magischer Zahl finden?

Ich habe 15 Auslöser

Ich möchte keinen Standard, sagen wir TP 200 SL 300

jedes Währungspaar wird einen anderen TP und SL haben, je nach Statistik des Auslösers

Wenn ein Trigger mit höherer Wahrscheinlichkeit auftritt, möchte ich ihn identifizieren und Maßnahmen ergreifen

Trigger1 eur/usd 100 Wahrscheinlichkeit: 94%, usd/jpy 300 Wahrscheinlichkeit:74% eur/jpy 200 Wahrscheinlichkeit.100%

wenn Trigger 1 für eines der Paare eur/usd gehandelt wird, wird für dieses Paar für diesen Trigger nicht mehr gehandelt

ich möchte immer noch für Trigger 2, Trigger 3 und (Trigger 1, nur ein anderes Paar) handeln

 

y nicht

int MagicNoBuy  = 12345;
int MagicNoSell = 67890;

OrderSend(Symbol(),OP_BUY,1,Ask,......,MagicNoBuy ,.,..);
OrderSend(Symbol(),OP_SELL,1,Bid,......,MagicNoSell,.,..);
 
Sie brauchen keine separate Magie für Kauf und Verkauf, Sie können sie einfach mit OrderType() filtern
 
7bit:
Sie brauchen keine separate Magie für Kauf und Verkauf, Sie können sie einfach mit OrderType() filtern


Vielen Dank für Ihre Hilfe

 
7bit:
Sie brauchen keine separate Magie für Kauf und Verkauf, Sie können sie einfach mit OrderType() filtern
und mit OrderSymbol() können Sie die Währungspaare herausfiltern
for(int pos = OrdersTotal()-1; pos >= 0 ; pos--) if (
    OrderSelect(pos, SELECT_BY_POS)             // Only my orders w/
&&  OrderMagicNumber() == Magic.Number          // my magic number
&&  OrderSymbol()      == Symbol() ){           // and period and symbol
 

Ich verwende einen BEREICH von magischen Zahlen, damit ich verschiedene SL-Methoden für Trades verwenden kann.

z.B. MAGIC_NUMBER_BASE = 1234500

& dann verwende ich einen "Offset" von 0-99, um meine Trades nach SL-Typ zu gruppieren. Ich verwende dann Code wie

      if(OrderMagicNumber() < MY_MAGIC_LO || OrderMagicNumber() > MY_MAGIC_HI)

um meine Trades zu finden (eigentlich ist dieser Code dazu da, meine Trades auszuschließen!)

 
sxTed:

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

Danke, ich komme endlich dazu, diesen Thread wieder aufzugreifen und probiere das mal aus. Ich verstehe das Sample nicht. Warum OrderSend > 0, dann einen weiteren OrderSend durchführen? Bitte um Hilfe!

Ich habe festgestellt, dass die Sequenznummer mit jeder Order steigt und dass ich sie einem Kommentar oder einer magischen Zahl zuordnen kann, was großartig ist. Das Beste daran ist, dass sie auch nach einem Neustart von MT4 im System verbleiben.

Aber wie kann ich sie später identifizieren und vergleichen?


Wie jeder Satz von Aufträgen platziert wird:

string sNumber=DoubleToStr(SequenceNumber(),0);
int ticket=OrderSend(Symbol(),OP_BUY,LotSize,MarketInfo(Symbol 1,MODE_ASK),3,0,0,sNumber,12345,0,Green)
&   ticket=OrderSend(Symbol(),OP_SELL,LotSize,MarketInfo(Symbol 2,MODE_ASK),3,0,0,sNumber,12345,0,Red);


D.h. ich handle im Paar, Order 1 & 2, dann Order 3 & 4, und so weiter....

Auftrag 1 - Sequenz #1

Auftrag 2 - Sequenz #2

Auftrag 3 - Sequenz #3

Auftrag 4 - Sequenz #4

Auftrag 5 - Sequenz #5

Reihenfolge 6 - Sequenz #6


Da sie nun eine eindeutige Sequenznummer haben, die sich erhöht,

Wie wähle ich sie aus und vergleiche sie?

Ich möchte Folgendes auswählen und vergleichen

Reihenfolge 1 & 2, dann Reihenfolge 3 & 4, dann Reihenfolge 5 & 6, und so weiter ...


Vielen Dank im Voraus!

 

... Fortsetzung der obigen Antwort


Oder vielleicht könnte ich steuern, wann die laufende Nummer erhöht wird?

D.h. nach jedem Satz von Aufträgen? Zum Beispiel nach 2 Aufträgen.

So könnte ich beim Auswählen und Vergleichen nur Aufträge mit der gleichen Sequenznummer auswählen.

Wie kann ich das codieren?


Vielen Dank!

 
Warum nicht die eindeutige Ticketnummer verwenden, die Sie erhalten, wenn Sie ordersend() verwenden?

Speichern Sie diese in einem Array[][]


Beispiel.


Handel 1
TicketArray [1] [0] = Ticket0;
TicketArray [1] [1] = Ticket1;

Handel 2
TicketArray [2] [0]
TicketArray [2] [1]

Handel 3
TicketArray [3] [0]
TicketArray [3] [1]

... Und so weiter