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

 

Saudações a todos os membros do fórum.

Por favor, ajude-me a conseguir que o indicador funcione com um símbolo específico, independentemente de qual gráfico ele esteja definido.

Eu sei que um parâmetro externo é usado para mudar o símbolo

input string   Symb   ="GBPJPY";
Eu não sei o que fazer a seguir

Estou anexando o indicador

Arquivos anexados:
Fisher.mq4  3 kb
 

Você pode me dizer como reiniciar o buffer quando uma nova barra aparece, mas para que os dados anteriores não sejam apagados, mas exibidos no gráfico. Por alguma razão não posso zerar o buffer e quando apareceuma nova barra, novos dados são sobrepostos aos antigos dados acumulados. O que estou errado em meu código? Obrigado pelo esclarecimento.

void OnInit()
{
   IndicatorDigits(0);
   SetIndexBuffer(0,Buf_1);
   SetIndexBuffer(1,Buf_2);
   Bid1=Bid;
  
   
}
 
 
//+------------------------------------------------------------------+
//| 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[])
{
   datetime Вр=Time[0];   // Время текущего бара
   if(Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
      Buf_1[0]=0;         // и обнулить последний элемент буфера
      Buf_2[0]=0;
   }
   
      
   if(Bid > Bid1) 
   {
   V1 = iVolume(NULL, 0, 0);
   V2 = V1 + V2;
   Buf_1[0]= V2;
   }                             
   else 
   {
   V3 = iVolume(NULL, 0, 0);
   V4 = V3 + V4;
   Buf_2[0]= (V4*-1);
   }
   Bid1=Bid;
   
   
  return(rates_total);
}
 
Alekseu Fedotov:

É assim que as coisas são


Tenho uma pergunta com o código, acontece que a vela atual não fechada tem a hora de fechar e até que a vela feche, o indicador desenha o fechamento do preço do período, no qual o indicador fica vermelho na área da tela que não deve ser desenhado porque a vela da hora não está fechada É o tempo de compilação e depois da compilação vem o desenho de cada vela fechada, claro que você pode resolver de outra maneira encontrando as barras de hora, mas eu queria uma maneira mais fácil, eu escrevi antes, então
for(i=limit; i>0; i--)
{
yesterday_weekday = TimeHour(iTime(Symbol(),0,i+1))-TimeHour(iTime(Symbol(),0,i));
if(yesterday_weekday!=0)

qualquer outra solução para o problema? Gostaria de vê-lo na compilação.

 
MakarFX: Ajude-me a fazer com que o indicador funcione com um símbolo específico, independentemente de qual tabela ele esteja definido.

É necessário escrever este parâmetro nos chamados Higest, Lowest - são obsoletos, melhores iHigest, iLowest e iLowest elogiado Fisher concordou imediatamente com um sorteio (V.Vysotsky)

 
PokrovMT5:
Tenho uma pergunta com o código, acontece que a vela atual de uma hora não fechada tem o tempo de fechamento e até que a vela feche, o indicador desenha o fechamento do preço do período em que o indicador está aceso, a área vermelha na tela não deve ser desenhada porque a vela de uma hora não está fechada É o momento da compilação e depois da compilação vem o desenho de cada candelabro fechado, claro que você pode resolver de outra maneira encontrando as barras de hora, mas eu queria uma maneira mais fácil, escrevi anteriormente, então

Existe outra solução para o problema? Obrigado.

Se eu entendi bem, você quer marcar o fechamento horário no gráfico?

// (только для TF меньше часа) для всех свечей внутри часа поставить HourCloseBuff=цена закрытия часа

// предполагается что close индексирован как тайм-серия

for(int back=i+1;back<=limit && TimeHour(time[back]==TimeHour(time[i+1]);back++) {

  HourCloseBuff[back]=close[i+1];

}

 
STARIJ:

Devemos escrever este parâmetro nas chamadas mais altas e mais baixas - elas são obsoletas, melhores iHigest, iLowest e o elogiado notório Fischer concordou imediatamente com um sorteio (V.Vysotsky)

#property  copyright "Copyright © 2005, Yura Prokofiev"
#property  link      "Yura.prokofiev@gmail.com"

#property  indicator_separate_window
#property  indicator_buffers 3
#property  indicator_color1  Black
#property  indicator_color2  Lime
#property  indicator_color3  Red
 
input string   Symb     ="GBPJPY";
extern int     period   =10;

double         ExtBuffer0[];
double         ExtBuffer1[];
double         ExtBuffer2[];


int init()
  {
   
   
   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2,Red);
   SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,2,Lime);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   IndicatorDigits(Digits+1);

   SetIndexBuffer(0,ExtBuffer0);
   SetIndexBuffer(1,ExtBuffer1);
   SetIndexBuffer(2,ExtBuffer2);

   IndicatorShortName("Fisher");
   SetIndexLabel(1,NULL);
   SetIndexLabel(2,NULL);

   return(0);
  }


int start()
  {
   //int     period=10;
   int    limit;
   int    counted_bars=IndicatorCounted();
   double prev,current,old;
   double Value=0,Value1=0,Value2=0,Fish=0,Fish1=0,Fish2=0;
   double price;
   double MinL=0;
   double MaxH=0;  
   

   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;


   for(int i=0; i<limit; i++)
    {  MaxH = High[iHighest(Symb,0,MODE_HIGH,period,i)];
       MinL = Low[iLowest(Symb,0,MODE_LOW,period,i)];
      price = (High[i]+Low[i])/2;
      Value = 0.33*2*((price-MinL)/(MaxH-MinL)-0.5) + 0.67*Value1;     
      Value=MathMin(MathMax(Value,-0.999),0.999); 
      ExtBuffer0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1;
      Value1=Value;
      Fish1=ExtBuffer0[i];
      
    }


   bool up=true;
   for(i=limit-2; i>=0; i--)
     {
      current=ExtBuffer0[i];
      prev=ExtBuffer0[i+1];
           
      if (((current<0)&&(prev>0))||(current<0))   up= false;    
      if (((current>0)&&(prev<0))||(current>0))   up= true;
      
      if(!up)
        {
         ExtBuffer2[i]=current;
         ExtBuffer1[i]=0.0;
        }
        
       else
         {
          ExtBuffer1[i]=current;
          ExtBuffer2[i]=0.0;
         }
     }

   return(0);
  }
Eu fiz, mas isso não resolve a questão para
price = (High[i]+Low[i])/2;
Alto e baixo usam o símbolo atual.
 
Maxim Kuznetsov:

Se eu entendi bem, você quer marcar o fechamento horário no gráfico?

// (только для TF меньше часа) для всех свечей внутри часа поставить HourCloseBuff=цена закрытия часа

// предполагается что close индексирован как тайм-серия

for(int back=i+1;back<=limit && TimeHour(time[back]==TimeHour(time[i+1]);back++) {

  HourCloseBuff[back]=close[i+1];

}

Maxim, bom dia! Obrigado pela variante, a minha é quase a mesma, também funciona, masAlekseu Fedotov o sugeriu e eu escrevi que há uma idéia de como corrigi-la?



for(i=limit; i>=0; i--)
     {
      T = iTime(NULL,0,i); 
      shift=iBarShift(NULL,60,T); 
      C=iClose(NULL,60,shift);
      CC[i]=C;
     }
 

Você pode me dizer como reiniciar o buffer quando uma nova barra aparece, mas para que os dados anteriores não sejam apagados, mas exibidos no gráfico. Por alguma razão não posso zerar o buffer e quandouma nova barraaparece, novos dados são sobrepostos aos antigos dados acumulados. O que estou errado em meu código? Obrigado pelo esclarecimento.

 datetime Вр=Time[0];   // Время текущего бара
   if(Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
      Buf_1[0]=0;         // и обнулить последний элемент буфера
      Buf_2[0]=0;
   }
   
      
   if(Bid > Bid1) 
   {
   V1 = iVolume(NULL, 0, 0);
   V2 = V1 + V2;
   Buf_1[0]= V2;
   }                             
   else 
   {
   V3 = iVolume(NULL, 0, 0);
   V4 = V3 + V4;
   Buf_2[0]= (V4*-1);
   }
   Bid1=Bid;
   
   
  return(rates_total);
 

Ninguém pode me ajudar?

 

Bom dia a todos vocês! Como posso mudar para a janela da tabela certa?

Tenho muitas janelas de diferentes pares abertas, cada uma com um EA, aparece um sinal comercial, mas as moedas estão à altura do filho da puta, e preciso ativar rapidamente o gráfico exato no qual o sinal veio.

Eu conheço o comando Symbol(), mas não sei como ativar a janela com um par de moedas especificado. Talvez, quem já enfrentou essa tarefa?