Erros, bugs, perguntas - página 1241

 
barabashkakvn:

A pesquisa de actualização é accionada quando se liga ao servidor MetaQuotes-Demo. É possível nos seguintes casos:

  1. Mudar uma conta de negociação de alguma conta para uma conta de negociação aberta em MetaQuotes-Demo;
  2. Ao reiniciar o terminal.
Obrigado.
 
joo:

:O

Não, o erro já não aparece.

Schrodinger andava a passear pela sala à procura de um gatinho estragado, mas estava sentado numa caixa, nem morto nem vivo. )))

 
tol64:

Schrodinger andava a passear pela sala à procura de um gatinho mucado, mas o gatinho estava sentado numa caixa, nem morto nem vivo. )))

Muito estranho, de facto. O que é que vai parar de trabalhar da próxima vez?
 
joo:
Muito estranho, de facto. O que deixará de funcionar da próxima vez?
Não há como dizer. Teremos de o verificar. )
 
joo:

Coloquei as impressões no lugar - o erro desapareceu...

O efeito observador na mecânica quântica é algo...

Só reproduzimos a sua situação quando introduzimos NaN na expressão.
 
Renat:
Só reproduzimos a sua situação quando introduzimos NaN na expressão.

então as fábulas funcionam correctamente ou não?

 
joo:

as fábulas estão a funcionar correctamente ou não?

Certo.
 

Boa tarde, estou a pedir ajuda para implementar o que penso ser um esquema simples.

Tenho uma EA que funciona bem com um símbolo. Quero "afinar" para que funcione para vários símbolos ao mesmo tempo. Para tal, preciso de criar adequadamente uma matriz de dados, cujos membros poderiam ser acedidos por todas as instâncias da EA anexadas a vários símbolos diferentes. Ou seja, existe apenas um conjunto de dados, mas existem múltiplas instâncias de EAs. Cada instância da EA pode ler e modificar os membros da matriz.

Segundo entendi, é necessário criar uma matriz com membros estáticos (static).

Um exemplo simples: contar o número total de carraças em todos os gráficos, onde as EAs estão anexadas. Vamos anexar a EA a 2 gráficos e no evento OnTick() aumentar o contador em 1. Para simplificar, tentei utilizar um contador de variáveis estáticas em vez da matriz. Infelizmente, cada EA trabalha apenas com o seu contador, o contador não é "comum". Resultado:

símbolo1, tick1 : contador = 0;

símbolo1, tick2 : contador = 1;

símbolo2, tick1 : contador = 0; - aqui contador esperado = 2

Por exemplo, criei uma classe simples com um balcão:

//+------------------------------------------------------------------+
//|                                                   TestStatic.mqh |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class TestStatic
  {
private:
static int counter;
public:
                     TestStatic();
                    ~TestStatic();

static void IncreaseCounter();
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
TestStatic::TestStatic()
  {
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
TestStatic::~TestStatic()
  {
  }
//+------------------------------------------------------------------+
int TestStatic::counter=0;
TestStatic::IncreaseCounter()
  {
   Print("Symbol: "+_Symbol +", counter: "+ TestStatic::counter);
   TestStatic::counter++;
  };

Aqui está o código EA:

//+------------------------------------------------------------------+
//|                                                Exp_testMulti.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict
#include <TestStatic.mqh>

static string tickCounter[2][2];

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
  
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   TestStatic::IncreaseCounter();
    
  }
//+------------------------------------------------------------------+

Por favor ajude-me a compreendê-lo, muito obrigado de antemão!

 
VangoghFX:

Boa tarde, estou a pedir ajuda para implementar o que penso ser um esquema simples.

Tenho uma EA que funciona bem com um símbolo. Quero "afinar" para que funcione para vários símbolos ao mesmo tempo. Para tal, preciso de criar adequadamente uma matriz de dados, cujos membros poderiam ser acedidos por todas as instâncias da EA anexadas a vários símbolos diferentes. Ou seja, existe apenas um conjunto de dados, mas existem múltiplas instâncias da EA. Cada instância da EA pode ler e modificar os membros da matriz.

Segundo entendi, é necessário criar uma matriz com membros estáticos (static).

Um exemplo simples: contar o número total de carraças em todos os gráficos, onde as EAs estão anexadas. Vamos anexar a EA a 2 gráficos e no evento OnTick() aumentar o contador em 1. Para simplificar, tentei utilizar um contador de variáveis estáticas em vez da matriz. Infelizmente, cada EA trabalha apenas com o seu contador, o contador não é "comum". Resultado:

símbolo1, tick1 : contador = 0;

símbolo1, tick2 : contador = 1;

símbolo2, tick1 : contador = 0; - aqui contador esperado = 2

Por exemplo, criei uma classe simples com um balcão:

Aqui está o código EA:

Por favor ajude-me a compreendê-lo, muito obrigado de antemão!

Tarde. Especificamente, para implementar o seu exemplo com carraças, variáveis globais de terminal (foi recentemente publicado um artigo sobre este tópico). Acerca de uma tal matriz... Não tenho a certeza, devia experimentar. Mas posso sugerir outra variante. Num consultor especializado, prescreva os símbolos necessários para o trabalho e faça, como sugeriu, um conjunto estático/global de dados necessários. E deixar o laço da EA atravessar todos os símbolos necessários.
 
Tapochun:
Boa tarde. Especificamente para o seu exemplo de carraças, as variáveis terminais globais estariam bem (houve um artigo recente sobre isto). Acerca de uma tal matriz... Não tenho a certeza, tenho de tentar. Mas posso sugerir outra variante. Num consultor especializado, prescreva os símbolos necessários para o trabalho e faça, como sugeriu, um conjunto estático/global de dados necessários. E deixar o Expert Advisor passar por todos os símbolos necessários.

Muito obrigado pela sua resposta.

Utilizei o exemplo com carraças como o mais simples e ilustrativo para descrever a ideia geral. O Expert Advisor utiliza algoritmos mais complexos.

Não gosto da variante em que os símbolos N são escritos numa EA, porque é demasiado pesada e difícil de usar. Há vários artigos sobre este tópico no portal, e já os vi: mas não gosto de grandes loops, arrays, cópia de dados, muitos pacotes de variáveis para cada símbolo, etc. Quero utilizar uma abordagem mais simples e eficiente, na minha opinião: um código de EA para cada símbolo (o símbolo é determinado pelo gráfico, ao qual a EA está ligada) - e cada cópia da EA funciona em paralelo com outras. Mas neste caso, a informação analítica, que é necessária para a tomada de decisões, é partilhada entre si.

A ideia de ter variáveis globais visitou-me, mas é mais uma abordagem processual, e eu quero utilizar todas as vantagens do OOP. Pretendo escrever uma classe separada que passaria os dados analíticos necessários aos Consultores Especialistas sob a forma de uma matriz e deixá-los-ia tomar decisões comerciais.