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

 
torblin:
olá a todos, não parece que o posto seja para novatos oh gee whiz onde perguntar com dp 200 que assessor vai trabalhar?
qualquer um praticamente.
 

Caros Senhores, peço para ter um olho experiente na "tentativa número um". O assunto é: Obtive um código "atravessando" um indicador fractal escrito em MQL5 e um indicador azzx_larry-2.0, cuja essência é excluir as chamadas "barras interiores" enquanto se procura um extremo (em anexo). Ao compilar, recebemos quatro erros, todos eles estão na parte do código que foi emprestada do azzx escrito em "4". As questões surgiram ao interpretar os "erros":

1. Porque é que se propõe que a declaração (lugar no código - sublinhado) seja colocada na Global. ("para" - as expressões não são permitidas num âmbito global).


2. Porque é que o compilador considera Alto[bar] e Baixo[bar] (também sublinhado no código) não declarados, enquanto várias linhas acima no código há Alto[i] e Baixo[i] que não considera erros.

('Alto' - identificador não declarado, 'Baixo' - identificador não declarado).


3. o mesmo se aplica ao limite - porque é que o compilador o considera não declarado. ("limite" - identificador não declarado).

PS: parte do código (indicador fractal) deriva da documentação mql5, e parte do código do indicador azzx_larry2.0 deriva do codobase mql4, autor azzx


//+------------------------------------------------------------------+
//|                                                     azzx 2.0.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
//---- indicator settings
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
#property  indicator_type1   DRAW_ARROW
#property  indicator_type2   DRAW_ARROW
#property  indicator_color1  White
#property  indicator_color2  White
#property  indicator_label1  "azzx Up"
#property  indicator_label2  "azzx Down"
//---- indicator buffers
double max[];
double min[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//---- indicator buffers mapping
   SetIndexBuffer(0,max,INDICATOR_DATA);
   SetIndexBuffer(1,min,INDICATOR_DATA);
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_ARROW,108);
   PlotIndexSetInteger(1,PLOT_ARROW,108);
//---- arrow shifts when drawing
   PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,0);
   PlotIndexSetInteger(1,PLOT_ARROW_SHIFT,0);
//---- sets drawing line empty value--
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- initialization done
  }
//+------------------------------------------------------------------+
//|  Accelerator/Decelerator Oscillator                              |
//+------------------------------------------------------------------+
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 &TickVolume[],
                const long &Volume[],
                const int &Spread[])
  {
   int i,limit;
//---
   if(rates_total<3)
      return(0);
//---
   if(prev_calculated<3)
     {
      limit=1;
      //--- clean up arrays
      ArrayInitialize(max,EMPTY_VALUE);
      ArrayInitialize(min,EMPTY_VALUE);
     }
   else limit=rates_total-1;

   for(i=limit;i<rates_total-1 && !IsStopped();i++)
     {
      //---- Up azzx
      if(High[i]>High[i+1] && High[i]>=High[i-1])
         max[i]=High[i];
      else max[i]=EMPTY_VALUE;

      //---- Low azzx
      if(Low[i]<Low[i+1] && Low[i]<=Low[i-1])
         min[i]=Low[i];
      else min[i]=EMPTY_VALUE;
     }
//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }

//+------------------------------------------------------------------+

  // Поиск краткосрочных экстремумов.
  for(i=limit-2;i>1;i--) 
   {
    l = left_bar(i);
    r = right_bar(i);
    
    if((l>0) && (r>0)) 
      {
      if(((Low[l]>=Low[i]) && (Low[r]>Low[i])) ||
         ((Low[l]>Low[i]) && (Low[r]>Low[i]))) 
      {
        min[i] =1;
      }
    }
 
    if((l>0) && (r>0)) 
      {
      if(((High[l]<= High[i]) && (High[r]<High[i])) ||
         ((High[l]<High[i]) && (High[r]<High[i]))) 
      {
        max[i] =1;
      }
    }

  // Отметка экстремумов.
  ArrayInitialize(buf_st_min,0);
  ArrayInitialize(buf_st_max,0);

  
  for(i=limit-1;i>0;i--) 
  {
    switch(min[i]) 
    {
      case 1 : buf_st_min[i]=Low[i]; break;
    }
 
    switch(max[i]) 
    {
      case 1 : buf_st_max[i]=High[i]; break;
    }
  }
  
  return(0);
}
 
// Проверка, что заданный бар - внутренний.
bool is_internal(int bar) 
{
  return((High[bar] < High[bar + 1]) && 
         (Low [bar] > Low [bar + 1]));
}
 
// Возвращает бар слева от заданного бара или -1.
int left_bar(int bar) 
    {
  int i;
  
  for(i=bar+1;i<limit-2;i++) 
{
    if(is_internal(i)==false) 
{
      return(i);
    }
  }
  
  return(-1);
}
 
// Возвращает бар справа от заданного бара или -1.
int right_bar(int bar) {
  int i;
  
  for(i=bar-1;i>0;i--) 
{
    if(is_internal(i)==false) 
{
      return(i);
    }
  }
  
  return(-1);
}
//+------------------------------------------------------------------+
//| Indicator deinitialization function                              |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- почистим график при удалении индикатора
   Comment("");
  }
Penso que o código tem Alto[i] e Baixo[i] algumas linhas acima das quais ele não considera erros. 3. Do mesmo modo, quanto ao limite - porque é que o compilador o considera não declarado
 

Reshetov:
А робот случаем не из Маркета?
только один.  что там продается - ужас. хотя наверное все они такие
 
beginner_mql:

há High[i] e Low[i] no código, o que não conta como erros. 3. O mesmo se aplica ao limite - porque é que o compilador o considera não declarado

Tem aqui um parêntese de fecho precoce:

   return(rates_total);
  }

//+------------------------------------------------------------------+

  // Поиск краткосрочных экстремумов.
  for(i=limit-2;i>1;i--) 

Ou faltam várias linhas, porque não são declaradas.

    l = left_bar(i);
    r = right_bar(i);
 
vicmos:

Tem aqui um parêntese de fecho precoce:

Ou faltam várias linhas porque não são anunciadas

Obrigado pela vossa participação. O suporte foi movido para o fim do código, a compilação deu 16 erros - algo em que trabalhar.

 
Olá a todos, podem dizer aos utilizadores do fórum que trabalham com o produto de software ITrade Chaos de G. Stanilevich? Gosto muito, mas há algumas coisas que não compreendo. Se não se importar, quem trabalha ou já trabalhou com este produto, por favor contacte-me no Skype. O meu skype é Furkat1962 Obrigado de antemão. Sinceramente Furkat
 
torblin:
não creio que este posto seja para principiantes, então porque não me diz onde perguntar a um novato com 200dpa o que é que o conselheiro fará?
Não quer compreender que FOREX não é um comércio livre, mas é o mesmo trabalho que qualquer outro comércio, só que o retorno é maior quando se coloca no trabalho!
 
Adicionei um indicador ao gráfico da EA - como posso colorir este indicador agora? O indicador utiliza 3 linhas, gostaria de as fazer todas de 3 cores e espessuras diferentes.
 
YAndrey:
Adicionei um indicador ao gráfico da EA - como posso colorir este indicador agora? O indicador utiliza 3 linhas, gostaria de as fazer todas de 3 cores e espessuras diferentes.
Pode usar canetas de feltro no monitor).
 
zfs:
Pode usar canetas de feltro no monitor).
Sim, poderia fazer isso. Mas não gostaria de o fazer. E eu gostaria de ouvir de pessoas inteligentes ;). Encontrei uma saída criando um indicador personalizado com parâmetros de entrada sob a forma de cores para cada linha, mas como posso torná-lo mais simples? Por isso, mais uma vez uma pergunta. Estou a criar um indicador iBands no meu Expert Advisor. Anexo-a à tabela. Gostaria de desenhar as suas 3 linhas com cores diferentes. Será possível?