[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 556

 


Naturalmente è meglio passare all'array lettura/scrittura

1. Non cambiare la dimensione dell'array di 1 ad ogni iterazione, è meglio farlo meno frequentemente, per esempio aumentarla in incrementi di 50 o 100 se necessario

2. È meglio usare DoubleToStr() per la stampa dei controlli.

3. Non capisco perché si usa una variabile stringa per leggere

 
Vinin:


Naturalmente è meglio passare all'array di lettura/scrittura

1. Non cambiare la dimensione dell'array di 1 ad ogni iterazione, è meglio farlo meno frequentemente, per esempio aumentandola in incrementi di 50 o 100 se necessario

2. È meglio usare DoubleToStr() per la stampa dei controlli

3. Non capisco perché si usa una variabile stringa per leggere

1. non funziona altrimenti. scrive righe nulle, come per 4 colonne che devono essere aggiornate ogni volta

2. ok.

3. uno speciale consigliato, ora legge tutto correttamente. ma si scopre, una riga nulla è ridondante, e un extra run.but il valore non è lì, quindi riempie la riga nulla di conseguenza.

 
orb:

1. non funziona altrimenti. scrive righe nulle, come per 4 colonne che devi aggiornare ogni volta

2. ok.

3. uno speciale consigliato, ora legge tutto correttamente. ma si scopre, una riga nulla è extra, mentre un extra run.and il valore non è lì, rispettivamente la riga nulla è riempita.


Con tale approccio ci saranno grandi freni.
 
Vinin:

Con questo approccio ci saranno grandi freni.

Capisco, finora è più facile per me scrivere in questo modo.

Puoi dirmi come sbarazzarmi del "while" che viene eseguito un'altra volta?

 
orb:

Capisco, finora è più facile per me scrivere in questo modo.

come posso sbarazzarmi di mentre viene eseguita un'altra volta?



Non riuscivo a liberarmene. Ma non ho usato variabili di stringa
 
Capito. Può, allora, ArrayResize(); essere applicato meno del contatore del ciclo, rimuoverà questa stringa dall'array?
 
orb:
Capito. Può, quindi, ArrayResize(); essere applicato meno del conteggio del ciclo, rimuoverà questa stringa dall'array?

Sì, lo farà.

Meno spesso si usa questa funzione, più velocemente funziona. Riservare 100 elementi e leggere controllando l'overrun dell'array. Se necessario, aumentate ancora l'array di 100 elementi. Allo stesso tempo si mantiene il numero effettivo di elementi scaricati. Dopo un download completo dell'array, si fa una nuova ArrayResize(), ma per il numero effettivo di elementi scaricati.

Ma le funzioni per lavorare con gli array funzionano più correttamente. Dovresti prima salvare il numero di elementi dell'array in un file, e poi l'array stesso

Leggere prima il numero di elementi, impostare la dimensione dell'array. Scarica la matrice. E nessun loop

 
Vinin:

Sì, lo farà.

Meno spesso si usa questa funzione, più velocemente funziona. Riservare 100 elementi e leggere controllando l'overrun dell'array. Se necessario, aumentate ancora l'array di 100 elementi. Allo stesso tempo si mantiene il numero effettivo di elementi scaricati. Dopo un download completo dell'array, si fa una nuova ArrayResize(), ma per il numero effettivo di elementi scaricati.

Ma le funzioni per lavorare con gli array funzionano più correttamente. Dovresti prima salvare il numero di elementi dell'array in un file, e poi l'array stesso

Leggere prima il numero di elementi, impostare la dimensione dell'array. Scarica la matrice. E nessun loop

Grazie, lo terrò presente per il futuro.
 

Si prega di consigliare come risolvere correttamente il problema:

C'è una proiezione dei livelli di supporto/resistenza del vecchio TF al TF attuale. È necessario determinare quale dei livelli è stato l'ultimo ad essere testato dal prezzo. Ho cercato di farlo attraverso le bandiere:

int start()
{ 
      int limit;
      int counted_bars=IndicatorCounted();
      if(counted_bars>0) counted_bars--;

      limit=Bars-counted_bars;
      if(limit>barsToProcess)
         limit=barsToProcess;

     for(int i=0;i<limit;i++)

{
 
  bool flag_R[], flag_S[], S[];

   double Level_Re = iCustom(NULL,0,"........",0,i); // для каждого бара получаем значения со старшего ТФ
   double Level_Su = iCustom(NULL,0,"........",1,i); // для каждого бара получаем значения со старшего ТФ

{
   if (iHigh(Symbol(),0,i)>=Level_Re)              // проверяем тестирование ценой уровня Re
   {flag_R[i]=true; flag_S[i]=false; S[i]=true;}   // выставляем флаги
   
   if (iLow(Symbol(),0,i)<=Level_Su)               // проверяем тестирование ценой уровня Su
   {flag_R[i]=false; flag_S[i]=true; S[i]=true;}   // выставляем флаги


   if (S[i]==false) {flag_R[i]=flag_R[i+1]; flag_S[i]=flag_S[i+1];} // если тестирования не было - берем предыдущее значение

   if (flag_R[0]==true) Print("Re zone tested"); if (flag_S[0]==true) Print("Su zone tested");
   
}
}

return(0);
}

ma il registro non mostra nulla.... [Se imposto, per esempio, Print(Level_Re), poi scorrendo tutto l'array, il log si ferma al valore del livello per l'ultima barra, cioè i livelli stessi sono calcolati correttamente, ma con le bandiere qualcosa non funziona per me.... ]

Qual è l'errore? O qual è il modo migliore per farlo?

 
alkador:

a T-G

Prova così:

datetime expiration=TimeCurrent()+MaxSecLiveTime;

OrderSend(Symbol(), OP_BUYSTOP, Lots(), PriceBuy, 0, 0, 0, 0, EA_Comment, Magic, expiration, CLR_NONE);


e qual è la differenza con:

extern int MaxSecLiveTime = 120;
OrderSend(Symbol(), OP_BUYSTOP, Lots(), PriceBuy, 0, 0, 0, EA_Comment, Magic, TimeCurrent()+MaxSecLiveTime, CLR_NONE);
Motivazione: