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

 
vladzeit:

***

1. Pedir o preço actual para o instrumento actual.

***

2.1 Se o preço actual for Ponto >= 100 pips, abrimos uma posição.

***

Queres apanhar uma lacuna?

 
Vladimir Karputov:

Queres apanhar uma lacuna?

Vladimir, para minha vergonha, não tenho a certeza se entendo o que é uma Lacuna)

Quero implementar um algoritmo simples, no qual uma alteração de preço por um número de pips será uma condição para entrar no mercado, para comprar ou vender... não importa.

Como resultado, quero aprender como obter o preço actual do símbolo, guardá-lo numa variável local ou global e recuperá-lo a partir daí num evento, e redefini-lo para zero.

Quero utilizá-lo principalmente para encontrar pontos de entrada no mercado.

Comecei agora a aprender mql5, principalmente devido aos vossos exemplos de Consultores Especialistas, que escrevem muito, muito obrigado).

Sou capaz de montar os meus próprios algoritmos a partir dos vossos exemplos, mas estou confuso ao obter o preço actual e ao poupá-lo numa variável.

 
vladzeit:

***

Quero implementar um algoritmo simples em que uma mudança de preço por um número de pips seria uma condição para entrar no mercado, para comprar ou vender... não importa.

***

Deve compreender que se fixar um preço no tick actual, no tick seguinte este preço pode ou não mudar em nada ou mudar por um número muito pequeno de pontos.

Portanto, é preciso ser mais específico sobre o que se pretende fazer:

  • por exemplo, obter o preço actual uma vez em N-segundos.
  • obter o preço actual apenas com a formação de novos bares.
  • ...
  • e só depois comparar este preço com o valor anteriormente armazenado.

 
Vladimir Karputov:

Deve entender-se que se memorizar um preço no tick actual, então no tick seguinte este preço pode ou não mudar em nada ou mudar por um número muito pequeno de pontos.

Portanto, é preciso ser mais específico sobre o que se pretende fazer:

  • por exemplo, obter o preço actual uma vez em N-segundos.
  • obter o preço actual apenas com a formação de novos bares.
  • ...
  • e só depois comparar esse preço com o valor memorizado anteriormente.

Hmmm... Eu não pensei nestas características)

  • Para obter o preço actual apenas no momento em que nasce um novo bar.
Este exemplo seria mais útil para mim.
 
vladzeit:

Mmm... Estas são características em que eu não tinha pensado)

  • Obter o preço actual apenas quando nasce um novo bar.
Este exemplo será mais útil para mim.

Vou tentar dar um exemplo hoje à noite (tarde).

 

Boa tarde!
Estou a tentar acelerar o indicador. Estou a tentar acelerar o indicador porque tenho uma matriz temporal que deve ser comparada com os índices de barras e vejo aqui alguma lentidão. Já verifiquei, se preparei uma matriz com índices e a comparei com índices de barras, recebo 40K elementos em 7 segundos, mas se tenho uma matriz de tempo demora 140 segundos. Existem alguns truques para acelerar o indicador?

   bool FindArr(int Bar)
     {
      int Size=CheckSizeTime;
      for(int i=restBars; i<Size; i++)
        {
         datetime BarTime=iTime(NULL,PERIOD_CURRENT,Bar);
         if(BarTime==ArrCol.BarTimeArray[i])
           {
            restBars++;
            return(true);
           }
        }
      return(false);
     }
if(prev_calculated==0)         
        for(int i=0;i<rates_total;i++)
           {
            if(Arr.FindArr(i))
              {
               ColorSectionBuffer[i]=low[i];
               ColorSectionColors[i]=0;
              }
            else
              {
               ColorSectionBuffer[i]=0;
               ColorSectionColors[i]=EMPTY_VALUE;
              }
           }
 
vladzeit:

Mmm... Estas são características em que eu não tinha pensado)

  • Obter o preço actual apenas quando nasce um novo bar.
Este exemplo será mais útil para mim.
Vladimir Karputov:

Vou tentar dar um exemplo hoje à noite (tarde).

Aqui estava a fazer um exemplo para alguém obter preços em cada carraça:

//+------------------------------------------------------------------+
//|                                               Display prices.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
//---
#include <Trade\SymbolInfo.mqh>  
CSymbolInfo    m_symbol;                     // symbol info object
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(!m_symbol.Name(Symbol())) // sets symbol name
      return(INIT_FAILED);
   RefreshRates();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(!RefreshRates())
      return;
   Comment("Ask: ",DoubleToString(m_symbol.Ask(),m_symbol.Digits()),"\n",
           "Bid: ",DoubleToString(m_symbol.Bid(),m_symbol.Digits()));
  }
//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates(void)
  {
//--- refresh rates
   if(!m_symbol.RefreshRates())
     {
      Print("RefreshRates error");
      return(false);
     }
//--- protection against the return value of "zero"
   if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
      return(false);
//---
   return(true);
  }
//+------------------------------------------------------------------+

As explicações serão amanhã, eu já estou a dormir esta noite.

Amanhã haverá também um exemplo de um novo bar.

Arquivos anexados:
 
Vladimir Karputov:

Aqui está um exemplo de obter preços em cada tick para outra pessoa:

Explicarei amanhã, já estou na cama esta noite.

Amanhã haverá também um exemplo de um novo bar.

Vladimir, obrigado.Conheci um pouco a funçãoRefreshRates da classeCSymbolInfo .Vi-o nos vossos relatórios e li também numa cartilha.

O apelo desta função noOnTick e a produção de valores de preços noComentário também me são claros a partir do exemplo. O procedimento noOnInit para verificar o símbolo actual também é claro para mim.

Enquanto espero pelo exemplo com o novo bar, vou tentar pôr em prática com o vosso exemplo, não o utilizei na prática. Vou experimentá-lo.


 
fxsaber:

Obrigado, eu arranjei-o.

Obrigado - agora parece que os directórios só são distribuídos correctamente.

No entanto, percebi que os subdirectórios estão separados por um "{\i1}", enquanto a norma MQL fornece dois cortes "{\i}". Isto é, o código é necessário para gerar caminhos de ficheiro e, devido a uma barra, é impossível fazê-lo sem um pós-processamento adicional, há alguma opção para obter duas barras de uma vez?

 
Aleksey Vyazmikin:

Obrigado - agora apenas os directórios parecem estar correctos.

No entanto, percebi que os subdirectórios estão separados por um "{\i1}", enquanto a norma MQL fornece dois cortes "{\i}". Isto é, o código é necessário para a geração de caminhos de ficheiro, mas devido a uma barra é impossível fazê-lo sem um pós-processamento adicional, existe a possibilidade de obter duas barras ao mesmo tempo?

Print("\\");
Razão: