Como criar uma matriz de números mágicos? - página 2

 
7bit:
Por favor, descreva aproximadamente o que sua EA fará. quantos tipos diferentes de ordens que precisam ser administradas separadamente existem. Talvez seu problema não seja de todo um problema se soubermos o que você está realmente tentando alcançar.


Eu quero ter uma etiqueta única como número mágico quando eu fizer um pedido. Sem número fixo de pedidos.

Cada novo pedido deve ser tratado como um novo grupo e ser administrado separadamente.

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

Em vez de fixar 12345, eu gostaria que o número mágico fosse incrementado a cada nova ordem como 1, depois a próxima ordem 2, depois 3, depois 4, etc.

Além disso, o OrderSend está em uma função que não faz loop. Como fazer algo desse tipo?

Às vezes, como uma matriz dinâmica[i] ???

Quando eu tento fechar, eu poderia passar por OrderTotal() e cada matriz de números mágicos únicos[i] ???? E fecharia aqueles do mesmo grupo quando a condição fosse atendida.

 
7bit:
por favor, não recomende tais disparates. O número mágico não se destina a armazenar valores que já estão contidos na própria ordem.

Por favor, mostre-me onde exatamente está contido no período do pedido(); ?
 
qjol:
pode me mostrar onde exatamente está contido no período do pedido(); ?

Não está.

IMHO, se você não planeja usar outros especialistas com este, e não planeja dá-lo, então você pode usar o Número Mágico para armazenar o que você quiser...

 
qjol:

pode me mostrar onde exatamente está contido no período de pedido(); ?
O que é OrderPeriod()???
 
gordon:

Não é.

IMHO, se você não planeja usar outros especialistas com este, e não planeja dá-lo, então você pode usar o Número Mágico para armazenar o que você quiser...


Talvez uma função para armazenar o número mágico de incremento

Antes de cada OrderSend, execute a função para descobrir qual número mágico deve ser atribuído em seguida.

Alguma idéia de como fazer uma função como esta?

 
johnnybegoode:

Alguma idéia de como fazer uma função como esta?

Há um exemplo relativamente complexo neste artigo -> http://mqlmagazine.com/mql-programming/object-oriented-trading-an-oop-approach-to-trading/.
 
gordon:
Há um exemplo relativamente complexo neste artigo -> http://mqlmagazine.com/mql-programming/object-oriented-trading-an-oop-approach-to-trading/.


Obrigado!
Isso é realmente complexo, algum método mais fácil?
 
johnnybegoode:


Eu gostaria que o número mágico fosse incrementado a cada nova ordem como 1, depois a próxima ordem 2, depois 3, depois 4, etc.

Mas isso não garantiria que você nunca teria duas encomendas com o mesmo número único? Seus "grupos" consistiriam em apenas uma negociação em cada grupo? Eu o entendi corretamente?

Você explicou o que quer fazer (matriz de MN, etc.) com base no que você vê como a única solução para o problema, mas ainda não explicou o problema em si, como o sistema de negociação deve decidir quais ordens fechar e quais devem ser mantidas. Como funcionaria se alguém quisesse negociar isto manualmente, talvez exista um sistema de negociação disponível publicamente que seja suficientemente similar a ele para explicar o conceito, para deixar claro que tipo de sistema é este?

Por exemplo, "geralmente" (muito freqüentemente) tenta-se fechar ordens que preenchem certos requisitos que podem ser determinados a partir da própria ordem, por exemplo, "ordem mais antiga", "lucro x pips", "break even", "perda x pips", etc. e o número mágico é usado apenas para distinguir as próprias ordens e as ordens de ordens completamente diferentes.

Seria possível negociar (continuar negociando) este sistema manualmente se apenas se olhasse o gráfico com as ordens já abertas e *sem* ter as identificações escritas?

O que em seu sistema precisa de uma única identificação de uma única ordem apenas para decidir se a ordem deve ser fechada? E por que você não pode simplesmente usar o próprio número do bilhete se cada pedido é único de qualquer forma?

Saber mais sobre isto permitiria retroceder e ver tudo de um ângulo diferente e talvez encontrar uma solução muito mais elegante e fácil.

 
7bit:

Mas isso não garantiria que você nunca teria duas encomendas com o mesmo número único? Seus "grupos" consistiriam em apenas uma negociação em cada grupo? Eu o entendi corretamente?

Você explicou o que quer fazer (matriz de MN, etc.) com base no que você vê como a única solução para o problema, mas ainda não explicou o problema em si, como o sistema de negociação deve decidir quais ordens fechar e quais devem ser mantidas. Como funcionaria se alguém quisesse negociar isto manualmente, talvez exista um sistema de negociação disponível publicamente que seja suficientemente similar a ele para explicar o conceito, para deixar claro que tipo de sistema é este?

Por exemplo, "geralmente" (muito freqüentemente) tenta-se fechar ordens que preenchem certos requisitos que podem ser determinados a partir da própria ordem, por exemplo, "ordem mais antiga", "lucro x pips", "break even", "perda x pips", etc. e o número mágico é usado apenas para distinguir as próprias ordens e as ordens de ordens completamente diferentes.

Seria possível negociar (continuar negociando) este sistema manualmente se apenas se olhasse o gráfico com as ordens já abertas e *sem* ter as identificações escritas?

O que em seu sistema precisa de um único ID de uma única ordem apenas para decidir se a ordem deve ser fechada? E por que você não pode simplesmente usar o próprio número do bilhete se cada pedido é único de qualquer forma?

Saber mais sobre isto permitiria retroceder e ver tudo de um ângulo diferente e talvez encontrar uma solução muito mais elegante e fácil.


"Mas isto não garantiria que você nunca teria duas encomendas com o mesmo número único".

Sim, é possível ter 2 ou mais pedidos com número único. Faça o incremento após as ordens do grupo

 

Jon esta função 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);
}