Descobrir número mágico

 

Boa noite.

Usando a função ChartGetString é possivel saber o nome do expert anexado a um gráfico. Já que o número mágico não é uma propriedade de um EA, teria como obter os parâmetros de um EA anexado, para eu saber o número mágico dele?

Pensei em setar o número mágico nas variáveis globais, para obter essa informação, mas se houver outra forma, seria útil saber.

 
Samuel Manoel De Souza:

Boa noite.

Usando a função ChartGetString é possivel saber o nome do expert anexado a um gráfico. Já que o número mágico não é uma propriedade de um EA, teria como obter os parâmetros de um EA anexado, para eu saber o número mágico dele?

Pensei em setar o número mágico nas variáveis globais, para obter essa informação, mas se houver outra forma, seria útil saber.

Olá Samuel,

se a intenção é setar o número mágico porque não usar o input?

input long                  inpMagicNumber = 200502;        // Magic Number
 
Rogerio Giannetti Torres:

Olá Samuel,

se a intenção é setar o número mágico porque não usar o input?

Não. A ideia é tornar um EA consciente da existência de outros EAs no terminal.

 
No caso quero saber se um negócio foi realizado pelo mesmo EA, anexado em outro gráfico, mesmo que o EA anexado em outro gráfico esteja usando número mágico diferente.
 
Samuel Manoel De Souza:
No caso quero saber se um negócio foi realizado pelo mesmo EA, anexado em outro gráfico, mesmo que o EA anexado em outro gráfico esteja usando número mágico diferente.

Entendi, não tem nada que associe o MagicNumber ao nome do EA, tem que buscar uma solução, eu  gravei arquivos na COMMON/FILES para trocar msg entre as instâncias que estavam rodando o EA.

 
A partir do momento que ele criou uma ordem vc consegue saber o número consultando a ordem não importa o ativo e nem o dia
Com isso vc faz um catálogo do EA x Magic number x ativo
 
Samuel Manoel De Souza:
No caso quero saber se um negócio foi realizado pelo mesmo EA, anexado em outro gráfico, mesmo que o EA anexado em outro gráfico esteja usando número mágico diferente.

Caso não seja necessário anexar o mesmo EA em mais de 1 gráfico do mesmo símbolo e timeframe, utilizando configurações diferentes, então não é preciso deixar o magic number nos parâmetros de entrada. Define apenas internamente como no exemplo abaixo:

//=== Global variables
ulong MAGICNUM;

. . .

//+--------------------------------------------------------------------------------------------------------------------+
//| Expert initialization function                                                                                     |
//+--------------------------------------------------------------------------------------------------------------------+
int OnInit()
  {
   //--- Inicializar objeto para o controle correto das operações
   MAGICNUM = MagicNumberTF(_Period);
   trade.SetExpertMagicNumber(MAGICNUM);

. . .

//+--------------------------------------------------------------------------------------------------------------------+
//| Magic number timeframes function                                                                                   |
//+--------------------------------------------------------------------------------------------------------------------+
int MagicNumberTF(int CodeTF)
  {
   //--- Local variable
   int ResMN;

   switch(CodeTF)
     {
      case PERIOD_M1:    ResMN = 7001;   break;
      case PERIOD_M2:    ResMN = 7002;   break;
      case PERIOD_M3:    ResMN = 7003;   break;
      case PERIOD_M4:    ResMN = 7004;   break;
      case PERIOD_M5:    ResMN = 7005;   break;
      case PERIOD_M6:    ResMN = 7006;   break;
      case PERIOD_M10:   ResMN = 7007;   break;
      case PERIOD_M12:   ResMN = 7008;   break;
      case PERIOD_M15:   ResMN = 7009;   break;
      case PERIOD_M20:   ResMN = 7010;   break;
      case PERIOD_M30:   ResMN = 7011;   break;
      case PERIOD_H1:    ResMN = 7012;   break;
      case PERIOD_H2:    ResMN = 7013;   break;
      case PERIOD_H3:    ResMN = 7014;   break;
      case PERIOD_H4:    ResMN = 7015;   break;
      case PERIOD_H6:    ResMN = 7016;   break;
      case PERIOD_H8:    ResMN = 7017;   break;
      case PERIOD_H12:   ResMN = 7018;   break;
      case PERIOD_D1:    ResMN = 7019;   break;
      case PERIOD_W1:    ResMN = 7020;   break;
      case PERIOD_MN1:   ResMN = 7021;   break;
      default:           ResMN = 0;      break;
     }
   return(ResMN);
  }



Se realmente for necessário manter o MN editável, talvez a solução com as variáveis globais seja a mais viável.

Razão: