¿Cómo crear una matriz de números mágicos? - página 2

 
7bit:
Por favor, describa a grandes rasgos lo que hará su EA. cuántos tipos de órdenes diferentes hay que gestionar por separado. Tal vez su problema no es un problema en absoluto si sabemos lo que realmente está tratando de lograr.


Quiero tener una etiqueta única como número mágico cuando coloque una orden. No hay un número fijo de pedidos.

Cada nuevo pedido debe ser tratado como un nuevo grupo y ser gestionado por separado.

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

En lugar de fijar 12345, me gustaría que el número mágico se incrementara con cada nuevo pedido como 1, luego el siguiente pedido 2, luego 3, luego 4, etc.

Además el OrderSend está en una función que no hace un bucle. ¿Cómo hacer algo así?

¿Algo como un array[i] dinámico?

Cuando intente cerrar, podría recorrer OrdersTotal() y cada array[i] de números mágicos únicos? Y cerraría aquellos en el mismo grupo cuando se cumpla la condición.

 
7bit:
Por favor, no recomiende semejantes tonterías. El número mágico no está pensado para almacenar valores que ya están contenidos en la propia orden.

¿puede mostrarme por favor dónde está contenido exactamente en la orden Period(); ?
 
qjol:
¿puede mostrarme dónde está exactamente la orden Period(); ?

No lo es.

En mi opinión, si no piensas usar otros expertos con este, y no piensas regalarlo, entonces puedes usar el Número Mágico para almacenar lo que quieras...

 
qjol:

¿podría mostrarme dónde está exactamente la orden Period();?
¿Qué es OrderPeriod()?
 
gordon:

No lo es.

IMHO, si no planeas usar otros expertos con este, y no planeas regalarlo, entonces puedes usar el Número Mágico para almacenar lo que quieras...


Tal vez una función para almacenar el número mágico creciente

Antes de cada OrderSend, ejecutar la función para saber qué número mágico se va a asignar a continuación.

¿Alguna idea de cómo hacer una función como esta?

 
johnnybegoode:

¿Alguna idea de cómo hacer una función como esta?

Hay un ejemplo relativamente complejo en este artículo -> http://mqlmagazine.com/mql-programming/object-oriented-trading-an-oop-approach-to-trading/.
 
gordon:
Hay un ejemplo relativamente complejo en este artículo -> http://mqlmagazine.com/mql-programming/object-oriented-trading-an-oop-approach-to-trading/.


Gracias.
Eso es realmente complejo, ¿algún método más fácil?
 
johnnybegoode:


Me gustaría que el número mágico se incrementara con cada nuevo pedido, como el 1, luego el siguiente 2, luego el 3, luego el 4, etc.

¿Pero esto no garantizaría que nunca tuvieras dos órdenes con el mismo número único? ¿Sus "grupos" consistirían en una sola operación en cada grupo? ¿Te he entendido bien?

Has explicado lo que quieres hacer (matriz de MN, etc.) en base a lo que ves como única solución al problema pero sigues sin explicar el problema en sí, cómo se supone que el sistema de trading decide qué órdenes cerrar y cuáles mantener. ¿Cómo funcionaría si uno quisiera operar esto manualmente, tal vez hay un sistema de comercio disponible públicamente que es lo suficientemente similar a él para explicar el concepto, para dejar claro qué tipo de sistema es este?

Por ejemplo, "normalmente" (muy a menudo) uno intenta cerrar órdenes que cumplen ciertos requisitos que se pueden determinar a partir de la propia orden, por ejemplo "orden más antigua", "x pips de beneficio", "break even", "x pips de pérdida", etc. y el número mágico sólo se utiliza para diferenciar las propias operaciones y las operaciones de EAs completamente diferentes.

¿Podría uno operar (seguir operando) este sistema manualmente si sólo mirara el gráfico con las órdenes ya abiertas en él y *sin* tener IDs escritas en ellas?

¿Qué hay en su sistema que necesita un solo ID de una sola orden para decidir si la orden debe ser cerrada? ¿Y por qué no se puede utilizar simplemente el número de entrada si cada orden es única de todos modos?

Saber más sobre esto permitiría dar un paso atrás y ver todo el asunto desde un ángulo diferente y tal vez encontrar una solución mucho más elegante y más fácil.

 
7bit:

¿Pero esto no garantizaría que nunca tuvieras dos órdenes con el mismo número único? ¿Sus "grupos" consistirían en una sola operación en cada grupo? ¿Te he entendido bien?

Has explicado lo que quieres hacer (matriz de MN, etc.) en base a lo que ves como única solución al problema pero sigues sin explicar el problema en sí, cómo se supone que el sistema de trading decide qué órdenes cerrar y cuáles mantener. ¿Cómo funcionaría si uno quisiera operar esto manualmente, tal vez hay un sistema de comercio disponible públicamente que es lo suficientemente similar a él para explicar el concepto, para dejar claro qué tipo de sistema es este?

Por ejemplo, "normalmente" (muy a menudo) uno trata de cerrar órdenes que cumplen ciertos requisitos que se pueden determinar desde la propia orden, por ejemplo "orden más antigua", "x pips de beneficio", "break even", "x pips de pérdida", etc. y el número mágico sólo se utiliza para diferenciar las operaciones propias y las de EAs completamente diferentes.

¿Podría uno operar (seguir operando) este sistema manualmente si sólo mirara el gráfico con las órdenes ya abiertas en él y *sin* tener IDs escritas en ellas?

¿Qué hay en su sistema que necesita un solo ID de una sola orden para decidir si la orden debe ser cerrada? ¿Y por qué no se puede utilizar simplemente el número de entrada si cada orden es única de todos modos?

Saber más sobre esto permitiría dar un paso atrás y ver todo el asunto desde un ángulo diferente y quizás encontrar una solución mucho más elegante y fácil.


"Pero esto no garantizaría que nunca se tienen dos pedidos con el mismo número único"

Sí es posible tener 2 o más pedidos con un número único. Haga el incremento después de los pedidos del grupo

 

Jon esta función emite números únicos

//+------------------------------------------------------------------+
//| 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);
}
Razón de la queja: