Come creare una matrice di numeri magici? - pagina 2

 
7bit:
Per favore, descrivi approssimativamente cosa farà il tuo EA. quanti tipi diversi di ordini devono essere gestiti separatamente ci sono. Forse il tuo problema non è affatto un problema se sappiamo cosa stai effettivamente cercando di ottenere.


Voglio avere un tag unico come un numero magico quando piazzo un ordine. Nessun numero fisso di ordini.

Ogni nuovo ordine deve essere trattato come un nuovo gruppo e deve essere gestito separatamente.

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

Invece di fissare 12345, vorrei che il numero magico aumentasse ad ogni nuovo ordine come 1, poi il prossimo ordine 2, poi 3, poi 4 ecc.

Anche l'OrderSend è in una funzione che non va in loop. Come fare qualcosa del genere?

Qualcosa come un array dinamico[i]?

Quando provo a chiudere, potrei passare attraverso OrdersTotal() e ogni numero magico unico array[i] ?? E chiuderei quelli nello stesso gruppo quando la condizione è soddisfatta.

 
7bit:
Per favore, non raccomandare queste sciocchezze. Il numero magico non è destinato a memorizzare valori che sono già contenuti nell'ordine stesso.

può u per favore mostrarmi dove esattamente è contenuto nell'ordine Period(); ?
 
qjol:
può u per favore mostrarmi dove esattamente è contenuto nell'ordine Period(); ?

Non lo è.

IMHO, se non hai intenzione di usare altri esperti con questo, e non hai intenzione di darlo via, allora puoi usare il Magic Number per memorizzare qualsiasi cosa tu voglia...

 
qjol:

potete per favore mostrarmi dove esattamente è contenuto nell'ordine Period(); ?
Cos'è OrderPeriod()?
 
gordon:

Non lo è.

IMHO, se non hai intenzione di usare altri esperti con questo, e non hai intenzione di darlo via, allora puoi usare il Magic Number per memorizzare qualsiasi cosa tu voglia...


Forse una funzione per memorizzare il numero magico crescente

Prima di ogni OrderSend, eseguire la funzione per scoprire quale numero magico deve essere assegnato successivamente.

Qualche idea su come creare una funzione come questa?

 
johnnybegoode:

Qualche idea su come fare una funzione come questa?

C'è un esempio relativamente complesso in questo articolo -> http://mqlmagazine.com/mql-programming/object-oriented-trading-an-oop-approach-to-trading/.
 
gordon:
C'è un esempio relativamente complesso in questo articolo -> http://mqlmagazine.com/mql-programming/object-oriented-trading-an-oop-approach-to-trading/.


Grazie!
Questo è davvero complesso, qualche metodo più semplice?
 
johnnybegoode:


Vorrei che il numero magico aumentasse ad ogni nuovo ordine come 1, poi il prossimo ordine 2, poi 3, poi 4 ecc.

Ma questo non garantirebbe di non avere mai due ordini con lo stesso numero unico? I tuoi "gruppi" sarebbero composti da un solo trade in ogni gruppo? Ho capito bene?

Hai spiegato quello che vuoi fare (array di MN, ecc.) in base a quello che vedi come l'unica soluzione al problema ma non hai ancora spiegato il problema stesso, come il trading system dovrebbe decidere quali ordini chiudere e quali mantenere. Come funzionerebbe se si volesse operare manualmente, forse c'è un sistema di trading pubblicamente disponibile che sia abbastanza simile a questo per spiegare il concetto, per rendere chiaro che tipo di sistema è questo?

Per esempio "di solito" (molto spesso) si cerca di chiudere gli ordini che soddisfano certi requisiti che possono essere determinati dall'ordine stesso, per esempio "ordine più vecchio", "x pips di profitto", "break even", "x pips di perdita", ecc. e il numero magico è usato solo per distinguere i propri trade e quelli di EA completamente diversi.

Si potrebbe fare trading (continuare a fare trading) con questo sistema manualmente se si guardasse solo il grafico con gli ordini già aperti e *senza* avere gli ID scritti sopra?

Cosa c'è nel tuo sistema che ti serve un singolo ID di un singolo ordine solo per decidere se l'ordine deve essere chiuso? E perché non potete semplicemente usare il numero del ticket stesso se ogni ordine è comunque unico?

Saperne di più permetterebbe di fare un passo indietro e vedere il tutto da un'altra angolazione e forse trovare una soluzione molto più elegante e facile.

 
7bit:

Ma questo non garantirebbe di non avere mai due ordini con lo stesso numero unico? I tuoi "gruppi" sarebbero composti da un solo trade in ogni gruppo? Ho capito bene?

Hai spiegato quello che vuoi fare (array di MN, ecc.) in base a quello che vedi come l'unica soluzione al problema ma non hai ancora spiegato il problema stesso, come il trading system dovrebbe decidere quali ordini chiudere e quali mantenere. Come funzionerebbe se si volesse operare manualmente, forse c'è un sistema di trading pubblicamente disponibile che sia abbastanza simile a questo per spiegare il concetto, per rendere chiaro che tipo di sistema è questo?

Per esempio "di solito" (molto spesso) si cerca di chiudere gli ordini che soddisfano certi requisiti che possono essere determinati dall'ordine stesso, per esempio "ordine più vecchio", "x pips di profitto", "break even", "x pips di perdita", ecc. e il numero magico serve solo per distinguere i propri trade e quelli di EA completamente diversi.

Si potrebbe fare trading (continuare a fare trading) con questo sistema manualmente se si guardasse solo il grafico con gli ordini già aperti e *senza* avere gli ID scritti sopra?

Cosa c'è nel tuo sistema che ti serve un singolo ID di un singolo ordine solo per decidere se l'ordine deve essere chiuso? E perché non potete semplicemente usare il numero del ticket stesso se ogni ordine è comunque unico?

Saperne di più permetterebbe di fare un passo indietro e vedere il tutto da un'altra angolazione e forse trovare una soluzione molto più elegante e facile.


"Ma questo non garantirebbe di non avere mai due ordini con lo stesso numero unico"

Sì, è possibile avere 2 o più ordini con numero unico. Fate l'incremento dopo gli ordini di gruppo

 

Jon questa funzione emette numeri unici

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