[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 275

 
alsu:

Non vedo la tua inizializzazione di int i string e index. Per favore, nello studio.

ZZY Non parlo bene il lituano, i commenti nel codice mi confondono un po')))

Ho degli zeri nell'array. L'array sta aumentando normalmente. È visibile nella stampa.

2013.04.08 23:18:37 2013.04.04 20:00 testavimas naktini fleta EURUSD,M15: ArraySize 19

ma scrive degli zeri nell'array

2013.04.08 23:18:37 2013.04.04 20:00 testavimas naktini fleta EURUSD,M15: avgPriceC[8]=0.00000000
2013.04.08 23:18:37 2013.04.04 20:00 testavimas naktini fleta EURUSD,M15: avgPriceC[7]=0.00000000
04.04 20:00 testavimas naktini fleta EURUSD,M15: avgPriceC[6]=0.00000000
2013.04.08 23:18:37 2013.04.04 20:00 testavimas naktini fleta EURUSD,M15: avgPriceC[5]=0.00000000
2013.04.08 23:18:37 2013.04.04 20:00 testavimas naktini fleta EURUSD,M15: avgPriceC[4]=0.00000000
2013.04.08 23:18:37 2013.04.04 20:00 testavimas naktini fleta EURUSD,M15: avgPriceC[3]=0.00000000
2013.04.08 23:18:37 2013.04.04 20:00 testavimas naktini fleta EURUSD,M15: avgPriceC[2]=0.00000000
2013.04.08 23:18:37 2013.04.04 20:00 testavimas naktini fleta EURUSD,M15: avgPriceC[1]=0.00000000
2013.04.08 23:18:37 2013.04.04 20:00 testavimas naktini fleta EURUSD,M15: avgPriceC[0]=0.00000000
Tutti gli elementi con valore 0

avgPriceC[i] = Close[1];

ma non sanno come. Può essere la ragione di qualcos'altro. Ho anche reinstallato il meta trader. Non ha aiutato.

Voglio ottenere un array infinito con inizio per dati primari, ma la fine non è specificata.

//greitas MA
extern int     MA_Period1     =  8;
extern int     plius1         =  100;
extern int     MA_Shift1      =  0;
extern int     MA_Method1     =  0;                                                 
//Letas MA
extern int     MA_Period2     =  13;
extern int     plius2         =  100;
extern int     MA_Shift2      =  0;
extern int     MA_Method2     =  3;                                                 
//Fleto pradzia
//fleto ipradzios eskojimas pagal indikatoriu arba laika
extern bool  start       =  true;    // true ->pagal indikatoriu, false->pagal laika
// pagal indikatoriu fleto pradzios pradesim ieskoti nuo sio laiko
extern int     startHourFlatMA        =  16;    
extern int     startMinFlatMA        =  00;
extern string  startstartFlatMA       = "16:00";
extern string  endstartFlatMA       = "00:00";
//suradus pagal indikatoriu dar lauksim kol uzsidarys BarEnd zvake
extern bool    zvakes_pabaiga = true;//ar lauksim kol uzsidarys M240 zvake, ar priimsim kad fletas prasidejo nuo susikirtimo
extern int     BarEnd         =  240;
datetime       LastTime;
//datetime       startTime;
// pagal laika fleto pradzios pradesim ieskoti nuo sio laiko
extern int     startHourFlat        =  0;   //
extern int     startMinFlat         =  0;    //

//fleto pabaiga
//Fleto pabaiga jei indikatorius duoda signala siame laiko tarpe
//Laiko tarpo pradzia
extern int     startHourEnd        =  4;    
extern int     startMinEnd         =  45;
//laiko tarpo pabaiga arba fleto pabaiga
extern int     endHourEnd        =  7;    
extern int     endMinEnd         =  30;

//Ar naudosom Volumes filtra
extern bool volFiltr = true;            //true -> naudosim,   false -> nanaudosim

//skirtumas tarp penktadienio uzdarymo ir pirmadienio atidarymo
extern int   gep = 300;  



//Naktinio-fletinio pipsavimo ijungimas
bool nightFlat = false; //true -> ijungtas,   false -> neijungtas



bool           susikirtimas = false;      
bool           flat; 
//masyvai
double chPriceH[], chPriceL[], chPriceO[], chPriceC[], chTime[];
double avgPriceH[], avgPriceL[], avgPriceO[], avgPriceC[]; 
int i = -1; // masyvu indeksas -1, nes toliau pridesim 1, o masyvu indeksacija prasideda nuo 0
int j = -1; // masyvu indeksas -1, nes toliau pridesim 1, o masyvu indeksacija prasideda nuo 0
int n = -1;                          // kintamasis naujo masyvo indeksacijai
int iH, iL ,iO, iC, iT;
double C[], T[], y[];
double max;                               //max skirtumas tarp LR median ir Close
//*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*--*-*--*-*-*-*-*-*-*-*-*-*--*-*-*-*-*-*-*-*-* 

int init ()
{
ArrayResize(chPriceH, 0);
ArrayResize(chPriceL, 0);
ArrayResize(chPriceO, 0);
ArrayResize(chPriceC, 0);
ArrayResize(chTime, 0);
ArrayResize(avgPriceH, 0); 
ArrayResize(avgPriceL, 0); 
ArrayResize(avgPriceO, 0); 
ArrayResize(avgPriceC, 0); 
ArrayResize (C, 0); 
ArrayResize (T, 0);
ArrayResize (y, 0);
}
//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-**-*-*-*-*-*-*-*-*-*-
 int start()
 {
   double volMA11, volMA12, volMA21, volMA22;  
   double x[], y[]; 
   
   Print("******************STARTAS*****************************************");
   
   if(!TF_F_NewBar())return(0);
 
   volMA11 = iCustom(NULL, 15, "volumeMA",  2, 1);         
   volMA12 = iCustom(NULL, 15, "volumeMA",  2, 2);
   volMA21 = iCustom(NULL, 15, "volumeMA",  3, 1);
   volMA22 = iCustom(NULL, 15, "volumeMA",  3, 2);
    
   if(DayOfWeek()==1 || DayOfWeek()==2 || DayOfWeek()==3 || DayOfWeek()==4)                             //jei pirmadienis antradienis ar treciadienis, ar ketvirtadienis
   {         
      if(TimeCurrent()>= StrToTime(startstartFlatMA) && TimeCurrent()<= StrToTime(endstartFlatMA)+24*60*60)
      {
         //Print("fleto starto ieskojimo laikas prasidejo  "+TimeToStr(TimeCurrent())+" >= "+TimeToStr(StrToTime(startstartFlatMA))+
               //"  &&  "+TimeToStr(TimeCurrent())+" <= "+TimeToStr(StrToTime(endstartFlatMA)+24*60*60));
         bool laikas = true;
         Print("laikas = "+laikas);         
         if(volMA21 - volMA11 > 0 && volMA12 - volMA22 > 0)
         {                                                                                   //jei buvo susikirtimas
            susikirtimas = true;           
         }
         if(susikirtimas == true) 
         {
            if(zvakes_pabaiga)
            {
               if(iTime(NULL, BarEnd, 1)!= LastTime)
               {            
                  LastTime = iTime(NULL, BarEnd, 1);
                  flat = true;           
                  LastTime = iTime(NULL, BarEnd, 1);
              }
              else return(0);            
           }
           else flat = true;
           if(flat == true)
           {
               i++; 
             //Zinodami indekso eiles numeri galim keisti masyvo ilgi
            
            ArrayResize(avgPriceH,i); 
            ArrayResize(avgPriceL,i);
            ArrayResize(avgPriceO,i); 
            ArrayResize(avgPriceC,i);        
           Print("ArraySize     "+ArraySize(avgPriceC));
            //jei fletas prasidejo renkam duomenis i masyva zvakiu HL ir OC skaiciavimui
            
            avgPriceH[i] = High[1];    
            avgPriceL[i] = Low[1];     
            avgPriceO[i] = Open[1];   
            avgPriceC[i] = Close[1];
         
            j++; 
            
            ArrayResize(chPriceC,i); 
            ArrayResize(chTime,i);    
           } 
         for(int a=0; a<=i; a++)Print("avgPriceC["+a+"]="+avgPriceC[a]);
         for(int b=0; b<=j; b++)Print("chPriceC["+b+"]="+chPriceC[b]);
         for(int c=0; c<=j; c++)Print("chTime["+c+"]="+chTime[c]);
        }        
     }
  }
    
  return(0);
}
 
gince:


Anche nell'esempio di KIM


no, non c'è nessuna dichiarazione a livello globale, ogni funzione ha il suo y[].


Per quanto riguarda il tuo codice e gli zeri, lascia che ti spieghi con un esempio.

Se int a[],n=5; ArrayResize(a,n), allora l'ultimo elemento dell'array ha un indice n-1, non n. Lei ha:

               i++; 
            
            ArrayResize(avgPriceH,i); 
            ArrayResize(avgPriceL,i);
            ArrayResize(avgPriceO,i); 
            ArrayResize(avgPriceC,i);        
            
            avgPriceH[i] = High[1];    
            avgPriceL[i] = Low[1];     
            avgPriceO[i] = Open[1];   
            avgPriceC[i] = Close[1];

Ovviamente, è fuori dai confini dell'array. Quindi, ci sono valori nulli. Il modo corretto è

            avgPriceH[i-1] = High[1];    
            avgPriceL[i-1] = Low[1];     
            avgPriceO[i-1] = Open[1];   
            avgPriceC[i-1] = Close[1];
 
tara:
Non è affatto lo stesso, ma molto diverso. Leggere i dati globali e locali.
Mi dispiace di essermelo perso. CMM ha una variabile locale.
 


tara e alsu





Grazie mille.

 

Buon pomeriggio, ho bisogno di aiuto con questa domanda: c'è un array Mas[10]. Ho bisogno di trovare il prodotto di ogni cella con ogni cella. Ho fatto un tale costrutto, dove l'operatore if(i==j) elimina il prodotto della cella stessa. Il problema è che ottengo una doppia matematica, cioè per esempio per i=1 e j=2 il risultato sarà lo stesso che per i=2 e j=1. Quale condizione aggiuntiva dovrebbe essere scritta per evitare i doppi calcoli?

for(i=0; i<10; i++)
{
   for(j=0; j<10; j++)
   {
      if(i==j) continue;
      x = Mas[i]*Mas[j];
   }
}
 
for(i=0; i<10; i++)
{
   for(j=i+1; j<10; j++)
   {
      //if(i==j) continue;
      x = Mas[i]*Mas[j];
   }
}
 
Roger:
Grazie.
 

Ciao a tutti!

Non ho familiarità con la codifica MQL4. Voglio provare a scrivere un EA basato su livelli di supporto e resistenza, ma non so come scrivere il codice per un programma che cercherà questi livelli. Non sono in grado di cercarlo nel code base, sono maldestro e il mio tempo è limitato.

Grazie in anticipo! Che i profitti vengano a voi, e che le alci vadano in giro)!

 
Roger:
Per una serie di ragioni legate al processo di scrittura nell'array, abbiamo dovuto renderlo bidimensionale, cioè ora l'array appare come Mas[2][5]. Ora, per risolvere lo stesso problema, invece di due cicli for, dobbiamo fare quattro cicli. In questo caso, la variante suggerita da Roger non funzionerà. Come risolvere questo problema quando si usa un array bidimensionale?
 
Ekburg:

Ciao a tutti!

Non ho familiarità con la codifica MQL4. Voglio provare a scrivere un EA basato su livelli di supporto e resistenza, ma non so come scrivere il codice per un programma che cercherà questi livelli. Non sono in grado di cercarlo nel code base, sono maldestro e il mio tempo è limitato.

Grazie in anticipo! Che i profitti vengano a voi, e che le alci vadano in giro)!


Guarda l'indicatore in CodeBase DailyPivotPoints! Penso che vi aiuterà! Buona fortuna!
Motivazione: