matriz estática ? - página 2

 
Ok, pelo menos eu estava quase no caminho certo, mas como eu não sabia sobre EMPTY_VALUE e como usá-lo, eu estava pensando em tentar detectar a mudança de valor, uma vez que a resistência e o valor de suporte permanecem os mesmos até os indicadores anteriores.

De qualquer forma, obrigado, vou ter que ler mais um pouco sobre isto, estou me aproximando, mas ainda está um pouco embaçado :)

Parece que estou demorando muito para aprender as coisas. Acho que preciso ler mais códigos de outras pessoas e tentar entendê-los para obter melhores idéias de design.

Obrigado pela resposta.
 
RaptorUK:
Há 2 amortecedores (matrizes) que seguram os valores de preço dos Fractais . . val1 & val2. Se você quiser encontrar valores fractais anteriores, simplesmente faça um loop, incrementando um valor de deslocamento, e verifique os valores de buffer até encontrar valores que não sejam VAZIO_VALOR ( https://docs.mql4.com/customind/SetIndexEmptyValue )
Ok, apenas pensando em voz alta aqui:

Para que eu possa fazer loop back v1[i] e v2[i] com algo 1++ código,

Eu não entendo val1>0 não é sempre maior que 0 exceto para High[0] ?

E por que val1 apenas marca o alto fractal e não todo o Alto[i] AHHH eu acho que vejo porque a declaração se diz para fazer apenas o Alto[i]'s

Então ok, deixe-me pensar um pouco mais.

val1 são os fractais, entretanto v1[i] são apenas a altura fractal está ok, acho que consegui resolver esta parte.

Então eu poderia fazer um loop v1[i] 1++ de alguma forma (terei que trabalhar essa parte) até o ponto anterior antes do EMPTY_VALUE e este seria o anterior Alto[i] fractal.

Estou me aproximando?
 
Agent86:
Ok, apenas pensando em voz alta aqui:

val1 são os fractais, entretanto v1[i] são apenas a altura fractal está ok, acho que consegui resolver esta parte.

Então eu poderia fazer um loop v1[i] 1++ de alguma forma (terei que trabalhar essa parte) até o ponto anterior antes do EMPTY_VALUE e este seria o anterior High[i] fractal.

Estou me aproximando?
Correto . . . . :-)
 
RaptorUK:
Correto . . . . :-)
Whew ! Eu estava preocupada

Obrigado
 
Eu tenho algo errado, posso colocar 0 para EMPTY_VALUE e ele imprime 0 continuamente para que isso não esteja certo, talvez isso esteja certo, mas não o meu efeito desejado.

De qualquer forma:

//+------------------------------------------------------------------+
//|                                                  Agent86_5min.mq4 |
//|                                                    Unfinished POS |
//|                                    
//+------------------------------------------------------------------+
#property copyright "Unfinished POS by Agent86"


//---- input parameters
extern double    TakeProfit=20.0;
extern double    Lots=0.1;
extern double    StopLoss=15.0;
extern int MagicNumber=123486;

double v1[];
double v2[];
double val1;
double val2;

//++++ These are adjusted for 5 digit brokers.

int     pips2points;    // slippage  3 pips    3=points    30=points
double  pips2dbl;       // Stoploss 15 pips    0.0015      0.00150
int     Digits.pips;    // DoubleToStr(dbl/pips2dbl, Digits.pips)

    // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   if (Digits == 5 || Digits == 3)
   {    // Adjust for five (5) digit brokers.
      pips2dbl    = Point*10; pips2points = 10;   Digits.pips = 1;
   } 
   else 
    {    
      pips2dbl    = Point;    pips2points =  1;   Digits.pips = 0; 
    }
    // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
     
   
    
//---- 

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
   
    
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  
  
   double   faster = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1), //MODE_MAIN
            slower = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); //MODE_SIGNAL
            
   int i=Bars;         
   
   while(i>=0)
     {
      val1=iFractals(NULL, 0, MODE_UPPER,i);
      if (val1 > 0) v1[i]=High[i];
      else          v1[i]=v1[i+1];

      val2=iFractals(NULL, 0, MODE_LOWER,i);
      if (val2 > 0) v2[i]=Low[i];
      else          v2[i]=v2[i+1];
      
      i--;
     }
   
    for(val1=High[i]; v1[i] == EMPTY_VALUE ;i++)
      {
      Print (v1[i]);
      } 
  
//----
            
                       
            

           

//---- 

 
                    
        

                
   return(0);
  }    

//+------------------------------------------------------------------+
Pensei que o loop for me teria levado de volta apenas um sinal e impresso o nível de sinal para mim. mas não recebo nada ou 0

Depois de alguns dias pensando nisso e tentando muitas coisas, e mesmo assim tentei fazer essas mudanças na versão indicadora também adicionando um terceiro buffer e tentando sinalizar com o preço nos gráficos, mas isso também tem sido um "não".


Bem, espere, retiro a versão curta da EA que eu não tenho o buffer EMPTY_VALUE para que provavelmente não funcione de qualquer forma, e assim a idéia era testar a EA para que eu pudesse ver as funções de impressão para ver os resultados, mas a versão indicadora que eu teria que esperar para que eu tivesse que postar de volta sobre isso como acontece.

De qualquer forma, aqui está a versão indicadora, mas não me sinto confiante sobre isso porque não estou exatamente certo se devo tentar fazer um loop dentro da declaração while ou criar um novo loop e recriar o val1 = .... novamente também.

//+------------------------------------------------------------------+
//|                Support and Resistance                            |
//|                Copyright © 2004/5     Barry Stander              |
//|                http://www.4Africa.net/4meta/                     |
//+------------------------------------------------------------------+

#property copyright "Support and Resistance             Barry_Stander_4@yahoo.com"
#property link      "http://www.4Africa.net/4meta/"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 White

//---- buffers
double v1[];
double v2[];
double v3[];
double val1;
double val2;
double val3;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
//----
   IndicatorBuffers(2);

   SetIndexArrow(0, 159);
   SetIndexStyle(0,DRAW_ARROW,STYLE_DOT,1,Red);
   SetIndexBuffer(0, v1);
   SetIndexLabel(0,"Resistance");
   SetIndexEmptyValue(0,0.0);

   SetIndexArrow(1, 159);
   SetIndexStyle(1,DRAW_ARROW,STYLE_DOT,1,Blue);
   SetIndexBuffer(1, v2);
   SetIndexLabel(1,"Support");
   SetIndexEmptyValue(1,0.0);
   
   SetIndexArrow(2, 225);
   SetIndexStyle(2,DRAW_ARROW,STYLE_DOT,1,White);
   SetIndexBuffer(2, v3);
   SetIndexLabel(2,"High A");
   SetIndexEmptyValue(2,0.0); 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   
   
   int i=Bars;
//----
   while(i>=0)
     {
      val1=iFractals(NULL, 0, MODE_UPPER,i);
      if (val1 > 0) v1[i]=High[i];
      else          v1[i]=v1[i+1];

      val2=iFractals(NULL, 0, MODE_LOWER,i);
      if (val2 > 0) v2[i]=Low[i];
      else          v2[i]=v2[i+1];
      
      i--;      
       
      }
      
     
     for(val1=High[i]; v1[i] == 0 ;i++)  // or v1[i] == EMPTY_VALUE
      {
      Print (v1[i]);
      }
       
     
     
     
//----
   return(0);
  }
//+------------------------------------------------------------------+
bem, eu abandonei a tentativa de obter o terceiro buffer / sinal a ser criado por enquanto e só quero ver se consigo imprimir o resultado do sinal anterior

VAZIO_VALOR a maneira como eu coloco o código inicializa o indicador, mas isso não é nada de impressão
 

Você pode explicar como isso funciona para o loop?

for(val1=High[i]; v1[i] == 0 ;i++)

 
RaptorUK:

Você pode explicar como isso funciona para o loop?

for(val1=High[i]; v1[i] == 0 ;i++)

Acho que eu estava pensando que, uma vez que a declaração de enquanto e v1[i] armazena os altos e i -- conta para baixo a partir do Bars mais alto, então eu simplesmente contaria novamente para cima enquanto v1[i] == VAZIO_VALOR

Eu pensei que isso aumentaria i++ para 1 nível até a alta anterior, bem, na verdade acho que passaria isso para o próximo EMPTY_VALUE

Então eu preciso fazer isso da maneira oposta v1[i] = Alto[i]; i++

Então isto não deveria me levar à Alta anterior, mas não tenho certeza de como inicializá-la corretamente.

Vou continuar trabalhando nisso.
 
Estou mudando para um "se" (só quero ver qualquer coisa impressa neste momento para poder ao menos ver o que o indicador está fazendo.

Tudo o que recebo é 0's para que realmente NÃO haja valores quando = Imprimir (v1[i]);
O que é estranho porque como eu tenho o indicador funcionando neste ponto então ?

Bem, vou continuar trabalhando nele.
 
Agent86:
Eu estou mudando para um if( Eu só quero ver qualquer coisa impressa neste ponto para que eu possa ao menos ver o que o indicador está fazendo.

Tudo o que recebo é 0's para que realmente NÃO haja valores quando = Imprimir (v1[i]);
O que é estranho porque como eu tenho o indicador funcionando neste ponto então ?

Bem, vou continuar trabalhando nele.


Talvez você esteja vendo apenas valores para v1[0] ? imprimir i ao mesmo tempo ...

Print ("v1[", i, "]= ", v1[i]);
 
2011.09.17 11:56:15     2011.01.03 09:24  Agent86_5min EURUSD,M5: v1[-1]= 0
hmm interessante
Não postei tudo, mas todas as linhas leram o mesmo = 0

Achei que ainda deveria ver um valor real para v1[0] ?

como pode ser sempre 0 quando o indicador deve ser if(>0) ?

Talvez eu esteja entrando em outra área que desconheço.

Pensei que poderia ser capaz de imprimir para tentar entender o que e por que todas as minhas tentativas estão falhando; e para que eu pudesse incrementar i++ de alguma forma para chegar ao próximo fractal e depois, de alguma forma, descobrir como usar esta informação para alguma coisa.


Posso imprimir High[i] ou v1[i] e é sempre 0

Imprimir High[0] ou High[1] também 0

Embora eu entenda o que você postou e imprimir i valor que parece estar preso por causa do i-- loop que sempre o leva a 0, mas mesmo assim deve imprimir um valor para i, como pelo menos eu pensava.

E entendo porque está imprimindo [-1] porque i=Bars. Eu entendo isto, mas =0 ?