Erros, bugs, perguntas - página 1954

 
Andrey Barinov:
Tragam de volta as placas de sinalização.
Obrigado pela ideia. Tinha esquecido tudo sobre eles.
 
Alexey Kozitsyn:
Obrigado pela ideia. Tinha-me esquecido completamente deles.

Isso é estranho. Receboum erro de compilação do seu código.

object of 'B' cannot be returned, copy constructor 'B::B(const B &)' not found

Sobre a descrição da função GetBMember (que em inglês simples diz para criar uma cópia). É a versão mais recente do compilador?

Quando este problema é resolvido pela adição de um construtor de cópias B, pode então devolver const B do método GetBMember.

Então o compilador jurará pela tentativa de fazer um Reset da variável devolvida:

'Reset' - call non-const method for constant object

 
Stanislav Korotky:

Isso é estranho. Estou a receber um erro de compilação do seu código.

object of 'B' cannot be returned, copy constructor 'B::B(const B &)' not found

Sobre a descrição da função GetBMember. É a versão mais recente do compilador?

Quando este problema é resolvido pela adição de um construtor de cópias B, pode então devolver const B do método GetBMember.

Então o compilador jurará quando tentar fazer uma reinicialização da variável devolvida:

'Reset' - call non-const method for constant object

Este código é apenas um exemplo escrito no browser. Estava apenas a pensar porque é que o compilador não reporta nada. Mas eu já descobri isso.

E, no meu exemplo, não há construtores de todo:)

 

Olá! 2017.08.03_18:45 GMT+3. Escrevi um ficheiro OOP SignalIchimoku.mqh . Mas quando preciso de fazer cálculos simples para LongCondition() e ShortCondition() numa função separada, a função é escrita, o compilador dá 0 erros, 0 avisos. Mas esta função não funciona, não são efectuados cálculos. O programa não abre as transacções. Verifiquei: introduzi o valor da variável Print() na função. Esta função é semelhante às funções StateStoch(int ind), ExtStateStoch(int ind) e CompareMaps() em SignalStoch.mqh , um ficheiro padrão da biblioteca padrão. Tudo funciona no ficheiro padrão, mas não funciona para mim. Porquê? Será novamente "regras simples"? Quem sabe -- digam-me. Se precisar de detalhes ou tiver alguma dúvida, -- escreva. 18:59 GMT+3.

Arquivos anexados:
 

CCanvas. Há um pequeno bug na implementação da função FillCircle. É um pixel mais estreito, como pode ser visto nesta animação GIF:

Além disso, o algoritmo é construído de forma muito pouco razoável, uma vez que cerca de 30% dos pontos são sorteados duas vezes. Isto é facilmente resolvido movendo duas linhas de código, com um aumento de velocidade de 30% em média.
Aqui está a versão original do FillCircle:

void CCanvas::FillCircle(int x,int y,int r,const uint clr)
  {
   int f   =1-r;
   int dd_x=1;
   int dd_y=-2*r;
   int dx  =0;
   int dy  =r;
//--- draw
   while(dy>=dx)
     {
      LineHorizontal(x-dx,x+dx,y-dy,clr);
      LineHorizontal(x-dx,x+dx,y+dy,clr);
      LineHorizontal(x-dy,x+dy,y-dx,clr);
      LineHorizontal(x-dy,x+dy,y+dx,clr);
      //---
      if(f>=0)
        {
         dy--;
         dd_y+=2;
         f+=dd_y;
        }
      dx++;
      dd_x+=2;
      f+=dd_x;
     }
  }

E aqui está a versão fixa:

void CCanvas::FillCircle(int x,int y,int r,const uint clr)
  {
   int f   =1-r;
   int dd_x=1;
   int dd_y=-2*r;
   int dx  =0;
   int dy  =r;
//--- draw
   while(dy>=dx)
     {
      LineHorizontal(x-dy-1,x+dy,y-dx,clr);
      LineHorizontal(x-dy-1,x+dy,y+dx,clr);
      //---
      if(f>=0)
        {
         LineHorizontal(x-dx-1,x+dx,y-dy,clr);
         LineHorizontal(x-dx-1,x+dx,y+dy,clr);
         dy--;
         dd_y+=2;
         f+=dd_y;
        }
      dx++;
      dd_x+=2;
      f+=dd_x;
     }
  }
 

Sobre a ordem pendente é eliminada (não há dinheiro suficiente)

Um trabalho válido do Conselheiro Especialista, é quando não ocorrem erros durante o seu funcionamento.

A ordem pendente é eliminada (não há dinheiro suficiente) é um erro.

A questão é que é teoricamente impossível rastrear a margem necessária para abrir uma ordem, se esta for aberta com um deslize.

Por exemplo, estabelecemos e calculámos que existe dinheiro suficiente para abrir uma ordem de paragem de venda pendente a 1.500. (Ao preço de 1.499 não há mais).

O preço actual é 1,501.

O próximo tick e temos um preço de 1,499.

Uma tentativa de abrir uma ordem e um erro.

Por conseguinte, considerámos inicialmente a situação em que este erro não pode ser evitado a 100%.

Ou será que me escapou alguma coisa?

 

Não consigo descobrir como arrancar ficheiros mqh de uma subdirectoria da pastaExperts.

como puxar ficheiros mqh da pasta Um para a pasta Dois ?

 
Vladimir Pastushak:

Não consigo descobrir como arrancar ficheiros mqh de uma subdirectoria da pastaExperts.

como puxar ficheiros mqh da pasta Um para a pasta Dois ?


solução encontrada. Se o ficheiro, ao qual pretende ligar o injector, estiver localizado no TestOne, e o injector no Testwo, então...

É assim:

#include "..\Two\name.mqh""
Acontece que: ..\ - de One go to Test e Two\name.mqh - de Test vá a Two e seleccione o nome do ficheiro.mqh
 
o perfil não mostra "as minhas mensagens".

e nos perfis de outras pessoas
 
Vladimir Pastushak:

solução encontrada. Se um ficheiro ao qual quer ligar um inluder está no TestOne, e um inluder no Testwo, então...

Assim:

Acontece: ..\ - de One go to Test and Two\name.mqh - de Test go to Two e seleccione o nome do ficheiro.mqh

Existem tais construções:

#include "..\..\Two\name.mqh"
Razão: