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

 

Escrevi o indicador mais simples em mql4, queria traduzi-lo para mql5, e tenho lutado durante uma semana, mas não está a funcionar! Estou a ficar nervoso, odeio mql5 porque já escrevi 88 linhas de um simples indicador de 34 linhas em mql5!

Aqui está o código no mql4:

#property indicator_separate_window
#property  indicator_level1 0
#property indicator_buffers 3

extern int kol_vo_bar = 15;
extern string Symbol_1 = "GBPJPY";
extern string Symbol_2 = "EURJPY";

double SpreadA[];
double SpreadB[];
double Spread[];

int init()
{
   SetIndexBuffer(0,SpreadA);
   SetIndexBuffer(1,SpreadB);
   SetIndexBuffer(2,Spread);
   SetIndexStyle(0,DRAW_SECTION,EMPTY,2,Red);
   SetIndexStyle(1,DRAW_SECTION,EMPTY,2,Blue);
   SetIndexStyle(2,DRAW_HISTOGRAM,EMPTY,1,Gray);
   return(0);
}

int start()
{
   int k;
   for(k = 0; k < iBars(Symbol_1,0); k++)
   {
            SpreadA[k] = iClose(Symbol_1,0,k)*100/iOpen(Symbol_1,0,k+kol_vo_bar)-100;
            SpreadB[k] = iClose(Symbol_2,0,k)*100/iOpen(Symbol_2,0,k+kol_vo_bar)-100;                  
            Spread[k] = SpreadA[k]-SpreadB[k];
   }
   return(0);
}

E aqui está o código no mql5:

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_plots   3
//--- plot Label1
#property  indicator_label1  "Label1"
#property  indicator_type1   DRAW_SECTION
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  2
//--- plot Label2
#property  indicator_label2  "Label2"
#property  indicator_type2   DRAW_SECTION
#property  indicator_color2  clrBlue
#property  indicator_style2  STYLE_SOLID
#property  indicator_width2  2

#property  indicator_label3  "Label3"
#property  indicator_type3   DRAW_HISTOGRAM
#property  indicator_color3  clrGray
#property  indicator_style3  STYLE_SOLID
#property  indicator_width3  1

//--- input parameters
input int kol_vo_bar=96;
input string   Symbol_1="GBPJPY";
input string   Symbol_2="EURJPY";
//--- indicator buffers
double         Label1Buffer[];
double         Label2Buffer[];
double         Label3Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
   SetIndexBuffer(1,Label2Buffer,INDICATOR_DATA);
   SetIndexBuffer(2,Label3Buffer,INDICATOR_DATA);
   
//---
   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[])
  {
//---
   for(int k=0; k<Bars(_Symbol,_Period); k++)
   {
            Label1Buffer[k] = iClose(Symbol_1,PERIOD_CURRENT,k)*100/iOpen(Symbol_1,PERIOD_CURRENT,k)-100;
            Label2Buffer[k] = iClose(Symbol_2,PERIOD_CURRENT,k)*100/iOpen(Symbol_2,PERIOD_CURRENT,k)-100;                  
            Label3Buffer[k] = Label1Buffer[k]-Label2Buffer[k];
   }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
double iClose(string symbol,ENUM_TIMEFRAMES tf,int index)
{
   if(index < 0) return(-1);
   double Arr[];
   if(CopyClose(symbol,tf,index,1,Arr)>0)
        return(Arr[0]);
   else return(-1);
}
double iOpen(string symbol,ENUM_TIMEFRAMES tf,int index)
{
   if(index < 0) return(-1);
   double Arr[];
   if(CopyOpen(symbol,tf,index+kol_vo_bar,1,Arr)>0)
        return(Arr[0]);
   else return(-1);
}

Aslinhas indicadoras não são exibidas correctamente em MT5.

Que fiz eu de errado?

Boa gente, ajuda-me, tem piedade do pobre, estou à beira de um colapso, honestamente. É uma pena que não se possa jurar aqui!

Moderador, não me banas, primeiro dá-me um aviso se algo estiver errado.

 

Está a recalcular todas as barras disponíveis em cada carraça, o que é altamente sub-óptimo, e é terrivelmente lento.

 
zlodei:


As linhas indicadoras não são exibidas correctamente em MT5.

O que é que escrevi mal?

Onde está o trabalho com PlotIndexXXX ?

não lhe permitiu ler a documentação e os exemplos?



Moderador, não me banas, primeiro dá-me um aviso se algo estiver errado.

Vá para a base de códigos e leia-a. Há centenas de exemplos.
 
sergeev:

Onde trabalhar com PlotIndexXXX ?

Demasiado preguiçoso para ler documentação e exemplos?


Vá à base de código e leia-a. há centenas de exemplos.

Pergunto-me porque será necessário isto no início do código:

#property  indicator_label1  "Label1"
#property  indicator_type1   DRAW_SECTION
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  2

#property  indicator_label2  "Label2"
#property  indicator_type2   DRAW_SECTION
#property  indicator_color2  clrBlue
#property  indicator_style2  STYLE_SOLID
#property  indicator_width2  2

#property  indicator_label3  "Label3"
#property  indicator_type3   DRAW_HISTOGRAM
#property  indicator_color3  clrGray
#property  indicator_style3  STYLE_SOLID
#property  indicator_width3  1

Todas as propriedades de cada linha estão aqui especificadas? Ou não é suficiente para mql5, agora preciso de escrever propriedades de linhas através da PlotIndex?

Li muitos exemplos e documentação, não compreendo 80% deles, por exemplo, porque é que eu deveria complicar coisas simples?

Por exemplo, em mql4:

   SetIndexStyle(0,DRAW_SECTION,EMPTY,2,Red);
   SetIndexStyle(1,DRAW_SECTION,EMPTY,2,Blue);
   SetIndexStyle(2,DRAW_HISTOGRAM,EMPTY,1,Gray);

Em mql5 agora nem consigo imaginar o quanto os estilos de linha especificados podem levar, 50 linhas provavelmente, e o resultado é 1 e o mesmo.

MQL5 é para PROGRAMADORES, MQL4 é para TRADORES. Se quiser verificar o sistema, programe-o com mql4, e se quiser a mesma coisa com mt5, peça a um programador que o faça, ou pare de negociar e passe tempo a estudar mql5.

Com o lançamento do MT5, eu, como comerciante, notei apenas uma melhoria, é um testador de 64 bits com a capacidade de utilizar todos os núcleos de CPU.

A sofisticação da linguagem mql não afectará de modo algum os resultados do comércio manual ou automatizado. A complicação da linguagem é importante para os programadores, sim - podemos fazer bonitos botões e painéis, integrar com todos os tipos de WinAPI estranhos, etc., mas isso não afectou os resultados da negociação. Então, porquê todas estas dificuldades quando se pode programar em mql4, e verificá-lo, mas há apenas 1 GRANDE menos - não há nenhum terminal x64 e testador com possibilidade de usar todos os núcleos. Se eles fizessem estas 2 coisas - não haveria preço para o MT4. Mas não os farão de propósito, para que não crie competição para o MT5 e pessoas como eu sofram ou paguem dinheiro.

De qualquer modo, obrigado pela vossa atenção, pela "ajuda". Não comento, não irei ao ramo de qualquer forma, é apenas a minha opinião, não mais, tenho de ir.

 
Eu sou novo aqui. Pode dizer-me se eu troco os futuros do índice rts em mt5? Como posso apresentar um único gráfico de citações de 2009 até hoje?
 
sbr080:
Eu sou novo aqui. Pode dizer-me se eu troco os futuros do índice rts em mt5? Como posso imprimir um gráfico de citações de 2009 até hoje?
Tem de pedir ao seu corretor que lhe dê a tabela pegajosa.
 
barabashkakvn:
Peça ao seu corretor que lhe dê um quadro colado.
Posso colá-lo eu próprio?
 
sbr080:
posso eu próprio colá-lo?
Não. Apenas um corretor. Se o fizer você mesmo, terá de escrever o seu próprio indicador.
 
barabashkakvn:
Não. Apenas um corretor. Se o fizer você mesmo, terá de escrever o seu próprio indicador.
Obrigado.
 
Pode aconselhar se é possível a um consultor especializado afixar indicadores técnicos num gráfico com os parâmetros que utiliza? Isto é, da mesma forma que quando se utiliza a visualização no testador de estratégias. Não consigo encontrar esta informação em lado nenhum.
Документация по MQL5: Технические индикаторы
Документация по MQL5: Технические индикаторы
  • www.mql5.com
Технические индикаторы - Документация по MQL5