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

 

Em mql4 utilizei o iCustom para fazer indicadores que utilizam os indicadores prontos de outra pessoa, apesar de não saber nada sobre programação... Já estou farto de intuição. Estou a usar mql5 mas nada funciona, por muito que tente compreendê-lo. Quero pedir-lhe ajuda.

Tenho este indicador no ex5. Coloquei-o na minha pasta de Downloads. Quero pegar nas suas duas linhas e desenhá-las no gráfico noutros períodos, ou seja, fazer com que seja em multitempo com o iCustom.

Como não posso escrever um indicador a partir do zero, tomei o código de um simples indicador Bears Power. Não mudei nada lá, excepto a mudança da janela do indicador_chart e da linha DRAW_LINE e a linha, que, na minha opinião, deveria retirar os dados do primeiro buffer com os parâmetros predefinidos da actual TF:

ExtBearsBuffer[i]=iCustom(NULL,0,"Downloads\\RSI Analytics");

Tudo se compila, nada se desenha. De que mais precisa? :(

#property copyright   "2009, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property description "Bears Power"
//--- indicator settings
#property indicator_chart_window                      //---------------------------------
#property indicator_buffers 2
#property indicator_plots   1
#property indicator_type1   DRAW_LINE                 //---------------------------------------
#property indicator_color1  Silver
#property indicator_width1  2
//--- input parameters
input int InpBearsPeriod=13; // Period
//--- indicator buffers
double    ExtBearsBuffer[];
double    ExtTempBuffer[];
//--- handle of EMA 
int       ExtEmaHandle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtBearsBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtTempBuffer,INDICATOR_CALCULATIONS);
//---
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);
//--- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpBearsPeriod-1);
//--- name for DataWindow and indicator subwindow label
   IndicatorSetString(INDICATOR_SHORTNAME,"Bears("+(string)InpBearsPeriod+")");
//--- get MA handle
   ExtEmaHandle=iMA(NULL,0,InpBearsPeriod,0,MODE_EMA,PRICE_CLOSE);
//--- initialization done
  }
//+------------------------------------------------------------------+
//| Average True Range                                               |
//+------------------------------------------------------------------+
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;
//--- check for bars count
   if(rates_total<InpBearsPeriod)
      return(0);// not enough bars for calculation   
//--- not all data may be calculated
   int calculated=BarsCalculated(ExtEmaHandle);
   if(calculated<rates_total)
     {
      Print("Not all data of ExtEmaHandle is calculated (",calculated,"bars ). Error",GetLastError());
      return(0);
     }
//--- we can copy not all data
   int to_copy;
   if(prev_calculated>rates_total || prev_calculated<0) to_copy=rates_total;
   else
     {
      to_copy=rates_total-prev_calculated;
      if(prev_calculated>0) to_copy++;
     }
//---- get ma buffers
   if(IsStopped()) return(0); //Checking for stop flag
   if(CopyBuffer(ExtEmaHandle,0,0,to_copy,ExtTempBuffer)<=0)
     {
      Print("getting ExtEmaHandle is failed! Error",GetLastError());
      return(0);
     }
//--- first calculation or number of bars was changed
   if(prev_calculated<InpBearsPeriod)
      limit=InpBearsPeriod;
   else limit=prev_calculated-1;
//--- the main loop of calculations
   for(i=limit;i<rates_total && !IsStopped();i++)
     {
      ExtBearsBuffer[i]=iCustom(NULL,0,"Downloads\\RSI Analytics"); \\--------------------------------------------
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
Технический индикатор RSI ANALYTICS
Технический индикатор RSI ANALYTICS
  • comentários: 5
  • 2013.11.01
  • STRAT ANALYTICS
  • www.mql5.com
Зачем нам RSI в отдельном окне, если его можно построить в основном окне графика, что гораздо более понятно? RSI ANALYTICS - это индикатор, следящий за рынком, созданный на основе той же идеи, что и традиционный RSI (индекс относительной силы). При этом он строится не в отдельном подокне, а в том же окне, что и график цены финансового...
 
Nilog:

Em mql4 utilizei o iCustom para fazer indicadores que utilizam os indicadores prontos de outra pessoa, apesar de não saber nada sobre programação... Já estou farto de intuição. Estou a usar mql5 mas nada funciona, por muito que tente compreendê-lo. Por favor, ajudem-me, por favor.

Tenho este indicador no ex5. Coloquei-o na minha pasta de Downloads. Quero pegar nas suas duas linhas e desenhá-las no gráfico noutros períodos, ou seja, fazer com que seja em multitempo com o iCustom.

Como não posso escrever um indicador a partir do zero, tomei o código de um simples indicador Bears Power. Não mudei nada lá, excepto a mudança da janela do indicador_chart e da linha DRAW_LINE e a linha, que, a meu ver, deveria retirar os dados do primeiro buffer com os parâmetros predefinidos da TF actual:

Tudo se compila, nada se desenha. De que mais precisa? :(

Em mql5 o trabalho com indicadores personalizados e padrão é organizado de forma diferente do que em mql4. Se em mql4 só se pode obter um valor indicador através do iCustom, em mql5 pode-se obter valores indicadores para toda a profundidade da história na matriz. A segunda grande diferença é a direcção da indexação nos amortecedores indicadores.

É enfadonho ver todo o código e compará-lo com o original, por isso vou apenas apontar os principais:

O ficheiro deve estar localizado na pasta dos Indicadores ou numa subpasta localizada nos mesmos Indicadores.

Aqui está a linha para obter o cabo indicador de MA

ExtEmaHandle=iMA(NULL,0,InpBearsPeriod,0,MODE_EMA,PRICE_CLOSE);

e este é o fio para obter o valor do indicador de MA

if(CopyBuffer(ExtEmaHandle,0,0,to_copy,ExtTempBuffer)<=0)

neste caso, para um amortecedor ou matriz adicional.

Acontece que para obter dados do indicador personalizado

ExtBearsHandle=iCustom(NULL,0,"RSI Analytics");
CopyBuffer(ExtBearsHandle,0,0,to_copy,ExtTempBuffer)

E depois pode processar os valores indicadores deste buffer adicional de alguma forma, ou pode colocá-los no buffer indicador sem esquecer a direcção da indexação.

 
Alexey Viktorov:


Obrigado! Escrevi algo tal como o entendi, e agora só aparece um erro ao compilar. Em linha

CopyBuffer(ExtBearsHandle,0,0,to_copy,ExtTempBuffer);

erroto_copy - identificador não declarado.

Em que secção e como a declaro?

 
Nilog:

Obrigado! Escrevi algo tal como o entendi, e agora só aparece um erro ao compilar. Em linha

erroto_copy - identificador não declarado.

Em que secção e como a declaro?

Tem de comparar as minhas dicas com o seu código e com o código fonte que já fixou. Esta variável é declarada nos referidos códigos. E, para além das minhas observações, deveria tentar compreender a lógica da construção de indicadores em geral, e não apenas mudar um pedaço de merda por um pedaço de merda.

 
No MetaTrader 5, pode uma EA trabalhar de forma diferente em moedas do que, por exemplo, no Índice RTS?
 
lil_lil:
No MetaTrader 5, o desempenho de uma EA num par cambial pode ser radicalmente diferente do desempenho, por exemplo, no Índice RTS?

O conselheiro irá trabalhar da forma como está escrito. E não de outra forma.

Quanto às nuances que devem ser consideradas: RTS é uma troca, daí o tipo NETTING de posições contabilísticas. Se a EA não for originalmente concebida para trabalhar na rede, o resultado é imprevisível.

 
Vladimir Karputov:

O conselheiro irá trabalhar da forma como está escrito. E não de outra forma.

Quanto às nuances que devem ser consideradas: RTS é uma troca, daí o tipo NETTING de posições contabilísticas. Se a EA não for originalmente concebida para trabalhar em rede, o resultado é imprevisível.

Se a sua EA não se destinaa trabalhar em rede, o resultado é imprevisível.

Não existem posições multidireccionais na estratégia.

 
lil_lil:

Obrigado, como sabe ao certo a partir do código se este foi concebidopara trabalhar em rede ou não.

Não há posições opostas na estratégia.

E, se assim for (sempre UMA posição no trabalho), então não há diferença - quer se trate de redes ou coberturas.

 
Vladimir Karputov:

Se for este o caso (há sempre UMA posição em funcionamento), não faz diferença se se trata de uma rede ou de uma cobertura.

Num sinal inverso em moedas (Forex) as posições são fechadas, mas não no câmbio. Onde procurar, o que procurar?

 
lil_lil:

Num sinal inverso em moedas, as posições são fechadas, mas não na troca. Onde procurar, o que procurar?

Procurar o local de onde vem o comando para fechar a posição.

Razão: