Erros, bugs, perguntas - página 564

 
Trabalho em nuvem usando o erro.
Qual é a causa deste problema? Não é possível utilizar recursos das nuvens.
 
Urain:

Explicar.


Houve um anúncio preliminar das alterações planeadas . A lista final de alterações na próxima construção será publicada após o lançamento da própria construção.
 
Rosh:
Houve um anúncio preliminar das alterações planeadas . A lista final de alterações na próxima construção será publicada após o lançamento da própria construção.
Obrigado.
 

Rasguei longa e duramente o código indicador, até me ter desesperado absolutamente de apanhar erros. Não o escrevi em "Dummies" porque suspeito não de erros cometidos por mim, mas de erros no trabalho do terminal.

O objectivo do indicador é colocar os fractais no período de tempo actual de outro período de tempo e adicionar novos fractais à medida que as novas barras fractais aparecem. Por favor, não sugira outros métodos de disposição das setas fractais, não se trata disso; as questões aqui são fundamentais, e relacionam-se com este código e, talvez, estejam relacionadas com o funcionamento incorrecto do terminal. Tomei um exemplo da Ajuda iFractals que foi logicamente encurtada para metade (apenas para os fractais superiores) para facilitar a percepção e um pouco de código do padrão Fractals.mq5 foi emprestado. Tive de ser muito meticuloso para evitar qualquer mal-entendido: liguei quase todas as matrizes possíveis e limpei as matrizes trabalhadas, libertei o cabo do indicador chamado, que não deu qualquer diferença perceptível nos resultados. Foram notados os seguintes problemas e peculiaridades no funcionamento:

  1. Quando inicio o terminal pela primeira vez, abro uma nova janela gráfica, e aplico um indicador recentemente compilado, todos os fractais acumulam-se na barra de zero no final do histórico (apenas um parece ser colocado), em vez de serem posicionados como pretendido e de acordo com a lógica do código. A colocação correcta só pode ser iniciada saltando para outros períodos de tempo (por vezes nem sequer da primeira vez). Além disso, ao apagar o indicador do gráfico, fechar a janela do gráfico, recompilar, abrir uma nova janela e aplicar o indicador, quase sempre conseguimos obter imediatamente o Fractal Arrangement necessário. Para ver o efeito errado, o terminal deve ser completamente descarregado e todas as etapas da etapa 1 devem ser repetidas. 1. Talvez o problema esteja na vida útil do cabo do chamado indicador e no seu comportamento específico no início do indicador personalizado? No caso de disposição incorrecta dos fractais (quando todos são "comprimidos" na barra de zero), a saída de todos os elementos de exact_extremum no laço dá resultados zero, mas a saída dos valores adjacentes de TimeUpBuffer, com base nos quais é calculado e preenchido, mostra sempre datas de tempo consistentemente diferentes. Daí a questão: o que impede que seja preenchido durante a criação do indicador inicial, se preencher correctamente com os valores correctos durante as próximas vezes?
  2. O mesmo código que herdou o mesmo problema, mas agora a ênfase é colocada numa característica completamente diferente. Neste indicador, podemos abster-nos de ligar algumas matrizes de cálculo intermédio como INDICADOR_CALCULATIONS aos amortecedores do indicador. Este é o código inicial do indicador. Tudo parece estar bem, à excepção da p. 1. parece estar bem.
  3. Mas para sermos muito espertos, vamos tentar seguir as melhores recomendações e ligar as matrizes para cálculos intermédios aos amortecedores indicadores:
    #property indicator_chart_window
    #property indicator_buffers 3
    #property indicator_plots   1
    
    [...]
    
    int OnInit()
      {
       [...]
       SetIndexBuffer(1,PreliminaryUpBuffer,INDICATOR_CALCULATIONS);
       SetIndexBuffer(2,exact_extremum,INDICATOR_CALCULATIONS);
       [...]
      }
    compilar e executar. Como resultado, iremos receber uma mensagem de erro nos registos do Terminal Expert Advisor: 2011.11.11 07:42:03 (AUDUSD,H1) Array out of range, line:
                CopyHigh(_Symbol,PERIOD_M1,TimeUpBuffer[shift+1]-1,
                                           TimeUpBuffer[shift],
                                           exact_extremum);
    
    A colocação fractal em alguns períodos de tempo ou está ausente ou é esporádica.
  4. Iniciar uma sessão Ouija, fazer passes mágicos, obedecer à escrita automática, e substituir:
    #property indicator_chart_window
    #property indicator_buffers 3
    #property indicator_plots   1
    para:
    #define NUMBER 1
    
    #property indicator_chart_window
    #property indicator_buffers NUMBER+2
    #property indicator_plots   NUMBER
    Quer isto esteja ou não correcto, mas funciona de forma incompreensível!

Tenho um pedido para os habitantes da noosfera e especialmente para os desenvolvedores: poderia explicar cada item e aconselhar como depurar o código indicador (se eu não alterar a sua implementação).

Obrigado e ficheiros anexados.

P.S.: Nos ficheiros os nomes eram parênteses, mas depois de carregados são estragados.

 

Como posso determinar o lucro actual de um comércio mágico?

este código devolve lucros em comércios fechados e eu preciso deles em comércios abertos

#include <Trade\Trade.mqh>
CTrade trade;
void OnTick()
  {
   double profit=0;
   if(PositionSelect(Symbol()))profit=PositionGetDouble(POSITION_PROFIT);
   if(profit==0) trade.PositionOpen(Symbol(),ORDER_TYPE_SELL,0.1,SymbolInfoDouble(Symbol(),SYMBOL_ASK),0,0,"");
   if(profit>1) trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,0.1,SymbolInfoDouble(Symbol(),SYMBOL_ASK),0,0,"");
   
   double ld_return=0;  
   HistorySelect(0,TimeTradeServer());
   for(int i=HistoryDealsTotal()-1;i>=0;i--) // По всем сделкам от конца к началу
     {
      ulong ticket=HistoryDealGetTicket(i); // Определение тикета сделки и ее выделение
      if(ticket!=0) 
      {
      if(HistoryDealGetInteger(ticket,DEAL_TYPE)<2)
      ld_return+=HistoryDealGetDouble(ticket,DEAL_PROFIT);
      }
     }     
   Comment(ld_return);   
  }
 

Como posso saber por que razão a inicialização falha?

Reinicializo os erros antes do início da inicialização com

ResetLastError();

No final da inicialização, vejo um erro

Print("Ошибка " + IntegerToString(GetLastError()));

Acabo por entrar no separador Expert Advisors

2011.11.11 08:47:51 SimpleExpert (EURUSD,H1) Erro 0

No separador "Diário

2011.11.11 08:47:51 Peritos inicializadores do SimpleExpert (EURUSD,H1) falharam

 
Konstantin83:

Como posso saber por que razão a inicialização falha?

Antes de iniciar a inicialização, reinicializo os erros com a função

ResetLastError();

No final, apresento um erro

Print("Ошибка " + IntegerToString(GetLastError()));

Obtenho o seguinte resultado no separador Especialistas

2011.11.11 08:47:51 SimpleExpert (EURUSD,H1) Erro 0

No separador "Diário

2011.11.11 08:47:51 Peritos inicializadores do SimpleExpert (EURUSD,H1) falharam

O OnInit devolve 0 ou não 0?
 
stringo:
O OnInit devolve 0 ou não 0?

OnInit retorna verdadeiro, de alguma forma falhou.

Obrigado, tudo bem.

 
ddd06:

Como posso determinar o lucro actual de um comércio mágico?

Este código devolve lucros em negócios fechados, mas eu preciso deles em negócios abertos

Veja o artigo de Dmitry(Integer). Tudo é aí implementado de forma óptima. Artigo:Método Optimal de Cálculo de Volume de Posição Acumulado por Número Mágico Especificado.
 
Boa tarde, comecei a escrever multivariante, chamo iMA, por alguma razão no comércio real tudo funciona bem, assim que corro no testador um perito em erros removido porque o indicador 'Moving Average' não pode carregar [4804], o que é o indicador no indicador, não muito claro, não consegui encontrar uma resposta plausível na Internet. Aconselho-vos, ficar-vos-ia muito grato.
Документация по MQL5: Технические индикаторы / iMA
Документация по MQL5: Технические индикаторы / iMA
  • www.mql5.com
Технические индикаторы / iMA - Документация по MQL5
Razão: