Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 409

 
RomanRott:

Pretendo prescrever algum código em meu indicador/conselheiro, que conectaria imediatamente alguns outros indicadores ao ligar
Que tipo de código?

Algo me diz que é para o testador. Isto é resolvido em meio clique sem programação. Quando você cria um modelo com todos os indicadores necessários e lhe dá o nome "Testador" ou o nome do consultor. Então, quando você executa o consultor no testador, um gráfico será aberto com os indicadores já definidos.

 
RomanRott:

Pretendo escrever algum código em meu indicador/conselheiro, que conectaria imediatamente alguns outros indicadores ao ligar
O que e como eu adiciono?

Eu tenho muitas variantes. Por exemplo 1) GráficoAplicarTemplate - aplica ao gráfico o modelo especificado (o modelo mostra o indicador). 2) Adicionar o código do indicador a ser incluído no indicador. 3) No Expert Advisor, exibir o indicador por objetos gráficos. 4) ...
 

Olá, você pode me aconselhar, eu preciso integrar o indicador Vinini_HMA em um EA, eu consegui conectá-lo e obter dados via recurso e iCustom, mas os testes se tornaram muito lentos. Por favor, informe como fazer com que os valores indicadores sejam calculados na própria EA, eu preciso apenas de um parâmetro para as 3 últimas velas.

Aqui está o código do indicador:

#property indicator_chart_window 
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Green 
#property indicator_color3 Red 
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2

//---- input parameters 
extern int period=15; 
extern int method=3; // MODE_SMA 
extern int price=0; // PRICE_CLOSE 
extern int sdvig=0;
//---- buffers 

double Uptrend[];
double Dntrend[];
double ExtMapBuffer[];

double vect[]; 

//+------------------------------------------------------------------+ 
//| Custom indicator initialization function | 
//+------------------------------------------------------------------+ 
int init() { 
   IndicatorBuffers(4); 
   SetIndexBuffer(0, ExtMapBuffer); 
   SetIndexBuffer(1, Uptrend); 
   SetIndexBuffer(2, Dntrend); 
   SetIndexBuffer(3, vect); 
   
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_LINE);

   SetIndexDrawBegin(0,1*period);
   SetIndexDrawBegin(1,2*period);
   SetIndexDrawBegin(2,3*period);

   IndicatorShortName("Signal Line("+period+")"); 
   SetIndexLabel(1,"UP");
   SetIndexLabel(2,"DN");
   return(0); 
} 

//+------------------------------------------------------------------+ 
//| Custor indicator deinitialization function | 
//+------------------------------------------------------------------+ 
int deinit() { return(0); } 

//+------------------------------------------------------------------+ 
//| ?????????? ??????? | 
//+------------------------------------------------------------------+ 
double WMA(int x, int p) { return(iMA(NULL, 0, p, 0, method, price, x+sdvig)); } 

//+------------------------------------------------------------------+ 
//| Custom indicator iteration function | 
//+------------------------------------------------------------------+ 
int start() { 
   int counted_bars = IndicatorCounted(); 

   if (counted_bars < 0) return(-1); 
   if (counted_bars > 0) counted_bars--;
   
   int p = MathSqrt(period); 

   int i, limit0,limit1,limit2;
   
   limit2=Bars - counted_bars;
   limit1=limit2;
   limit0=limit1;

   if (counted_bars==0){
      limit1-=(period);
      limit2-=(2*period);
   }

   for(i = limit0; i >= 0; i--)    vect[i]          = 2*WMA(i, period/2) - WMA(i, period); 
   for(i = limit1; i >= 0; i--)    ExtMapBuffer[i]  = iMAOnArray(vect, 0, p, 0, method, i); 
   for(i = limit2; i >= 0; i--) { 
      Uptrend[i] = EMPTY_VALUE; if (ExtMapBuffer[i]> ExtMapBuffer[i+1]) Uptrend[i] = ExtMapBuffer[i]; `  AZ4
      Dntrend[i] = EMPTY_VALUE; if (ExtMapBuffer[i]< ExtMapBuffer[i+1]) Dntrend[i] = ExtMapBuffer[i]; 
   }
   return(0); 
} 

Preciso calcular os últimos 3 valores que estão no bufferExtMapBuffer[i]. Sou um principiante, não julgue severamente. Tentei inserir estes fragmentos de código no Expert Advisor, mas os valores são calculados de forma incorreta

extern int period1=14;
extern int method1=3;
extern int price1=0;
extern int sdvig1=0;

-----------------------------------------------------
.
int p = MathSqrt(period1);      
        
        int z = 3;
        double vect[];
        ArrayResize(vect,z);
        
for(int i = 2; i >= 0; i--) vect[i] = 2*WMA(i, period1/2) - WMA(i, period1);
                
        int y = 3;;
        double HMA[];
        ArrayResize(HMA,y);
        
for(i = 2; i >= 0; i--) HMA[i]  = iMAOnArray(vect, 0, p, 0, method, i);

-------------------------------------------------------

double WMA(int x, int p) { return(iMA(NULL, 0, p, 0, method1, price1, x+sdvig1)); }

Eu realmente preciso disso! Obrigado! Obrigado de antemão! E lamentamos a longa mensagem.

Arquivos anexados:
123.png  22 kb
 

Eu acabo com 3 valores vect[0], vect[1], vect[2]. Mas eu preciso dos valores HMA. HMA[0] é calculado mas não está correto. HMA[1] e HMA[2] são zero.

 
ilfat85:

Eu acabo com 3 valores vect[0], vect[1], vect[2]. Mas eu preciso dos valores HMA. HMA[0] é calculado mas não está correto. HMA[1] e HMA[2] são zero.

Acho que já foi discutido nesta página... Você já tentou entrar em contato com o autor?
 
ilfat85:

Olá, você pode me aconselhar, eu preciso integrar o indicador Vinini_HMA em um EA, eu consegui conectá-lo e obter dados via recurso e iCustom, mas os testes se tornaram muito lentos. Por favor, informe como fazer com que os valores indicadores sejam calculados na própria EA, eu preciso apenas de um parâmetro para as 3 últimas velas.

Aqui está o código do indicador:

Preciso calcular os últimos 3 valores que estão no bufferExtMapBuffer[i]. Sou um principiante, não julgue severamente. Tentei inserir estes fragmentos de código no Expert Advisor, mas os valores são calculados de forma incorreta

Eu realmente preciso disso! Obrigado! Obrigado de antemão! E lamentamos a longa mensagem.

Para o testador, não conecte um recurso - ele é lento (não se aplica a este indicador específico, mas a todos - todos os recursos são lentos no testador).

Conecte simplesmente através de iCustom() a partir da localização do arquivo em sua pasta (não a partir do recurso)

 
STARIJ:
Acho que isso já foi discutido nesta página... Você já tentou entrar em contato com o autor?

Vitya muito raramente aparece aqui.

 
STARIJ:
Acho que já foi discutido nesta página... Você já tentou entrar em contato com o autor?

Há ali uma questão ligeiramente diferente, eles obtêm os valores do indicador, e eu queria que os valores fossem calculados diretamente na EA. As fórmulas parecem ser simples, mas eu cometi um erro em algum lugar. Eu não entrei em contato com o autor, não entrei em contato. Obrigado pela dica, vou tentar escrever a ele.

 
Artyom Trishkin:

Para o testador, não conecte um recurso - ele abranda (não se aplica a este indicador em particular, mas a todos - dos recursos abranda no testador).

Conecte simplesmente via iCustom() a partir da localização do arquivo em sua pasta (não a partir do recurso)


Obrigado! Não sabia disto, vou tentar desta maneira.

 

Olá. Estou fazendo um gráfico de barras com base no tamanho das velas. Ajude-me a saber que o tamanho da primeira vela é a maior das dez últimas velas. A barra do histograma deve ser marcada de alguma forma, por largura ou cor. Talvez você também devesse acrescentar um amortecedor.

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,limit = Bars-1;
//--- counting from 0 to rates_total
   

//--- the main loop of calculations
   for(i = limit; i >= 0; i--)
     {
      if (hl) ExtATRBuffer[i] = (iHigh(Symbol(),Period(),i) - iLow(Symbol(),Period(),i)); 
                        
      else    ExtATRBuffer[i] = MathAbs(iOpen(Symbol(),Period(),i) - iClose(Symbol(),Period(),i));
      
      if (ExtATRBuffer[i] < x) ExtATRBuffer[i] = 0;
    
    //
      
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
п
Razão: