Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1311

 
Sprut 185:

Obrigado pela vossa participação.

Infelizmente a função ObjectSet*** não era adequada para a minha tarefa.

Eu próprio resolvi o problema usando a função OnDeinit().

Agora tudo funciona como deveria.

Mas na sua pergunta há tais palavras

Sprut 185:

Por favor, ajude-me com um problema!

Estou apenas a aprender a escrever código e, neste contexto, peço-vos que sejam indulgentes com o meu analfabetismo.

Quero ajudá-lo a compreender a funçãoOnChartEvent que ao alterar o período de tempo, ou alterar as definições no menu indicador, actualizará os objectos gráficos no gráfico.

Compreendo que é necessário apagar primeiro os objectos gráficos e depois criá-los novamente. Masse os objectos foram apagados, não há acesso às suas propriedades e depois como recriar estes objectos....... Ou talvez eu não o entenda? Ou talvez haja outra forma - actualizar objectos gráficos no gráfico?

Por favor, escreva um exemplo com comentários sobre como fazê-lo.

E para não apagar, basta alterar a propriedade do objecto requerido por uma das funções do ObjectSet****.

Quanto a apagar todos os objectos........., deve ter muito cuidado ao apagar todos os objectos indiscriminadamente... Entre os objectos no gráfico, podem existir objectos criados manualmente ou por outro Expert Advisor/indicador. Se gosta de apagar objectos, deve prestar atenção à remoção por prefixo. É verdade, é preciso criar com o prefixo. Não é difícil.

 
O que é o resultado de

iSpread ?


Vejo que é mais ou menos semelhante ao valor de spread se consultar as barras em Symbols/Bars no terminal.

É claro que estes valores não correspondem aos valores reais dados por SYMBOL_SPREAD.

Porquê uma tal diferença? E o que é uma propagação tão irreal mostrada usandoiSpread?

 
Aleksei Skrypnev:
Que resultado mostra a função

iSpread ?


Vejo que é mais ou menos semelhante ao valor de spread se consultar as barras em Symbols/Bars no terminal.

É claro que estes valores não correspondem aos valores reais dados por SYMBOL_SPREAD.

Porquê uma tal diferença? E o que é uma propagação tão irreal mostrada usandoiSpread?

Dispersão mínima por barra.

Adicionei um buffer para verificação - retira dados da matriz de indicadores spread[] e mostra um comentário para a barra actual - o resultado do iSpread


Como o fazer aqui:Controlo de propagação

Spread Control
Spread Control
  • www.mql5.com
Просмотр спреда
Arquivos anexados:
 

Saudações!

Pode dizer-me por que razão a variável "ATR14" não muda e como posso vê-la mudar?

void OnTick()
{

double ATR14=iATR(NULL,PERIOD_CURRENT,14);

Comment(
 
      "ATR14==: ",ATR14,"\n");
}
 
Alexey Belyakov:

Saudações!

Pode dizer-me por que razão a variável "ATR14" não muda? Como posso vê-la mudar?

Porque na MQL5 o manípulo indicador (a propósito, tem o tipo int) é criado UMA VEZ e é feito no OnInit.

E para a recepção de dados a partir do indicador é utilizado o CopyBuffer.

 
Vladimir Karputov:

Porque na MQL5 o manípulo indicador (e a propósito, tem o tipo int) é criado UMA VEZ e é feito no OnInit.

E para a recepção de dados a partir do indicador é utilizado o CopyBuffer.

Ok, vamos supor.

double  ATR14m[];   

int ATR14;

int OnInit()
  {
ATR14=iATR(NULL,PERIOD_CURRENT,14);
  return(0);   
  }
  
  
void OnDeinit(const int reason)
  {
//---  
  }


void OnTick()
{
CopyBuffer(ATR14,0,0,3,ATR14m);



Comment(

      "ATR14==: ",ATR14,"\n");

}



Nada mudou.

 
Alexey Belyakov:

Saudações!

Pode dizer-me por que razão a variável "ATR14" não muda? E como posso vê-la mudar?

aqui está umexampleһttp://www.mql5.com/ru/docs/indicators/iatr

Документация по MQL5: Технические индикаторы / iATR
Документация по MQL5: Технические индикаторы / iATR
  • www.mql5.com
iATR - Технические индикаторы - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Belyakov:

Bem, digamos apenas

Nada mudou.

Está quase a conseguir. Recomendo que se chame à matriz 'array_atr' em vez de 'ATR14m'. Então verá o seu erro em chamar'Comentário' mais cedo.

 
Vladimir Karputov:

Está quase a acertar. Recomendo que se chame à matriz 'array_atr' em vez de 'ATR14m'. Então verá o seu erro na chamada'Comentar' mais cedo.

double  array_atr[];   

int ATR14;

int OnInit()
  {
ATR14=iATR(NULL,PERIOD_CURRENT,14);
  return(0);   
  }
   
void OnDeinit(const int reason)
  {
//---  
  }

void OnTick()
{


CopyBuffer(ATR14,0,0,3,array_atr);

Comment(

      "ATR14==: ",array_atr,"\n");

}

Alterou-o e obtém erro: " 'array_atr' - acesso inválido ao array "


 
Vladimir Karputov:

Está quase a acertar. Recomendo que se chame à matriz 'array_atr' em vez de 'ATR14m'. Então verá o seu erro em chamar'Comentário' mais cedo.

Acha que nomear o bacio de uma criança como vaso nocturno vai mudar alguma coisa?

Há ali um tal mal-entendido que nem me atrevo a tentar sugerir algo... É preciso ler a documentação 50 vezes para a compreender...