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

 
artmedia70:

1. Se c'è una posizione di take chiusa, ...

1.1 Se il suo tipo è OP_BUY, ...

1.1.2 Se c'è una posizione aperta OP_SELL, ....

1.1.3 Se il tempo della barra corrente meno il tempo della posizione Open Sell è maggiore o uguale al numero di barre per un ritardo, ...

1.1.4 Chiudere una posizione Sell

1.2 Se il suo tipo è OP_SELL, ...

1.2.2 Se c'è una posizione aperta OP_BUY, ...

1.2.3 Se il tempo della barra corrente meno il tempo di apertura della posizione Buy è maggiore o uguale al numero di barre per un ritardo, ...

1.2.4. chiudiamo la posizione Buy

Grazie per l'algoritmo, è molto più complicato di quello che mi aspettavo(

Potresti abbozzare il codice in generale, perché ci ho messo tanto a scrivere quello precedente, ma non sono riuscito a trovare EAs simili....

Non riesco a trovare EAs simili, ma ne sarei molto grato!

 
Prima di cercare di andare al limite, è meglio cercare di valutare se si ha bisogno della soluzione.
Potete trovare molte funzioni simili qui - Funzioni utili di KimIV. Ce n'è anche uno già pronto per il tuo compito.
 

Salve.

Per favore aiutatemi a trovare un errore. Il codice conta la somma dei valori RangeX0_D1

Il risultato è solo l'ultimo (sesto) membro della sequenza.

Grazie in anticipo.

  int k;
  double RangeX0_D1  = 0;  
  for (k=1;k<=6;k++) 
   {
    RangeX0_D1  = (iHigh(NULL,1440,k)-iLow(NULL,1440,k))/Point;
    if (RangeX0_D1>0)
    RangeX0_D1++;
   }
 
int k;
  double RangeX0_D1  = 0;  
  for (k=1;k<=6;k++) 
   {
    RangeX0_D1  += (iHigh(NULL,1440,k)-iLow(NULL,1440,k))/Point;
   }
 
FAQ:
Grazie per il vostro aiuto, la precisione e la velocità :)
 
nemo811:
Grazie per l'aiuto, la precisione e la velocità :)


Per accelerare i calcoli, è meglio fare le cose un po' diversamente

int k;
  double RangeX0_D1  = 0;  
  for (k=1;k<=6;k++) 
   {
    RangeX0_D1  += (iHigh(NULL,1440,k)-iLow(NULL,1440,k));
   }
   RangeX0_D1 /= Point;

La divisione richiede molto tempo. È meglio farlo una volta sola.

 
Buon pomeriggio, potreste dirmi perché le quotazioni dal 10 giugno al 22 settembre di quest'anno non possono essere caricate? Ho fatto due o tre upload di cronologia e tutti hanno lo stesso gap nei dati.
 
Buon pomeriggio, qualche consiglio: il ciclo cerca i valori che soddisfano certe condizioni. I valori trovati sono scritti in un array. Non si sa in anticipo quanti valori si troveranno, quindi la dimensione dell'array da dichiarare è sconosciuta. Dal punto di vista del tempo e delle risorse, preferirei non fare due corse (in modo da poter contare il numero di valori trovati nella prima corsa, dichiarare l'array e scrivere i dati nell'array nella seconda). C'è un modo per ottenere il risultato richiesto in una sola esecuzione?
 
Elenn:
Buon pomeriggio, qualche consiglio: il ciclo cerca i valori che soddisfano certe condizioni. I valori trovati sono scritti in un array. Non si sa in anticipo quanti valori si troveranno, quindi la dimensione dell'array da dichiarare è sconosciuta. Dal punto di vista del tempo e delle risorse, preferirei non fare due corse (in modo da poter contare il numero di valori trovati nella prima corsa, dichiarare l'array e scrivere i dati nell'array nella seconda). C'è un modo per ottenere il risultato richiesto in una sola esecuzione?

Un array di lunghezza "infinita" può essere dichiarato nell'indicatore. Dichiaratelo e poi nel ciclo scrivete immediatamente i valori trovati nell'array. L'unica domanda è come trasferire la selezione necessaria all'Expert Advisor/Script? Ci sono alcuni strumenti, ma dobbiamo valutare la complessità. Forse sarebbe davvero più facile fare 2 esecuzioni - nella prima, contiamo il numero di valori filtrati, poi cambiamo la dimensione dell'array, e nella seconda, inseriamo i valori nell'array?
 
Elenn:
Buon pomeriggio, qualche consiglio: il ciclo cerca i valori che soddisfano certe condizioni. I valori trovati sono scritti in un array. Non si sa in anticipo quanti valori si troveranno, quindi la dimensione dell'array da dichiarare è sconosciuta. Dal punto di vista del tempo e delle risorse, preferirei non fare due corse (in modo da poter contare il numero di valori trovati nella prima corsa, dichiarare l'array e scrivere i dati nell'array nella seconda). C'è un modo per ottenere il risultato richiesto in una sola esecuzione?

Dichiarare l'array più grande della dimensione massima richiesta.