Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 135

 

Buon pomeriggio, se non è troppo difficile, per favore consigliate un principiante:

1) Come dichiarare un array di dimensione uguale al valore di qualche variabile? (se i=7 dichiarare array doppio Muss[7] e così via);

2) Perché un array in una funzione definita dall'utente è considerato dichiarato e usato adeguatamente se la condizione è sempre falsa?

mentre (falso) {

Alert("aaaaaaaaaaaaaaa" );

statico doppio Buf_max [9000000];

static double Buf_min [9000000];}

3) C'è una differenza nella funzione utente e in generale tra un semplice array e un array statico?

 
ALXIMIKS:

Buon giorno, se non è troppo difficile, per favore consigliate un principiante:

1) Come dichiarare un array di dimensione uguale al valore di qualche variabile? (Se i=7 dichiarare array doppio Muss[7] e così via);

...

1) ArrayResize()

int i=7;
double Muss[]; // объявление динамического массива
//---
int init() 
{
  ArrayResize(Muss,i); // устанавливает новый размер массива
  return(0);
}
 

una cosa del genere:

se chiamate MarketInfo(Symbol(),MODE_TRADEALLOWED), restituisce - 1=commercio permesso.

Ma se passate il mouse sul simbolo nella panoramica del mercato, apparirà un tooltip con il testo - Trade: Close.

qual è il trucco qui?

davvero non mi permette di commerciare, ma perché MODE_TRADEALLOWED restituisce un valore sbagliato?

 
chief2000:

Quante volte avete eseguito l'indicatore? Sembra più volte (le ciclicità sono evidenti nei tuoi risultati).
Aggiungete un'altra stampa a deinit con qualche "separatore", impostate una condizione di input o rifatelo nello script in modo che non venga eseguito più di una volta, allora sarà più chiaro.


Grande idea))

L'ho reso più semplice, così:

//+------------------------------------------------------------------+
//|                                            massive_fffffffff.mq4 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

int start()
{ 

   int Array[4] = {1, 2, 3, 4};
   int x1, x2, x3, x4;
   int Array_Size = ArrayRange(Array, 0);
   
   for(int i=0; i<11; i++)
   {
      i++;
      Print("_i = ", i);
   }

   for(x1=0; x1<Array_Size; x1++)
   {
      Print("Combination = ", Array[x1]);

      for(x2=x1+1; x2<Array_Size; x2++)
      {
         Print("Combination = ", Array[x1] + "   " + Array[x2]);

         for(x3=x2+1; x3<Array_Size; x3++)
         {
            Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3]);

            for(x4=x3+1; x4<Array_Size; x4++)
            {
               Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3] + "   " + Array[x4]);
            }
         }
      }
   }
  for(int h=0; h<11; i++)
   {
      h++;
      Print("h = ", h);
   }


   return(0);
}

L'inizio nel diario di bordo è così:

2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 9
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 9
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 7
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 5
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 3
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 1
2013.09.10 17:09:07     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 11
2013.09.10 17:09:07     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 10
2013.09.10 17:09:07     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 7
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 5
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 3
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 1
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 11
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 10
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: Combination = 1
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 11
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 7
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 5
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 3
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 1
2013.09.10 17:09:06     massive_fffffffff test started
2013.09.10 17:09:04     TestGenerator: spread set to 2
2013.09.10 17:09:04     massive_fffffffff EURUSD.GI,M5: loaded successfully

Non c'è nemmeno un ciclo. Non c'è ordine. L'output non è affatto coerente.

 
hoz:


Grande idea))

L'ho reso più semplice, così:

L'inizio nel diario di bordo è così:

Non c'è nemmeno un ciclo. Non c'è ordine. L'output non è affatto coerente.


Avete reso le cose un po' più complicate, in fase di test tutto può essere fatto in 1-2 righe, a seconda della variante. È possibile fare tutto nell'Inite. L'ordine di uscita non è stato stipulato.


bool Status_Run = true;


start() {

   if(Status_Run==true) {
      Status_Run  = false;

      Print("---START ---");
      ......

   }
}
 
chief2000:

L'hai reso in qualche modo troppo complicato, nella fase di convalida tutto può essere fatto in 1-2 righe, a seconda della variante. È possibile fare tutto nell'Inite. L'ordine di uscita non è stato stipulato.





Intendi introdurre un flag in modo che i cicli vengano eseguiti una volta e basta? Non smetto di eseguire... È così che funziona:

//+------------------------------------------------------------------+
//|                                            massive_fffffffff.mq4 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

int start()
{ 

   bool Status_run = true;
   int Array[4] = {1, 2, 3, 4};
   int x1, x2, x3, x4;
   int Array_Size = ArrayRange(Array, 0);
   
   if (Status_run == true)
   {
      Status_run = false;

      for(x1=0; x1<Array_Size; x1++)
      {
         Print("Combination = ", Array[x1]);

         for(x2=x1+1; x2<Array_Size; x2++)
         {
            Print("Combination = ", Array[x1] + "   " + Array[x2]);

            for(x3=x2+1; x3<Array_Size; x3++)
            {
               Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3]);

               for(x4=x3+1; x4<Array_Size; x4++)
               {
                  Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3] + "   " + Array[x4]);
               }
            }
         }
      }
   }

   return(0);
}

In sostanza, però, il codice dovrebbe funzionare come in INITA, una volta per tutte. Allora la variabile booleana Status_run sarà immediatamente impostata su false e la condizione if non sarà più eseguita... Ma il mio log non esaurisce l'output per qualche motivo.

 
hoz:


Intendi introdurre un flag in modo che i cicli siano eseguiti una volta sola e basta? Non smetto di correre... È così che funziona:

Anche se in sostanza, il codice dovrebbe funzionare come in INITE, una volta e basta. Allora la variabile booleana Status_run prenderà immediatamente il valore false e la condizione if non verrà più eseguita... Ma, per qualche motivo, non ho finito l'output nel log.


Lei ha affermato che i loop danno risultati sbagliati e io le ho offerto un modo per testarlo. Se funziona come volete, allora dovreste farlo secondo il vostro algoritmo, e se non funziona, dovreste cambiarlo durante il controllo.

PS "Status_run" deve essere creato prima di start(), è una variabile globale.
 

Guru, un consiglio. Ho impostato la variabile bool Flag=true; per iniziare,

Apro un affare

se ( condizione)

{

Opn_S = vero;

Flag=false;

}

C'è una domanda sul flag, se il flag ritornafalso quando viene aperto e c'è questo flag nella condizione di apertura. Per quanto tempo viene mantenuto il vero o falso passato alla bandiera, viene azzerato il giorno dopo?

 
Forexman77:

Guru, un consiglio. Ho impostato la variabile bool=true; per iniziare,

Apro un affare

se ( condizione)

{

Opn_S = vero;

Flag=false;

}

C'è una domanda sul flag, se il flag ritornafalso quando viene aperto e c'è questo flag nella condizione di apertura. Per quanto tempo viene mantenuto il vero o falso passato alla bandiera, sarà azzerato il giorno dopo?


No, ad ogni nuovo tick il valore di Flag sarà vero . https://book.mql4.com/ru/variables/types

O dichiarare la variabile globalmente - per esempio all'inizio di un programma, fuori da tutte le funzioni.

Oppure rendere la variabile statica - static bool flag=true; .

 
ALXIMIKS:

No, ad ogni nuovo tick il valore di Flag sarà vero . https://book.mql4.com/ru/variables/types

O dichiarare la variabile globalmente - all'inizio del programma, fuori da tutte le funzioni.

Oppure rendere la variabile statica - static bool flag=true; .

Grazie!