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

 

Boa tarde!

Por favor, me ajude: o objetivo é implementar o fechamento da posição quando o preço cruza a MA.

Nesta seção do código

if(Bid<iMA(Symbol(),0,Fast_Ma_Period,Fast_Ma_Shift,Fast_Ma_Method,Fast_Ma_Price,0) && CountBuy()>0)
          
           
     {
     for(int i=OrdersTotal ()-1; i>=0; i--)
     {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
     {
       if (OrderMagicNumber ()== MagicNumber && OrderType() == OP_BUY)
       if(!OrderClose(OrderTicket(), OrderLots(),Bid, Slippage, Black))
       Print("Ошибка");

obtenho a seguinte imagem no testador : o preço cruza a MA e fecha a posição no fechamento do candle / abertura do próximo candle, já longe do nível de fechamento desejado (limite da MA)....

Arquivos anexados:
 
rex1818 o fechamento da posição quando o preço cruza a MA.

Nesta seção do código

Obtenho a seguinte imagem no testador : o preço cruza a MA e fecha a posição no fechamento do candle / abertura do próximo candle, já longe do nível de fechamento desejado (limite da MA)....

Os ticks são muito mais voláteis do que a média da MA no tick cloz, portanto, o spread entre os ticks em que o valor da MA apareceu é algo comum. O preço é discreto, e espero que você não confunda bid e ask, ou seja, a MA por bid e os preços abertos de fechamento também são bid, e a MA por ask e os preços também são ask.)

Zy, você não pode recalcular o ma por bid ou ask, mas adicione o spread e subtraia, o erro será mínimo.
 
Valeriy Yastremskiy #:

Os ticks são muito mais voláteis do que a média da MA no cloz do tick, portanto, o spread entre os ticks em que o valor da MA apareceu é comum. O preço é discreto, e espero que você não confunda bid e ask, ou seja, a MA por bid e os preços abertos de fechamento também são bid, e a MA por ask e os preços também são ask.)

Zy, a propósito, você não pode recalcular o ma por bid ou ask, mas se adicionar spread para subtrair, o erro será mínimo.

Obrigado pela resposta!

Hoje tentarei resolver o problema levando em conta suas recomendações.

 
rex1818 o fechamento da posição quando o preço cruza a MA.

Nesta seção do código

Obtenho a seguinte imagem no testador : o preço cruza a MA e fecha a posição no fechamento do candle / abertura do próximo candle, já longe do nível de fechamento desejado (limite da MA)....

O teste por barras de fechamento não está selecionado?

 
Alexey Viktorov #:

Os testes por fechamento de bares não são selecionados?

Boa tarde!

Modelo de teste: Todos os ticks (.....). Entendo que o mais preciso...

 
rex1818 #:

Boa tarde!

Modelo de teste: Todos os ticks (.....). Entendo que o modelo mais preciso...

E o Expert Advisor não é escrito com base na abertura de uma nova barra?

A parte do código que você mostrou não é suficiente para presumir a causa desse comportamento com mais precisão.

 

Obrigado a todos que responderam!

Encontrei os erros.

Agora tudo funciona como deveria.

 

Alguém poderia informar se o gráfico tem um limite de 3.000 barras e precisamos obter o histórico de 20.000 barras? Quais são as opções possíveis para extrair dados históricos sem alterar o parâmetro - máx. de barras na janela ????.


Meu sistema fica sobrecarregado quando a matriz passa a ter 2 milhões de índices. Tenho que procurar uma solução para descarregar o histórico, ignorando o gráfico.

   void SMA(const int aRatesTotal,const int aPrevCalc,const double  &aData[], double  &aMA[])
     {
      int Start=0;
      if(aPrevCalc==0)
        {
         for(int i=0;i<aRatesTotal;i++)
           {
            if(aData[i]!=0 && aData[i]!=EMPTY_VALUE)
              {
               Start=i+m_MAPeriod-1;
               break;
              }
           }
         aMA[Start]=0;
         for(int i=Start;i>Start-m_MAPeriod;i--)
           {
            aMA[Start]+=aData[i];
           }


Mas, antes disso, eu alimento essa matriz.


   rt=aRatesTotal;
   prv=aPrevCalc;
   for(int i=0; i<m_max_period; i++)
     {
      ArrayResize(d[i].m,rt);
      ArrayResize(d[i].f,rt);
     }

   chsma.Solve(rt,prv,aData,d[m_max_period-1].m);
Parece que o sistema trava não por causa de uma matriz, mas porque começa a criar matrizes desse tamanho.
 

Boa tarde a todos!

Quero mudar do Mql4 para o Mql5. Comecei a ler o Manual de Referência do Mql5. Infelizmente eu entendo, mas não tudo. Onde posso encontrar informações como o livro didático de Kovalev sobre o Mql4 que começaria do básico e descreveria em detalhes os recursos do Mql5 e, mais importante, que daria exemplos específicos de codificação das operações mais simples e mais comuns. Ou seja, precisamos de informações de treinamento não para usuários avançados, mas para iniciantes que precisam aprender o básico e seguir em frente.

Obrigado por sua ajuda

 
ANDREY #:

Boa tarde a todos!

Quero mudar do Mql4 para o Mql5. Comecei a ler o Manual de Referência do Mql5. Infelizmente eu entendo, mas não tudo. Onde posso encontrar informações como o livro didático de Kovalev sobre o Mql4 que começaria do básico e descreveria em detalhes os recursos do Mql5 e, mais importante, que daria exemplos específicos de codificação das operações mais simples e mais comuns. Ou seja, precisamos de informações de treinamento não para usuários avançados, mas para iniciantes que precisam aprender o básico e seguir em frente.

Obrigado por sua ajuda

Na base de código, há Expert Advisors e indicadores que foram originalmente escritos no MT4 e depois reescritos no MT5 - você pode usá-los para treinamento.

Em muitos aspectos, as linguagens são semelhantes. Defina a tarefa de reescrever o código que você entende no MT5 e use ativamente a pesquisa nas instruções e no portal - você sempre encontrará a resposta, inclusive nos artigos.