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

 
Sayberix:

Estou a lê-lo. Apenas ainda não chegou lá, acho eu. Não creio que seja fácil passar por uma referência pdf de 28 MB. Ou, dito de outra forma - nem todos os paroquianos conhecem toda a Bíblia, apesar de serem crentes devotos.

Tenho outra pergunta, por favor aconselhar - se não for difícil:

ao executar código no visualizador de estratégias:

1. o programa entra num loop infinito;

2. os resultados da execução são diferentes:

sem pontos de ruptura:

Com ponto de parada na impressão:


Tudo feito sobre a depuração de dados históricos.

Está constantemente a aumentar a variável. O que pensa: quando é que o tamanho da variável irá ultrapassar os seus limites?

 
Vladimir Karputov:

Está constantemente a aumentar o tamanho da variável. O que pensa: quando é que o tamanho da variável irá ultrapassar os seus limites?

Penso que 10 iterações do ulong deveriam ter sido suficientes. A questão então é:

1. porque é que o laço não se parte? e

2. Porque é que os resultados do tempo de iteração não são mostrados?


Será porque a depuração foi feita com base em dados históricos?

 
Sayberix:

Penso que para 10 iterações o ulong deveria ter sido suficiente. A questão então é:

1. porque é que o laço não se parte? e

2. Porque é que os resultados do tempo de iteração não são mostrados?


É por causa da depuração de dados históricos?

Tem uma variável declarada a nível de programa global - está constantemente a aumentá-la.

 
Oh, estou a ver... A Iteração demora menos de um milissegundo.
 
Vladimir Karputov:

Tem uma variável declarada ao nível do programa global - está constantemente a aumentá-la.

Ainda não compreendo o que a variável global tem a ver com ela. O programa em si é limitado a um loop: "for(int i=1; i<=10; i++)" ?

Ou talvez eu não compreenda alguma coisa, por favor explique.

 
Sayberix:

Ainda não compreendo o que a variável global tem a ver com ela. O programa em si é limitado a um loop: "for(int i=1; i<=10; i++)" ?

Ou talvez eu não compreenda alguma coisa, por favor explique.

Remover variáveis

ulong count, raschet = 1;

fora do âmbito global.


Em cada tick, incrementa-se repetidamente a variável raschet. E no tique seguinte, CONTINUA a aumentá-lo várias vezes. Algumas carraças e a variávelraschet está fora de alcance. Eventualmente imprime os valores da variável, mas não olhe para a impressão por alguma razão.

 
Vladimir Karputov:

Remover as variáveis

a partir do âmbito global.


Em cada tick, incrementa-se a variável raschet repetidamente. E no tick seguinte, CONTINUAR a incrementá-lo repetidamente. Algumas carraças e a variávelraschet está fora de alcance. Finalmente imprime-se os valores da variável, mas não se olha para a impressão por alguma razão.

Obrigado, eu percebo. Acabei de ficar confuso, pensando que o regresso pára de todo o programa, enquanto que este apenas interrompe a sua execução no tick actual. Em vez de "devolver;" coloquei"ExpertRemove();".

 

Pode dizer-me neste código:

//+------------------------------------------------------------------+
//|                                                          env.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property indicator_buffers 2

int envHandle;
double upperEnv[], lowerEnv[];

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   envHandle = iCustom(_Symbol,_Period,"Examples\\Envelopes",3,0,MODE_LWMA,PRICE_OPEN,0.03);
   if(envHandle<0)
     {
      Alert("Ошибка при создании индикаторов - номер ошибки: ",GetLastError(),"!!");
      return(INIT_FAILED);
     }
   SetIndexBuffer(0,upperEnv,INDICATOR_DATA);
   SetIndexBuffer(1,lowerEnv,INDICATOR_DATA);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Deinitialization function of the expert                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   IndicatorRelease(envHandle);
  }
//+------------------------------------------------------------------+
//| "Tick" event handler function                                    |
//+------------------------------------------------------------------+
void OnTick()
  {

   ArraySetAsSeries(upperEnv, true);
   ArraySetAsSeries(lowerEnv, true);

   if((CopyBuffer(envHandle,0,0,3,upperEnv)<0) || CopyBuffer(envHandle,1,0,3,lowerEnv)<0)
      Alert("Ошибка копирования буферов индикатора Envelopes - номер ошибки:",GetLastError(),"!!");

   double   upEnv = upperEnv[0];
   double   lowEnv = lowerEnv[0];
  }
//+------------------------------------------------------------------+

Como posso obter valores de preços constantemente actualizados das linhas de Envelopes em variáveis upEnv e lowEnv? Desenha o indicador, mas os valores do indicador nas variáveis são actualizados 2 vezes e é só isso.

 
Sayberix:

Pode dizer-me neste código:

Como posso obter valores de preços constantemente actualizados das linhas de Envelopes em variáveis upEnv e lowEnv? Desenha o indicador, mas os valores do indicador nas variáveis são actualizados 2 vezes e é só isso.

Antes de mais, decida: quer escrever um Consultor Especialista ou um indicador? (Agora tem um código misto - indicador e Expert Advisor estão misturados) - ou seja, o código não vai funcionar.

Dica: Use o MQL Wizard para criar um modelo.

 
Vladimir Karputov:

Decida-se primeiro: quer escrever um EA ou um indicador? (Neste momento o seu código é uma confusão - tanto o indicador como o Expert Advisor estão misturados) - ou seja, o código é impraticável.

Dica: Use o MQL Wizard para criar um modelo.

Já o experimentei. Mas gera aulas em Wizard. Gostaria de pelo menos compreender o código de uma forma simples - o código eu compreendo pelo menos um pouco. Pode aconselhar como corrigir o código a fim de obter valores indicadores na EA?