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

 
a1 = OrdersTotal();
for (i = 0; i < a1; i++)
{
OrderSelect(i,SELECT_BY_POS);
OrderDelete(OrderTicket());

}

Ecco un semplice script come questo dovrebbe cancellare tutti gli ordini in sospeso, ma cancella esattamente la metà degli ordini ... ???

 
        
FAQ 04.03.2011 12:56 

Подскажите, как найти цену последнего фрактала?


sergeev: Для этого можно воспользоваться индикатором iFractals. Он возвращает значение 0, если на баре нет фрактала и значение цены фрактала если он есть. Фракталы делятся на верхние и нижние. Если вам надо получить верхние, то в функцию iFractals передается MODE_UPPER, а для нижних - MODE_LOWER. Поэтому для поиска фрактала надо пройти в цикле по барам и первое не 0 значение и будет искомым фракталом.

пример:

double frac;
for (int i=3; i<Bars; i++)
{
   frac=iFractals(Symbol(), Period(), MODE_UPPER, i); if (frac>0) break;
   frac=iFractals(Symbol(), Period(), MODE_LOWER, i); if (frac>0) break;
}
if (frac>0) Print("Цена последнего фрактала: ", frac);


пример организации отдельной функции:

//---------------------------------------------------------------   GetLastFrac
double GetLastFrac(string smb, int tf, int iB)
{
   int n=iBars(smb, tf);  double frac;
   for (int i=iB; i<n; i++)
   {
      frac=iFractals(smb, tf, MODE_UPPER, i); if (frac>0) return(frac);
      frac=iFractals(smb, tf, MODE_LOWER, i); if (frac>0) return(frac);
   }
   return(0);
}
.....
Print("Последний фрактал: ", GetLastFrac("EURUSD", 60, 3));
Era nelle FAQ, l'ho sfogliato le prime volte e non l'ho notato.
 
Neo333:
a1 = OrdiniTotali();
per (i = 0; i < a1; i++)
{
OrderSelect(i,SELECT_BY_POS);
OrderDelete(OrderTicket();

}

Questo semplice script dovrebbe cancellare tutti gli ordini pendenti ma ne cancella esattamente la metà ... ???

Diciamo che ci sono stati 10 ordini.

Qui avete cancellato la metà (da zero a cinque)

ora vuoi selezionare il sesto... e ne rimangono solo 5. C'è un errore e non c'è niente da cancellare. È lo stesso per gli altri.

 
Neo333:
a1 = OrdiniTotali();
per (i = 0; i < a1; i++)
{
OrderSelect(i,SELECT_BY_POS);
OrderDelete(OrderTicket();

}

Questo semplice script dovrebbe cancellare tutti gli ordini in sospeso, ma cancella esattamente la metà degli ordini ... ???

Cambia la direzione della ricerca dell'ordine:

per (i=a1-1; i>=0; i--) {....}

 
artmedia70:

Cambia la direzione dell'enumerazione degli ordini:

per (i=a1-1; i>=0; i--) {....}

Opere ... ma qual è la logica - che differenza fa i++ o i--?
 
Zhunko:

1. Avete controllato?

Rapporto: Ha aiutato, ma sembra essere glitchato.

Primo terminale. Rimosso tutti i grafici e i simboli, aggiunto 7 simboli del dollaro, aggiunto i grafici. Tutti con ricariche.

Allungato il ticker a 3/4 dello schermo. Riempiti i primi 6, il 7° è arrivato a 5 caselle.

Dopo il prossimo riavvio non tutti riempiti completamente, la distribuzione è quasi casuale - il simbolo più basso nella lista, meno celle ottiene.

Il secondo terminale. C'erano 7 coppie di yen. Rimosso i caratteri extra, riavviato - si riempiono molto più in profondità, ma la profondità di riempimento è risultata essere distribuita in modo casuale.

Propendo per il fatto che questo sia un bug a causa della piccola cache - semplicemente non è abbastanza per tutti, mentre la distribuzione è casuale o "primo arrivato, primo servito".

In ogni caso, per una valuta il metodo funziona. Riassunto: ricetta al fatto :) Grazie.

 
Neo333:
Funziona ... Ma qual è la logica - che differenza fa i++ o i--?

Vi è già stato detto qual è il motivo. Non si tratta di i++ o i--, ma da quale estremità della lista iniziate a cancellare gli ordini - l'inizio della lista (come avete fatto) o la fine della lista (come dovete fare in questo caso).

Per capire cosa succede quando gli ordini vengono cancellati, è necessario conoscere e capire come gli ordini sono memorizzati nell'array.

Quando cancellate il primo ordine per primo (è indicizzato da i=0), gli indici di tutti gli ordini sono spostati nell'array - il primo ordine diventa nullo, il secondo diventa il primo, il terzo diventa il secondo e così via. Questo è il motivo per cui tutti gli ordini non sono completamente cancellati - infatti, quando i diventa 6, il sesto ordine viene spostato alla quinta posizione nella matrice degli ordini e l'ordine semplicemente non viene selezionato dall'indice 6.

Quando cancelli gli ordini dalla fine della lista, lo spostamento non avverrà - il primo ordine ha una posizione zero nella lista, e continuerà ad averla. Il decimo ordine aveva la posizione 9, è stato cancellato, poi il nono ordine, che ha una posizione 8 nella lista viene cancellato, e così via, fino al primo ordine con una posizione zero nella matrice degli ordini.

 
Neo333:
Opere .... ma qual è la logica - che differenza fa i++ o i--?
ti è già stata data una risposta da un utente
152
ilunga a questa domanda
 
nadya:
ti è già stata data una risposta da un utente
152
ilunga a questa domanda
Qualcosa mi diceva che avrei dovuto masticare e dare una risposta più dettagliata... :)
 
Zhunko:
... aprire autonomamente l'orario.
Il resto dei grafici sono "ticchettanti". Non è un'opzione.
Motivazione: