[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 144

 
iMAG:
Para deixar claro, tente olhar para GetLastError() após o operador da tarefa - ele deve ajudar com a avaria. Pelo menos, tudo funciona bem no exemplo acima. ;)


int init()
{
//
// i = 0;
double s[10] = {,,3,4,5,6,7,8,9};
int i = 0;

while(i < 10)
{
s[i] = i + 10;
i++;
Print("s[i]: ", DoubleToStr(s[i], 2), " i: ", i, "GetLastError(): ", GetLastError());

Sleep(5000);
}

//----

return(0);
}

Aqui está um exemplo: o valor (i + 10) não é atribuído. Com esta inicialização, apenas através de uma série de ordens - quais são os segredos?


 

Stepan2

Obras

int init()
  {
//----
double s[11];
// i = 0;
int i = 0;

while(i < 10)
{
s[i] = i*10;
i++;
Print("s[i]: ", DoubleToStr(s[i], 2), " i: ", i, "   GetLastError(): ", GetLastError());

Sleep(5000);
}

   return(0);
  }

 
GaryKa:
Rasguei meu cérebro ... Um kg de tomate vale menos que rublos, então os tomates ficam mais caros? Por que eles dizem que estão ficando mais baratos?


Ou seja, um dólar, seja no numerador ou denominador, é sempre DINHEIRO (mesmo em majores), o resto é "Mercadorias".

É assim que funciona?

E as cruzes? Como você sabe o que dividir pelo quê ao formar uma cruz?

Ou seja, por que uma moeda está necessariamente no numerador e a outra no denominador e não o contrário?

 
r772ra:

Stepan2

Obras


o que você quer dizer com isso?

Esse terminal depende de um BROKER!

 
Space:


Ou seja, um dólar, quer esteja no numerador ou denominador é sempre DINHEIRO (mesmo em majores), o resto é "COMÉRCIO".

É assim que funciona?

E as cruzes? Como você sabe o que dividir pelo quê ao formar uma cruz?

Ou seja, por que uma moeda está necessariamente no numerador e a outra no denominador, e não o contrário?


O processo de aprendizagem é o seguinte:

DIVISÃO - consecutiva, mas na direção oposta

RUNNING - Roteiro de Ação

 
Stepan2:


o que você quer dizer com isso?

QUE o terminal depende do BROKER!

Não posso dizer nada sobre o corretor, é improvável que haja algo de errado com o corretor.

E para o código, talvez eu esteja errado.

Você declarou uma matriz e a preencheu

double s[10] = {,,,3,4,5,6,7,8,9}; 

e você mostra estes números, sim, se dobrar, então 1,0, 2,0, etc.

No meu caso

double s[11];

Precisa ser um pouco maior para evitar o erro (4002).

e preenche o loop, portanto, sim, eu não o recebo ...... apenas através de uma série de pedidos .....

 

Aconselho, coloquei dois MACD (Macd1 e Macd2) na mesma janela e na mesma escala. Acho o máximo e o mínimo de cada MACD apenas entre os valores gráficos visíveis na janela indicadora. Coloquei-os em Comentário(). Tudo funciona, mas as linhas de sinal começam a desenhar desde a primeira barra, ou seja, tenho que esperar até que preencham toda a janela. Como resolver este problema? E como posso otimizar meu código incômodo?

  
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_color3 Aqua
#property indicator_color4 DarkOrange
#property  indicator_width1  2
#property  indicator_width3  2
//--- buffers
double Macd1Buffer[];
double Signal1Buffer[];
double Macd2Buffer[];
double Signal2Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,Macd1Buffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,Signal1Buffer);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,Macd2Buffer);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(3,Signal2Buffer);
   
   IndicatorDigits(Digits);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   Comment("");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {   
      double max1=-0.01,min1=0.01,
             max2=-0.01,min2=0.01,
             max_M1=-0.01,min_M1=0.01,
             max_M2=-0.01,min_M2=0.01,
             max_S1=-0.01,min_S1=0.01,
             max_S2=-0.01,min_S2=0.01;
             
       
 
   int bars_counted=WindowBarsPerChart()-1,
       limit;  
       limit=bars_counted;       


      
//---- macd counted in the 1-st buffer
   for(int i=0; i<limit; i++)
   

   { 
     Macd1Buffer[i]=iMA(NULL,0,6,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i);
  
           max_M1=MathMax(Macd1Buffer[i],max_M1);
           min_M1=MathMin(Macd1Buffer[i],min_M1);
  
      Signal1Buffer[i]=iMAOnArray(Macd1Buffer,Bars,5,0,MODE_SMA,i);
 
           max_S1=MathMax(Signal1Buffer[i],max_S1);
           min_S1=MathMin(Signal1Buffer[i],min_S1);         
             
           max1=MathMax(max_M1,max_S1);
           min1=MathMin(min_M1,min_S1);
             
   }          
            
      
//---- done
   //---- macd counted in the 3-st buffer   
   for(i=0; i<limit; i++) 
      
   { 
     
      Macd2Buffer[i]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i);
 
          
           max_M2=MathMax(Macd2Buffer[i],max_M2);
           min_M2=MathMin(Macd2Buffer[i],min_M2);
           
   
      Signal2Buffer[i]=iMAOnArray(Macd2Buffer,Bars,9,0,MODE_SMA,i);

           max_S2=MathMax(Signal2Buffer[i],max_S2);
           min_S2=MathMin(Signal2Buffer[i],min_S2);  
         
           max2=MathMax(max_M2,max_S2);
           min2=MathMin(min_M2,min_S2);    
   }      
      
//---- done 
   
 
      Comment( "\n"," Баров = ",WindowBarsPerChart()-1,
               "\n"," max_M1 = ",max_M1,
               "\n"," min_M1 = ",min_M1,
               "\n"," max_S1 = ",max_S1,
               "\n"," min_S1 = ",min_S1,
               "\n"," max_M2 = ",max_M2,
               "\n"," min_M2 = ",min_M2,
               "\n"," max_S2 = ",max_S2,
               "\n"," min_S2 = ",min_S2,
               "\n"," max1 = ",max1,
               "\n"," min1 = ",min1,    
               "\n"," max2 = ",max2,
               "\n"," min2 = ",min2);
         
             
         
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
MK07:

Aconselho, coloquei dois MACD (Macd1 e Macd2) na mesma janela e na mesma escala. Acho o máximo e o mínimo de cada MACD apenas entre os valores gráficos visíveis na janela indicadora. Coloquei-os em Comentário(). Tudo funciona, mas as linhas de sinal começam a desenhar desde a primeira barra, ou seja, tenho que esperar até que preencham toda a janela. Como resolver este problema? E como posso otimizar meu código incômodo?

Tente, cada tampão em um loop separado.
 
r772ra:
Experimente, cada tampão em um loop separado.
Sim.
   for(int i=0; i<limit; i++)
   { 
     Macd1Buffer[i]=iMA(NULL,0,6,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i);
     Macd2Buffer[i]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i);   
   }          

   for(i=0; i<limit; i++) 
   { 
      Signal1Buffer[i]=iMAOnArray(Macd1Buffer,Bars,5,0,MODE_SMA,i);
      Signal2Buffer[i]=iMAOnArray(Macd2Buffer,Bars,9,0,MODE_SMA,i);
   }      
 

Obrigado pelos conselhos. Tudo funciona, mas quando você instala o indicador é desenhado de forma estranha (veja gráfico). O recuo (em barras) da margem esquerda da janela do gráfico até a linha vertical amarela é sempre INSTITUÍDO para QUALQUER número de barras visíveis na janela e é igual a oito barras. Uma vez que estas oito barras ultrapassam o limite da janela esquerda, TODAS as linhas do gráfico aparecem imediatamente e então tudo é normal. Pode ser fixado e como?


#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_color3 Aqua
#property indicator_color4 DarkOrange
#property  indicator_width1  2
#property  indicator_width3  2
//--- buffers
double Macd1Buffer[];
double Signal1Buffer[];
double Macd2Buffer[];
double Signal2Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,Macd1Buffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,Signal1Buffer);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,Macd2Buffer);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(3,Signal2Buffer);
   
   IndicatorDigits(Digits);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   Comment("");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {   
      double max1=-0.01,min1=0.01,
             max2=-0.01,min2=0.01,
             max_M1=-0.01,min_M1=0.01,
             max_M2=-0.01,min_M2=0.01,
             max_S1=-0.01,min_S1=0.01,
             max_S2=-0.01,min_S2=0.01;
             
       
 
   int bars_counted=WindowBarsPerChart()-1,
       limit;  
       limit=bars_counted;       


      
//---- macd counted in the 1-st buffer
   for(int i=0; i<limit; i++)
   
   { 
     Macd1Buffer[i]=iMA(NULL,0,6,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i);
     Macd2Buffer[i]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i);
      
           max_M1=MathMax(Macd1Buffer[i],max_M1);
           min_M1=MathMin(Macd1Buffer[i],min_M1);
           
           max_M2=MathMax(Macd2Buffer[i],max_M2);
           min_M2=MathMin(Macd2Buffer[i],min_M2);
   }
   
   for( i=0; i<limit; i++)
           
   {
      Signal1Buffer[i]=iMAOnArray(Macd1Buffer,Bars,5,0,MODE_SMA,i);
      Signal2Buffer[i]=iMAOnArray(Macd2Buffer,Bars,9,0,MODE_SMA,i);
      
           
           max_S1=MathMax(Signal1Buffer[i],max_S1);
           min_S1=MathMin(Signal1Buffer[i],min_S1);
           
           max_S2=MathMax(Signal2Buffer[i],max_S2);
           min_S2=MathMin(Signal2Buffer[i],min_S2);         
   }          
           max1=MathMax(max_M1,max_S1);
           min1=MathMin(min_M1,min_S1);
             
           
            
      

//---- done 
   
 
      Comment( "\n"," Баров = ",WindowBarsPerChart()-1,
               "\n"," max_M1 = ",max_M1,
               "\n"," min_M1 = ",min_M1,
               "\n"," max_S1 = ",max_S1,
               "\n"," min_S1 = ",min_S1,
               "\n"," max_M2 = ",max_M2,
               "\n"," min_M2 = ",min_M2,
               "\n"," max_S2 = ",max_S2,
               "\n"," min_S2 = ",min_S2,
               "\n"," max1 = ",max1,
               "\n"," min1 = ",min1,    
               "\n"," max2 = ",max2,
               "\n"," min2 = ",min2);
         
             
         
//----
   return(0);
  }
//+------------------------------------------------------------------+