Erros, bugs, perguntas - página 541

 
220Volt:

Para não ser infundado, simulei a situação de que falei acima (não a posso citar porque não posso sair de uma citação :) ).

Executei o seguinte código na M15:

Enquanto o guião estava a correr, liguei-me e desliguei-me da Internet. As fotografias mostram o resultado.

Estou a ver. Iremos corrigi-lo.
 

Está em servicedesk ou um bug no código?

O indicador deve construir 5 níveis de pontos a partir do preço de fecho para baixo a vermelho.

Mas apenas dois buffers são exibidos (embora conte todos eles) e não vermelho, mas verde (após a compilação preto).

Por favor, verifique se sou só eu ou se sou só eu em geral...?


#define  N      5
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_plots   5
#property indicator_color1 clrRed
#property indicator_color2 clrRed
#property indicator_color3 clrRed
#property indicator_color4 clrRed
#property indicator_color5 clrRed

#property indicator_width1 3
#property indicator_width2 3
#property indicator_width3 3
#property indicator_width4 3
#property indicator_width5 3

#property indicator_type1 DRAW_COLOR_ARROW
#property indicator_type2 DRAW_COLOR_ARROW
#property indicator_type3 DRAW_COLOR_ARROW
#property indicator_type4 DRAW_COLOR_ARROW
#property indicator_type5 DRAW_COLOR_ARROW

//------------------------------------------------------------------    class CClrHist
class CClrHist
{
public:
        double buf[];
        CClrHist() { };
};

CClrHist bufs[N]; // массив буферов

//------------------------------------------------------------------    OnInit
int OnInit()
{
        for (int i=0; i<N; i++) SetIndexBuffer(i, bufs[i].buf, INDICATOR_DATA);
        return(0);
}
//------------------------------------------------------------------    OnCalculate
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[])
{
        for (int i=0; i<N; i++) for (int j=rates_total-1; j>=0; j--)
        {
                bufs[i].buf[j]=close[j];
                bufs[i].buf[j]-=i*100*Point();
        }
        return(rates_total);
}
 
sergeev:

Está em servicedesk ou um bug no código?

O indicador deve construir 5 níveis de pontos a partir do preço de fecho para baixo a vermelho.

Mas apenas dois buffers são exibidos (embora conte todos eles) e não vermelho, mas verde (após a compilação preto).

Por favor, verifique se sou só eu ou se sou só eu em geral...?

#property indicator_type1 DRAW_ARROW
#property indicator_type2 DRAW_ARROW
#property indicator_type3 DRAW_ARROW
#property indicator_type4 DRAW_ARROW
#property indicator_type5 DRAW_ARROW
 
masharov:

...acredito que as bibliotecas standard são o código ideal que deve servir de modelo para outros.

Só posso dizer que seria desejável livrar-se de tais noções o mais depressa possível.

Não tenho nada contra as bibliotecas standard, mas confiar no código de outra pessoa "para facilitar a escrita de programas" sem o verificar? - Excepto na fase de redacção inicial de um consultor especializado. Para acelerar os processos de rotina, por assim dizer.

 

Recebo a mensagem: Terminação anormal com bastante frequência no meu diário de bordo. Alguém reparou quando poderá haver um conflito deste tipo?

Ainda não consigo encontrar a causa. A única coisa que posso dizer é que se eu deixar o terminal inactivo durante algum tempo ou usar apenas outro programa nesse momento (por exemplo, Excel), o Expert Advisor que estou a testar começa a trabalhar incorrectamente depois de voltar ao terminal. Ou seja, as operações comerciais são realizadas sem qualquer problema. O único problema está na interacção com os painéis de negociação e informação. Parece que a OnChartEvent() está com falhas. A alternância entre os painéis começa a abrandar muito, como se o processo estivesse muito ocupado com outra coisa. Não uso loops eternos. Também a carga de CPU neste momento não indica que algo é activamente utilizado. A recompilação do Expert Advisor ajuda. No momento da recompilação, antes de a EA ser deinicializada, a mensagem determinação anormal aparece na revista. Depois o programa é inicializado com sucesso e tudo começa a funcionar como um relógio.

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

Recebo a mensagem: Terminação anormal com bastante frequência no meu diário de bordo. Alguém reparou quando poderá haver um conflito deste tipo?

Ainda não consigo encontrar a causa. A única coisa que posso dizer é que se eu deixar o terminal inactivo durante algum tempo ou usar apenas outro programa nesse momento (por exemplo, Excel), o Expert Advisor que estou a testar começa a funcionar incorrectamente depois de voltar ao terminal. Ou seja, as operações comerciais são realizadas sem qualquer problema. O único problema está na interacção com os painéis de negociação e informação. Parece que a OnChartEvent() está com falhas. A alternância entre os painéis começa a abrandar muito, como se o processo estivesse muito ocupado com outra coisa. Não uso loops eternos. Também a carga de CPU neste momento não indica que algo é activamente utilizado. A recompilação do Expert Advisor ajuda. No momento da recompilação, antes de a EA ser deinicializada, a mensagem determinação anormal aparece na revista. Depois o programa é inicializado com sucesso e tudo começa a funcionar como um relógio.

Utilizamos IsStopped() em loops?

Pode ler sobre tais problemas aqui, aqui e aqui. Também deve pensar onde no código existem "gargalos"...

Tanto quanto sei, este erro ocorre em caso de término "precoce" do programa (quando o gráfico/terminal é encerrado ou o Expert Advisor é recompilado), e durante esta operação o Expert Advisor realiza algum trabalho.

 
Interesting:

Utilizamos IsStopped() em loops?

Leia sobre problemas semelhantes aqui, aqui e aqui. Pense também em estrangulamentos no código...

Tanto quanto sei, este erro ocorre no caso de término "precoce" de um programa (quando o gráfico/terminal é encerrado ou o Expert Advisor é recompilado), enquanto o Expert Advisor executa algum trabalho.

Obrigado. Os links mostram a mesma situação. Nunca uso IsStopped() em loops, só parto, continuo e volto.

Até agora, não vi qualquer ligação entreIsStopped() e o programa a abrandar. Afinal de contas, se o programa congelasse, nenhuma outra operação seria executada. Ou será que estou enganado?

Só mais uma coisa.IsStopped() é útil quando é necessário parar a execução de um programa à força, por exemplo, para fechar o terminal ou apagar o Expert Advisor do gráfico. E preciso de continuar a utilizar o Conselheiro Especialista.

 
tol64:

Obrigado. Os links mostram a mesma situação. Eu não uso IsStopped() em loops em qualquer lugar, apenas quebro, continuo e volto.

Até agora, ainda não vi qualquer ligação entreIsStopped() e a desaceleração do programa. Se o programa fosse congelado, nenhuma outra operação seria executada. Ou será que estou enganado?

Só mais uma coisa.IsStopped() é útil quando é necessário parar a execução de um programa à força, por exemplo, para fechar o terminal ou apagar o Expert Advisor do gráfico. E preciso de continuar a utilizar o Conselheiro Especialista.

IsStopped(), é sobre o erro. A razão pela qual o terminal/especialista está a abrandar nem sequer é adivinhada (não são conhecidas condições de tempo de execução, também nada sobre o Expert Advisor).
 
tol64:

Recebo a mensagem: Terminação anormal com bastante frequência no meu diário de bordo. Alguém reparou quando poderá haver um conflito deste tipo?

Ainda não consigo encontrar a causa. A única coisa que posso dizer é que se eu deixar o terminal inactivo durante algum tempo ou usar apenas outro programa nesse momento (por exemplo, Excel), o Expert Advisor que estou a testar começa a trabalhar incorrectamente depois de voltar ao terminal. Ou seja, as operações comerciais são realizadas sem qualquer problema. O único problema está na interacção com os painéis de negociação e informação. Parece que a OnChartEvent() está com falhas. A mudança entre os painéis começa a abrandar muito, como se o processo estivesse muito ocupado com outra coisa. Não uso loops eternos. Também a carga de CPU neste momento não indica que algo é activamente utilizado. A recompilação do Expert Advisor ajuda. No momento da recompilação, antes de a EA ser deinicializada, a mensagem determinação anormal aparece na revista. Depois o programa é inicializado com sucesso e tudo começa a funcionar como um relógio.

Aterminação anormal significa que interferiu com o programa de forma não natural, nomeadamente, a sua recompilação em tempo de execução, o que leva à interrupção e reinicialização do programa.

O mesmo acontece se se atingir uma divisão por zero ou interromper o programa em tempo de execução, mas se o programa for reprogramado, não se obterá tal entrada. É por isso que é aconselhável verificar a existência do IsStopped para que o programa possa sair no seu próprio regresso, em vez de ser forçado a fazê-lo.

 

Existem planos para acrescentar os seguintes itens:

Clique duas vezes numa posição no gráfico para abrir o menu de gestão de posições.

Destacar múltiplas posições para fechar ao mesmo tempo

????

Obrigado.