Gerador de identificação único para um indicador particular - página 4

 
gchrmt4:
Não sei qual versão do MT4 você está usando, mas na v616 em meu computador, WindowFind() retorna -1 durante o OnInit(). A documentação sempre disse "WindowFind() retorna -1 se o indicador personalizado busca a si mesmo quando a função init() funciona".


minha versão é 610.

oh meu Deus... cada atualização parece ser mais ruim e mais ruim... não ficando melhor.

eu tinha um indicador FFcalendar.

eu tinha consertado com a versão 604... e funcionando bem.

quando atualizei para a 610... e compilei-o novamente... tornou-se novamente um erro...

então desisti... e compilei novamente com a versão 509... hahaha (porque minha versão 604 se foi)


oops desculpe... você está certo sobre o WindowsFind retun -1 .

ele só mostra quando depois que eu anexar aquele indi... então eu mudo o TF... mas o resultado ainda é único

tag

 
Comentários que não se relacionam com este tópico, foram movidos para "Níveis de fibra".
 

Eu sei que este posto é MUITO antigo, mas aqui está como eu consigo resolver o problema do nome da instância. Eu uso uma combinação de GetTickCount() juntamente com o armazenamento global de variáveis de terminal. Isto também funciona através de cargas de instância.

const string _uniqueSeedVarName = "MyVar";
string GetUniqueInstanceName(const string baseName)
{
   uint seed = 1;

   // See if our last stored unique seed value exists
   if (GlobalVariableCheck(_uniqueSeedVarName))
   {
      // It does, so get it
      seed = (uint)GlobalVariableGet(_uniqueSeedVarName);

      // Do some boundary checking and ensure the user didn't muck with the value
      // If we're okay, increment the seed by one      
      if (seed > 0 && seed < UINT_MAX)
         seed = seed + 1;
      else
         // The seed has been corrupted by the user or is too large; reset to current tick count
         seed = GetTickCount();   
   }
   else
      // First time in; initialize the seed to the current tick count
      seed = GetTickCount();

   // Store the value in global terminal variables
   // The user DOES have access to this value, so the handling above should account for any changes the user might make
   GlobalVariableSet(_uniqueSeedVarName, seed);

   // Initialize the random generator
   MathSrand(seed);
  
   // Create a unique instance name in the format of "[BaseName][Random1][Random2]"
   return StringFormat("%s%s%s", baseName, IntegerToString(MathRand()), IntegerToString(MathRand()));
}


E depois basta chamá-lo no OnInit() da seguinte forma:

   Print(StringFormat("Indicator Id: %s", GetUniqueInstanceName("Sandbox")));


Até o momento, parece funcionar corretamente.

 

Muito obrigado. Este funcionamento resolveu um problema realmente grande para mim.


cdxadmin:

Eu sei que este posto é MUITO antigo, mas aqui está como eu realizo o problema exclusivo do nome da instância. Eu uso uma combinação de GetTickCount() juntamente com o armazenamento global de variáveis de terminal. Isto também funciona através de cargas de instância.


E depois basta chamá-lo no OnInit() da seguinte forma:


Até o momento, parece funcionar corretamente.