[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 537

 
Pacman:

Olá a todos.

Ajude-me a acertar o código.

Quando a primeira condição Bid > Line_2 é atendida, a segunda condição RSI<30 é perdida, ou seja, a linha indicadora RSI vai acima do valor 30.

Como vincular corretamente duas condições?

Se alguém já viu tal implementação, por favor, me dê um link.

A maneira mais fácil e eficaz é procurar no CodaBase pela palavra "RSI" em EAs já implementados.
 
Quero repetir minha pergunta. Tenho um indicador (o indicador superior na figura) que dá SOMENTE estes sinais.
Preciso transformar estes sinais em um sinal "sólido" (indicador inferior na imagem).
Ajude se você souber como fazer isso!

P.S.

O indicador MACD na figura é usado apenas para ilustrar meu problema.



Eu recebi uma resposta de TaraasBY (pelo qual muito obrigado):

Você preenche o buffer indicador, caso não haja nenhum valor nele, com o valor anterior (não vazio):

if (gda_BUF1[pos] == EMPTY_VALUE) 
    {
        if (gda_BUF1[pos+1] != EMPTY_VALUE) gda_BUF1[pos] = gda_BUF1[pos+1];
       
    }


Mas não funciona para mim. Como ligar ExtMapBuffer1[i] e ExtMapBuffer1[pos]?

Quero repetir esse indicador da MACD apenas por exemplo! Como repetir nele a construção acima mencionada?

#property indicator_separate_window
#property indicator_minimum -1.5
#property indicator_maximum 1.5
#property indicator_buffers 1
#property indicator_color1 Aqua
#property  indicator_width1  2
#property indicator_level1 0.0
//--- buffers
double ExtMapBuffer1[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMapBuffer1);
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
     int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
   
      if((iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+2)<iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+2))&&
         (iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+1)>iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+1)))
       {
        ExtMapBuffer1[i]=1;
       }
      else
       {
        
       
       
      if((iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+2)>iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+2))&&
         (iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+1)<iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+1)))
       {
        ExtMapBuffer1[i]=-1;
       }
      else
       {
        ExtMapBuffer1[i]=0;
       }
      }
      
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
MK07:

Como posso conectar o ExtMapBuffer1[i] e o ExtMapBuffer1[pos]?

Aqui está o código do indicador. Quero repetir que o indicador MACD é apenas por exemplo, como posso repetir a estrutura acima mencionada nele?

Assim (como aplicado ao MACD):

int start()
  {
     int counted_bars=IndicatorCounted(),
       limit;  
     static int li_preSignal = 0;
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
   
      if((iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+2)<iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+2))&&
         (iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+1)>iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+1)))
       {
        ExtMapBuffer1[i]=1;
        li_preSignal = 1;
       }
      else
       {
        
       
       
      if((iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+2)>iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+2))&&
         (iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i+1)<iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+1)))
       {
        ExtMapBuffer1[i]=-1;
        li_preSignal = -1;
       }
      else {ExtMapBuffer1[i] = li_preSignal;}
      }
      
 
//----
   return(0);
  }
 
TarasBY:
A maneira mais fácil e eficaz é procurar no CodaBase a palavra "RSI" nos EAs já implementados.

Obrigado, vou continuar procurando.
 
TarasBY:

Assim (como aplicado ao MACD):

Obrigado, está funcionando, mas apenas um bar MAIS TARDE! Há mais alguma coisa que você possa fazer?

 
TarasBY:

Assim (como aplicado ao MACD):

Sua versão anterior com ExtMapBuffer1[pos] faz mais sentido para mim e parece ser mais universal.
 
MK07:

Obrigado, está funcionando, mas apenas um bar MAIS TARDE! Há mais alguma coisa que você possa fazer?

Tente isto.

Arquivos anexados:
 

Vinin
:


Nenhuma interseção estocástica encontrada (quero dizer código)

// Обращение к функции техн.индикат.
   
   M_1=iStochastic(NULL,0,Kperiod,Dperiod,Slowing,MODE_SMMA,Price_field,MODE_MAIN,  1);
   M_2=iStochastic(NULL,0,Kperiod,Dperiod,Slowing,MODE_SMMA,Price_field,MODE_MAIN,  2);
   S_1=iStochastic(NULL,0,Kperiod,Dperiod,Slowing,MODE_SMMA,Price_field,MODE_SIGNAL,1);
   S_2=iStochastic(NULL,0,Kperiod,Dperiod,Slowing,MODE_SMMA,Price_field,MODE_SIGNAL,2);

                        // Анализ ситуации
   
   if (M_2 < S_2 && M_1==S_1)                    // Условие откр. Buy и закр. Sell 
     {
      if (Total>0)
        {
        Close_Order_S(Ticket,Ans,Lts); 
        }
      
        Ticket = Open_Order_B(StopLoss,Lts); 
                                                                         
     } 
   if (M_2 > S_2 && M_1==S_1)                    // Условие откр. Sell и закр. Buy        
     {  
      if (Total>0)
        {
        Close_Order_B(Ticket,Ans,Lts);   
        }                           
      
        Ticket = Open_Order_S(StopLoss,Lts); 
 
granit77:

Tente desta forma.




Obrigado, funcionou.
 
Equilibrium:



Onde fica o cruzamento?

Leia sobre a comparação de números reais