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

 
Sinceramente, não entendo como usar a biblioteca normalmente no terminal sem capacidades de busca e classificação... Apenas a percorrer estupidamente centenas de linhas?!!!
 
Alena000:
Para ser honesto, não entendo como usar a biblioteca no terminal sem procurar e classificar de todo... Apenas estupidamente percorre centenas de linhas?!!!

A pesquisa está integrada no MetaEditor (canto superior direito). Pode pesquisar as ocorrências por:

  • documento aberto
  • através de todos os ficheiros
  • MQL4/MQL5.community
A pesquisa está integrada no próprio terminal (canto superior direito). A partir do terminal, pode pesquisar toda a MQL5.community (Artigos, Produtos, Biblioteca, Sinais, Fórum, Blogs, Documentação).

 
alguém tem alguma ideia sobre esta questão? ))
 
Maxim Dobrovolskii:
alguém tem alguma ideia sobre esta questão? ))

Pode ajudar.

Arquivos anexados:
Fractal.mq4  4 kb
 
Victor Nikolaev:

Pode ajudar.

Gostaria de compreender e descobrir porque é que a minha variante não está a funcionar. Penso que se trata da combinação EA+indicador, mas o que está exactamente errado não é claro.
 
Maxim Dobrovolskii:
Gostaria de compreender e descobrir porque é que a minha variante não funciona. Parece-me que é devido à combinação Expert Advisor+indicator, mas não sei exactamente do que se trata.
Talvez, a questão é que em OnTick() leu apenas o buffer zero, mas em OnDeinit() leu tanto o zero como o primeiro?
 
Maxim Dobrovolskii:
Obrigado, mas quero compreender e descobrir porque é que a minha versão não funciona. Penso que é por causa da combinação Expert Advisor+indicator.

Querem que eu prove que não há grande problema.

Só é preciso o código do indicador. Não gosto de o copiar.

Talvez eu mude algo no vosso indicador (e até sei o quê).

 
Alexey Viktorov:
Talvez seja porque OnTick() lê apenas zero buffer e OnDeinit() lê tanto o zero como o primeiro buffer?
O Deinit é para mostrar que existe um valor num dos amortecedores.
 
Victor Nikolaev:

Querem que eu prove que não há grande problema.

Só é preciso o código do indicador. Não gosto de o copiar.

Talvez eu mude algo no vosso indicador (e até sei o quê).

//+------------------------------------------------------------------+
//|                                               modify_Fractal.mq4 |
//|          MoneyRobotics Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "MoneyRobotics Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property  indicator_label1  "Up"
#property  indicator_label2  "Down"
#property  indicator_type1   DRAW_ARROW
#property  indicator_type2   DRAW_ARROW
#property  indicator_style1  STYLE_SOLID
#property  indicator_style2  STYLE_SOLID
#property  indicator_width1  1
#property  indicator_width2  1
#property  indicator_color1 Red
#property  indicator_color2 Blue


//--- indicator buffers

double ExtUpFractalsBuffer[];
double ExtDownFractalsBuffer[];

//+-----------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//---- indicator buffers mapping  
    SetIndexBuffer(0,ExtUpFractalsBuffer);
    SetIndexBuffer(1,ExtDownFractalsBuffer);  
//---- drawing settings
    SetIndexStyle(0,DRAW_ARROW);
    SetIndexArrow(0,217);
    SetIndexStyle(1,DRAW_ARROW);
    SetIndexArrow(1,218);
//----
    SetIndexEmptyValue(0,0.0);
    SetIndexEmptyValue(1,0.0);
//---- name for DataWindow
    SetIndexLabel(0,"Modify_Fractal Up");
    SetIndexLabel(1,"Modify_Fractal Down");
//---- initialization done  
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   int    i, nCountedBars;
   double dCurrent;
   nCountedBars=IndicatorCounted();
//---- last counted bar will be recounted    
   
   if(nCountedBars<=8) i=Bars-nCountedBars-4;
   if(nCountedBars>8)
     {
      nCountedBars--;
      i=Bars-nCountedBars-4;
     }
//----Up and Down Fractals
   while ( i >= 4 )
     {
      //----Fractals up bFound=false;
      dCurrent=High[i];
      if(dCurrent>High[i+1] && dCurrent>High[i+2] && dCurrent>High[i+3] &&
         dCurrent>High[i-1] && dCurrent>High[i-2] && dCurrent>High[i-3] && 
         dCurrent>High[i-4] )
        {
         ExtUpFractalsBuffer[i]=NormalizeDouble(dCurrent + 1* Point,Digits);
        }
                           
      //----Fractals down
      dCurrent=Low[i];
      if(dCurrent<Low[i+1] && dCurrent<Low[i+2] && dCurrent<Low[i+3] && 
         dCurrent<Low[i-1] && dCurrent<Low[i-2] && dCurrent<Low[i-3] && 
         dCurrent<Low[i-4])
        {
         ExtDownFractalsBuffer[i]=NormalizeDouble(dCurrent - 1* Point,Digits);
        }
      i--;
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+


O código do indicador.
 
Maxim Dobrovolskii:
Deinit é para mostrar que existe um valor num tampão.

Há valor tanto no zero como no primeiro tampão. Em M15 temos agora fractais em 5 e 21 barras. Este guião

/********************Script program start function*******************/
void OnStart()
{
Print("******************", iCustom(_Symbol, PERIOD_CURRENT, "modify_Fractal", 1, 5));
Print("******************", iCustom(_Symbol, PERIOD_CURRENT, "modify_Fractal", 0, 21));
}/*******************************************************************/

encontra e imprime tudo correctamente. De forma correspondente, o Consultor Especialista encontrará iCustom() a trabalhar igualmente no guião e no Consultor Especialista.

Razão: