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

 
Pineapple88:

Fixou-o, tudo parece estar a funcionar!)

Transferi dois indicadores de MA para a função OnInit.

Compreendo que criamos apenas o manípulo indicador na função OnInit e efectuamos todas as outras manipulações com as matrizes na função OnTick e verificamo-lo em cada tick?

Sim, criamos o manípulo indicador no OnInit. E todas as outras operações são implementadas no OnTick.

 
Vladimir Karputov:

Sim, o manípulo indicador é criado no OnInit. E o resto do trabalho é implementado no OnTick.

Já está, obrigado!

 
A optimização de uma EA em MT5 é uma coisa necessária e útil. Mas eis a questão: Para que período são os melhores parâmetros para a operação de EA para garantir o seu breakevenness no futuro? Acredita-se que a optimização deve ser realizada todos os meses. Mas a optimização garante que o depósito não será perdido pelo menos dentro do próximo mês?
 
BORIS GOLICIN:
A optimização de uma EA em MT5 é uma coisa necessária e útil. Mas eis a questão: Para que período são os melhores parâmetros para o funcionamento da EA que garantem o seu equilíbrio no futuro? Acredita-se que a optimização deve ser realizada todos os meses. Mas a optimização garante que o depósito não será perdido pelo menos dentro do próximo mês?

para uma garantia à indústria bancária )

 
BORIS GOLICIN:
A optimização do Expert Advisor em MT5 é útil e necessária. Mas eis a questão: Por que período os melhores parâmetros para o perito garantem o seu equilíbrio no futuro? Acredita-se que a optimização deve ser realizada todos os meses. Mas a optimização garante que o depósito não será perdido pelo menos dentro do próximo mês?

Na minha opinião, a optimização é inútil. Só é bom para estimar quanto perdeu num determinado período e quanto lucro poderia ter feito. Além disso, a situação do mercado irá mudar a qualquer momento, e toda a optimização irá por água abaixo. Para que uma estratégia funcione durante mais tempo no modo automático, não se deve ser ganancioso. Não tente espremer o máximo para fora do mercado. A empresa de corretagem não o deixará.

 

Eis o que consegui encontrar sobre optimização na Internet:

Suponhamos que temos um pedaço de história de 15 anos (pelo menos 10), digamos de 2000 a 2015. Dividimos esta peça nos períodos seguintes: 2000-2003 é a nossa parte de teste para trás, 2003-2012 é o período de optimização, 2012-2015 é o teste para a frente. Após a optimização, realizamos os habituais testes avançados, seleccionando 10-20 conjuntos mais bem sucedidos. Depois disso, executamos os conjuntos seleccionados num teste retrospectivo. Os resultados devem ser semelhantes aos obtidos nos testes de avanço. Esses conjuntos, que passaram no teste, são guardados para posterior comparação. Depois fazemos o teste contra os restantes conjuntos em toda a parte da história e seleccionamos o que mostra melhores resultados do que os outros. Como resultado, ficamos com um conjunto de configurações que é o mais adequado.
Como seleccionamos os cenários na primeira fase - o teste de avanço? Muito simples: a coisa mais importante para nós nesta fase é o tipo de curva de equilíbrio. Idealmente, deve ser uma linha recta que vai do canto inferior esquerdo para o canto superior direito. Dito isto, não vale a pena olhar para todos os melhores conjuntos seguidos - são muitas vezes quase idênticos.

 

Boa tarde a todos!

Ao aceder ao manipulador do indicador ATR, os primeiros 30 segundos dão valores estranhos.

Não consegue descobrir o que o está a causar?

int ATRdefinition = 0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   ATRdefinition = iATR(_Symbol,_Period,14);
   if(ATRdefinition == INVALID_HANDLE)
     {
      Print("Ошибка создания Хендла");
     }

   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   string signal = "";

   double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);

   double ATRarray[];
   ArraySetAsSeries(ATRarray,true);

   CopyBuffer(ATRdefinition,0,0,3,ATRarray);
   
   double ATRValue = NormalizeDouble(ATRarray[0],5);

   Print("ATRVALUE: ",ATRValue);
  }
Arquivos anexados:
ATR.png  51 kb
 
Pineapple88:

Bom dia a todos!

Ao aceder ao manipulador do indicador ATR, os primeiros 30 segundos dão valores estranhos.

Não consigo entender qual é a razão?

Verificam se o indicador está pronto?

//--- determine the number of values calculated in the indicator 
   int calculated=BarsCalculated(handle); 

(insira o seu cabo em vez de'cabo')

 

Acontece que estes dados(402082) não são suficientes para calcular o indicador?

Pensei que a funçãoBarsCalculated deveria dar um erro (-1) se não houver dados suficientes para o cálculo

Arquivos anexados:
ATR2.png  21 kb
 
Pineapple88:

Acontece que estes dados(402082) não são suficientes para calcular o indicador?

Pensei que a funçãoBarsCalculated deveria dar um erro (-1) se não houver dados suficientes para o cálculo

Parece que o terminal continua a bombear o histórico - respectivamente, o indicador é recalculado o tempo todo. Ou, outra opção: no seu terminal, definiu um MUITO grande número de barras para mostrar no gráfico e o seu computador é MUITO fraco.


Adicionado.

Verificado no MetaTrader 5 x64 build 2470 e com a configuração "Mostrar barras" de 100000 - com história há muito descarregada. O código funcionou perfeitamente.