array statico ? - pagina 2

 
Ok, almeno ero quasi sulla strada giusta ma dato che non sapevo di EMPTY_VALUE e come usarlo pensavo di provare a fare un loopback per rilevare il cambiamento di valore dato che la resistenza e il valore di supporto rimangono gli stessi fino agli indicatori precedenti.

Comunque, grazie, dovrò leggere di più su questo, mi sto avvicinando ma è ancora un po' nebbioso :)

Sembra che mi ci voglia troppo tempo per imparare le cose. Penso di dover leggere di più i codici degli altri e cercare di capirli per avere migliori idee di design.

Grazie per la risposta.
 
RaptorUK:
Ci sono 2 buffer (array) che contengono i valori dei prezzi dei frattali. . . val1 & val2. Se vuoi trovare i valori precedenti dei frattali devi semplicemente fare un loop, incrementando un valore di shift, e controllare i valori del buffer finché non trovi quelli che non sono EMPTY_VALUE ( https://docs.mql4.com/customind/SetIndexEmptyValue )
Ok, sto solo pensando ad alta voce qui:

Quindi posso eseguire il loop v1[i] e v2[i] con qualcosa di codice 1++,

Non capisco val1>0 non è sempre maggiore di 0 tranne che per High[0] ?

E perché val1 segna solo il frattale alto e non tutti gli High[i] 'AHHH Penso di capire perché l'istruzione if gli dice di fare solo gli High[i]

Quindi ok, fammi pensare ancora un po'.

val1 è il frattale, tuttavia v1[i] sono solo i frattali alti ok penso di aver capito questa parte.

Quindi potrei fare un loop v1[i] 1++ in qualche modo (devo risolvere questa parte) fino al punto precedente a EMPTY_VALUE e questo sarebbe il frattale precedente High[i].

Mi sto avvicinando?
 
Agent86:
Ok, sto solo pensando ad alta voce qui:

val1 è il frattale, tuttavia v1[i] sono solo i frattali alti ok, penso di aver capito questa parte.

Quindi potrei fare un loop v1[i] 1++ in qualche modo (devo risolvere questa parte) fino al punto precedente a EMPTY_VALUE e questo sarebbe il frattale precedente High[i].

Mi sto avvicinando?
Corretto . . . :-)
 
RaptorUK:
Corretto. . . :-)
Whew! Ero preoccupato

Grazie
 
Ho sbagliato qualcosa, posso mettere 0 per EMPTY_VALUE e stampa continuamente 0 quindi non è giusto, forse è giusto ma non è l'effetto desiderato.

Comunque sia:

//+------------------------------------------------------------------+
//|                                                  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);
  }    

//+------------------------------------------------------------------+
Ho pensato che il ciclo for mi avrebbe portato indietro solo un segnale e stampato il livello del segnale per me. ma non ottengo nulla o 0

Dopo alcuni giorni a pensarci e a provare molte cose, ho provato a fare queste modifiche alla versione dell'indicatore aggiungendo anche un terzo buffer e cercando di segnalare con il prezzo sui grafici, ma anche questo è stato un nulla di fatto.


Beh, aspetta che riprendo questo la versione breve EA non ho il buffer EMPTY_VALUE così che probabilmente non sta andando a lavorare in ogni caso, e così l'idea era quella di testare l'EA in modo da poter vedere le funzioni di stampa per vedere i risultati, ma la versione indicatore avrei dovuto aspettare per così devo postare indietro su questo come si è scoperto.

Comunque qui c'è la versione dell'indicatore, ma non mi sento sicuro di questo perché non sono esattamente sicuro se devo tentare di fare un loop all'interno della dichiarazione while o creare un nuovo ciclo e ricreare val1 = .... di nuovo anche.

//+------------------------------------------------------------------+
//|                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);
  }
//+------------------------------------------------------------------+
Bene, ho abbandonato il tentativo di creare il 3° buffer / segnale per ora e voglio solo vedere se posso stampare il risultato del segnale precedente

EMPTY_VALUE il modo in cui ho messo il codice inizializza l'indicatore, ma questo è tutto niente stampa
 

Puoi spiegare come funziona questo ciclo for?

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

 
RaptorUK:

Puoi spiegare come funziona questo ciclo for?

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

Credo di aver pensato che, dato che l'istruzione while e v1[i] memorizza i massimi e i -- conta in basso da Bars più alto, allora dovrei semplicemente contare di nuovo in alto mentre v1[i] == EMPTY_VALUE

Ho pensato che questo avrebbe incrementato i++ di 1 livello fino al massimo precedente, beh, in realtà credo che sarebbe andato oltre fino al prossimo EMPTY_VALUE

Quindi ho bisogno di farlo nel modo opposto v1[i] = High[i]; i++

Allora questo non dovrebbe portarmi all'alto precedente, ma non sono sicuro di come inizializzarlo correttamente.

Continuerò a lavorarci.
 
Lo sto cambiando in un if( Voglio solo vedere qualsiasi cosa stampata a questo punto in modo da poter almeno vedere cosa sta facendo l'indicatore.

Tutto ciò che ottengo sono gli 0, quindi in realtà non ci sono valori quando = Print (v1[i]);
Il che è strano perché come faccio a far funzionare l'indicatore a questo punto?

Oh beh, continuerò a farlo.
 
Agent86:
Lo sto cambiando in un if( Voglio solo vedere qualsiasi cosa stampata a questo punto in modo da poter almeno vedere cosa sta facendo l'indicatore.

Tutto ciò che ottengo è 0's quindi non c'è effettivamente NESSUN valore quando = Print (v1[i]);
Il che è strano perché come faccio a far funzionare l'indicatore a questo punto?

Oh beh, continuerò a farlo.


Forse stai solo vedendo i valori per v1[0] ? stampa i allo stesso 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
Non ho postato tutto ma tutte le linee leggono lo stesso = 0

Ho pensato che dovrei comunque vedere un valore effettivo per v1[0] ?

come può essere sempre 0 quando l'indicatore deve essere if(>0) ?

Forse mi sto addentrando in un'altra area di cui sono ignorante.

Ho pensato che potrei essere in grado di stampare così potrei cercare di capire cosa e perché tutti i miei tentativi stanno fallendo; e così potrei incrementare i++ in qualche modo per arrivare al prossimo frattale e poi in qualche modo capire come usare queste informazioni per qualcosa.


Posso stampare High[i] o v1[i] ed è sempre 0

Stampando High[0] o High[1] anche 0

Anche se capisco quello che hai postato e la stampa del valore di i che sembra essere bloccato a causa del ciclo i-- che lo porta sempre a 0, ma anche così dovrebbe comunque stampare un valore per i, come almeno pensavo.

E capisco perché sta stampando [-1] perché i=Bars. Ho capito questo, ma =0 ?