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

 
Ovo: Não tenho certeza se você quis dizer "ensinado". Eu uso algumas delas para depuração, mas para __DATETIME__ ainda não encontrei nenhuma utilidade... Onde você pretende?

Desculpe, esqueceu que você está procurando pelo mesmo indicador várias janelas.

Vou tentar pensar em outra coisa.

===============================================

Ah-ha, já sei. Crie uma função que faça um cálculo de comprimento decente.

Depois devolva o lapso de tempo para que a função termine como seu número único.

 

TimeCurrent() é um número único.

por que você não tenta usar o tempo que você prende o indi ??? salve-o em uma etiqueta

 
Ovo:
Porque eu não tento todos os conselhos. Estou escolhendo apenas aqueles que têm bom senso.
Sugiro que você modere sua arrogância com as pessoas que tentam ajudá-lo. Tal atitude não é bem-vinda neste fórum.
 
angevoyageur:
Sugiro que você modere sua arrogância com as pessoas que tentam ajudá-lo. Tal atitude não é bem-vinda neste fórum.

Vou tentar ficar longe.
 

como você poderia dizer que minha idéia não faz sentido?

a corrente de tempo é um número único...

tente este código... anexe-o em 1 gráfico... mas período de entrada diferentee

#property strict
#property indicator_separate_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
extern int periode=4;
int OnInit()
  {
//--- indicator buffers mapping
string shortname=StringConcatenate(WindowExpertName(),"_",periode);
IndicatorShortName(shortname);
int wind=WindowFind(shortname);
string name=StringConcatenate("TIME_TAG",wind);
  if (ObjectFind(name)!=wind)
  {  ObjectCreate(name, OBJ_LABEL, wind, 0, 0);
      ObjectSet(name, OBJPROP_CORNER,2);
      ObjectSet(name, OBJPROP_XDISTANCE,2 );
      ObjectSet(name, OBJPROP_YDISTANCE,5); 
      ObjectSetText(name,DoubleToStr(TimeCurrent(),0)+DoubleToStr(wind,0) ,9,"Arial",Yellow);   
  }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
WDholic:

tempo corrente é um número único...

TimeCurrent() não é um número único sob várias circunstâncias possíveis, incluindo as seguintes:

* Você está reiniciando uma cópia do MT4 com vários gráficos existentes e vários indicadores anexados a esses gráficos. Todos eles serão inicializados ao mesmo tempo, e verão o mesmo TimeCurrent()

*Você está adicionando cópias do indicador durante um período de pouca liquidez. Dependendo do tipo de alimentação de preço de seu corretor, pode haver períodos em que não há nenhum novo tick durante 5-10 segundos, e o TimeCurrent() não muda. Se você adicionar novos indicadores durante tal período, eles terão o mesmo valor para o TimeCurrent().

 
string name=StringConcatenate("TIME_TAG",wind);
  if (ObjectFind(name)!=wind)
  {  ObjectCreate(name, OBJ_LABEL, wind, 0, 0);
      ObjectSet(name, OBJPROP_CORNER,2);
      ObjectSet(name, OBJPROP_XDISTANCE,2 );
      ObjectSet(name, OBJPROP_YDISTANCE,5); 
      ObjectSetText(name,DoubleToStr(TimeCurrent(),0)+DoubleToStr(wind,0) ,9,"Arial",Yellow);   
  }

somente adicionando etiqueta de tempo se não encontrarmos a etiqueta TIME TAG

portanto, não apague a etiqueta TIME TAG no deinit ... para que o valor nunca mude

ok... se tivermos medo se não houver nenhum tick em 5 ou 10 segundos... podemos usar o TimeLocal em vez do Time Current

 
WDholic:

somente adicionando etiqueta de tempo se não encontrarmos a etiqueta TIME TAG

portanto, não apague a etiqueta TIME TAG no deinit ... para que o valor nunca mude

ok... se tivermos medo se não houver nenhum tick em 5 ou 10 segundos... podemos usar o TimeLocal em vez do Time Current

... Há também o problema discutido acima sobre os objetos gráficos: se você adicionar o indicador a um gráfico e depois criar um modelo, todos os novos gráficos criados a partir do modelo terão o mesmo valor TIME_TAG. E o uso do objeto permite apenas uma instância do indicador por gráfico; vários indicadores terão o mesmo ID, a menos que você coloque todos os parâmetros possíveis no IndicatorShortName.

 
gchrmt4:

... Há também o problema discutido acima sobre os objetos gráficos: se você adicionar o indicador a um gráfico e depois criar um modelo, todos os novos gráficos criados a partir do modelo terão o mesmo valor TIME_TAG. E o uso do objeto permite apenas uma instância do indicador por gráfico; vários indicadores terão o mesmo ID, a menos que você coloque todos os parâmetros possíveis no IndicatorShortName.


por favor, tente...

se você colocar 5 indi em uma configuração diferente com 1 modelo.

ex... o valor de tempo é 111111000

na janela 1 mostrará 1111110001
na janela 2 mostrará 1111110002
na janela 3 mostrará 1111110003
na janela 4 mostrará 1111110004

na janela 5 mostrará 1111110005

porque eu incluo o número da janela

ObjectSetText(name,DoubleToStr(TimeCurrent(),0)+DoubleToStr(wind,0),9,"Arial",Yellow);


múltiplos indicadores terão a mesma identificação a menos que você coloque todos os parâmetros possíveis no IndicatorShortName.

Sim... será bom ser considerado.

mas eu acho que será fácil para um codificador mestre como OVO e Você

 
WDholic:

se você colocar 5 indi em um cenário diferente com 1 modelo.

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".
Razão: