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

 
User_mt5:


Em termos gerais, existe um conceito chamado "gradiente". É um indicador que descreve o "declive" (de um gráfico). Para esta indústria, este indicador pode ser expresso em termos de ponto/tempo. É essencialmente uma taxa. Este indicador não dependerá da escala, uma vez que não está anexado ao gráfico. Usar um gradiente e não usar um ângulo.


Como se calcula este gradiente?

Há alguma forma de elaborar a sua ideia? Por favor note em que tópico do fórum escrevi a minha pergunta.

 
igorbel:

Como se calcula este gradiente?

Há alguma forma de elaborar a sua ideia? Note-se em que tópico do fórum escrevi a minha pergunta.

Não tenho uma ideia.

Estou a falar de matemática simples. O declive é a velocidade. A própria velocidade é quando o tempo está no denominador. Em uso familiar é a velocidade de um carro, expressa em km/hour. Mas a velocidade em geral pode ser diferente. Por exemplo, a velocidade de escrita do código do software é medida em número de linhas por dia. No caso de uma tabela de preços, a velocidade é medida no número de pontos por minuto. Convencionalmente, podemos assumir que se a inclinação (inclinação, taxa de subida) numa determinada parte do gráfico for superior a, por exemplo, 100 pontos/minuto, então esta parte pode ser considerada uma tendência, e se for inferior, então é um plano.

 

Olá 2017.07.07_15:55 GMT+3. Não compreendo. Parece que deveria haver um sinal, mas no testador de estratégias não há um. Como é então o seu elogiado testador MT5 diferente do testador MT4? Escrevi-o quase como no padrão Moving Average.mq5 . Mas consegui testar o Expert Advisor na minha conta de demonstração. Abriu um comércio mas teve de o fechar por si só. Eu fixei o fecho. Mas escrevi outra coisa e a EA deixou de abrir novamente o comércio. Zero erros e zero avisos não são um indicador do bom estado do Expert Advisor. Fiquei preso aqui. Como posso saber o que diz que o Expert Advisor não está a trabalhar? Tenho de voltar a incomodar o Karputov. Se eu tivesse recebido a lista completa das proibições, tê-lo-ia feito eu próprio. Estou a afixar os ficheiros, embora nem todos eles. 16:06 GMT+3.

Arquivos anexados:
 

Por favor, ajudem!

Para obter o valor do indicador em MQL4 a seguinte função é suficiente

double CMAf(int index)
  {
   return NormalizeDouble(iMA(Symbol(),0,period_CMA,0,0,0,index),Digits);
  }
Como obter um análogo para a MQL5?
 
-Aleks-:

Por favor, ajudem!

Para obter o nome de um indicador na MQL4, basta uma simples função

Como obter um análogo para a MQL5?

Já olhou para a ajuda doiMA?

Primeiro passo: No "cabeçalho", declarar uma variável para o armazenamento do manípulo indicador iMA:

Segundo passo: criar manípulo indicador no OnInit().

//+------------------------------------------------------------------+
//|                                                       iMAGet.mq5 |
//|                              Copyright © 2017, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//--- input parameters
input int                  ma_period=10;                 // period of ma 
input int                  ma_shift=0;                   // shift 
input ENUM_MA_METHOD       ma_method=MODE_SMA;           // type of smoothing 
input ENUM_APPLIED_PRICE   applied_price=PRICE_CLOSE;    // type of price 
input ENUM_TIMEFRAMES      period=PERIOD_CURRENT;        // timeframe 
//---
int                        handle_iMA;                   // variable for storing the handle of the iMA indicator 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create handle of the indicator iMA
   handle_iMA=iMA(Symbol(),period,ma_period,ma_shift,ma_method,applied_price);
//--- if the handle is not created 
   if(handle_iMA==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code 
      PrintFormat("Failed to create handle of the iMA indicator for the symbol %s/%s, error code %d",
                  Symbol(),
                  EnumToString(Period()),
                  GetLastError());
      //--- the indicator is stopped early 
      return(INIT_FAILED);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double ma_0=iMAGet(0);
   double ma_1=iMAGet(1);

   Comment("MA #0: ",DoubleToString(ma_0,Digits()+1),"\n",
           "MA #1: ",DoubleToString(ma_1,Digits()+1));
  }
//+------------------------------------------------------------------+
//| Get value of buffers for the iMA                                 |
//+------------------------------------------------------------------+
double iMAGet(const int index)
  {
   double MA[1];
//--- reset error code 
   ResetLastError();
//--- fill a part of the iMABuffer array with values from the indicator buffer that has 0 index 
   if(CopyBuffer(handle_iMA,0,index,1,MA)<0)
     {
      //--- if the copying fails, tell the error code 
      PrintFormat("Failed to copy data from the iMA indicator, error code %d",GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated 
      return(0.0);
     }
   return(MA[0]);
  }
//+------------------------------------------------------------------+


E o resultado (a mira no ecrã é colocada na barra #1):

iMAGet

Arquivos anexados:
iMAGet.mq5  7 kb
 
Vladimir Karputov:

Já viu a ajuda doiMA?

Passo um: declarar uma variável no "cabeçalho" para armazenar o cabo indicador iMA:

Segundo passo: criar manípulo indicador no OnInit().

E o resultado (a mira na imagem do ecrã é colocada na barra #1):

Obrigado pela resposta.

Na MQL4 tudo é declarado numa função - por isso existe um conjunto de funções que são activadas dependendo das definições da EA. Se não estou enganado, no vosso caso a memória será atribuída para dezenas de indicadores diferentes que o TS permite utilizar, o que não é racional, ou a memória não será atribuída?

 

É possível chamar uma função de classe sem ter um objecto específico dessa classe? Portanto, seria algo do género:

class test
  {
public:
                     test(void);
                    ~test(void);
  public: void PrintInfo (){Print ("Class test");}
  };
//---
void OnStart()
  {
      test.PrintInfo() ;
  }

Ou é necessário criar um objecto? Mesmo que esta função se refira à definição da classe em si, e não a uma instância da mesma.

 

Se a função não necessita de acesso a variáveis de classe, torná-la estática.

class test
{
public:
   test();
   ~test();

   static void PrintInfo()
   {
      Print( "Class test" );
   }
};

void OnStart()
{
   test::PrintInfo();
}
 
Koldun Zloy:

Se a função não necessita de acesso a variáveis de classe, torná-la estática.

Obrigado, é mesmo isso que é necessário.
 

Apanhar erros - o que é que está errado? Na MQL4 funciona...


   double arrFibo[17]=
     {
      0,
      0.236,
      0.382,
      0.5,
      0.618,
      0.764,
      1,
      1.236,
      1.382,
      1.5,
      1.618,
      2.0,
      2.236,
      2.382,
      2.5,
      2.618,
      2.764,
      3        //Всего уровней 17 + 0
     };
{' - demasiados inicializadores TZ_Sky_and_Ground_V_04.mq5 2484 6
Razão: