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

 
Noterday:
Amico, non ho ancora capito come si fa. Ho bisogno che il codice con la cancellazione e la chiusura degli ordini sia attivato solo alla prossima candela. Ma anche altri candelieri dovrebbero aprirsi su questo. Questo significa che il programma entrerà di nuovo nella cancellazione. Una specie di bandiera è necessaria ma il mio cervello sta già sudando per capire come farlo :)

Leggete attentamente la funzione OrderSend(). Ha un parametro per gli ordini in sospeso:

expiration - Срок истечения отложенного ордера.

Se aprite un ordine pendente all'inizio del giorno corrente = iTime (Symbol(), PERIOD_D1, 0), aggiungete un altro giorno a questo tempo - 1440 * 60. Se gli ordini pendenti non vengono attivati, saranno cancellati da soli all'inizio del giorno successivo.

P.S. La fine della barra corrente può anche essere controllata attraverso la funzione iBarShift():

    if (iBarShift (Symbol(), PERIOD_D1, OrderOpenTime()) == 0) return(0);

o qualsiasi altro "movimento del corpo" su questa condizione tracciando l'OrderTicket() dell'ultimo ordine.

 
TarasBY:

Leggete attentamente la funzione OrderSend(). Ha un parametro per gli ordini in sospeso:

Se aprite un ordine pendente all'inizio del giorno corrente = iTime (Symbol(), PERIOD_D1, 0), aggiungete un altro giorno a questo tempo - 1440 * 60. Gli ordini pendenti che non vengono attivati vengono automaticamente cancellati all'inizio del giorno successivo.


L'ho letto, il mio DC non sembra supportarlo.
 
Noterday:
L'ho letto, la DC non sembra sostenerlo.
Esiste una cosa del genere?
 
Beh, credo di sì, o forse è solo un problema del mio terminale. Ho già detto in un thread vicino che non sto salvando i rapporti dalla scheda STORIA dell'account...
 
Noterday:
Beh, credo di sì, o forse è solo un problema del mio terminale. Ho già detto in un thread vicino che non sto salvando i rapporti dalla scheda STORIA dell'account...
Stranamente, nemmeno io, anche se la mia corporatura è 416. Anche se il terminale non ha nulla a che fare con la cancellazione dell'ordine pendente che non ha funzionato quando è scaduto - questa è una competenza del server della società di brokeraggio.
 
hoz:

Onestamente, sono già completamente confuso. Non ho nemmeno esempi per vedere come lo fanno gli altri.

Ho capito che, oltre a ottenere i valori, bisogna assegnarli a qualche altra variabile?


Non ho bisogno delle basi. Sono ben consapevole della visibilità variabile. Non c'è niente nel libro di testo sul passaggio di valori di variabili per riferimento. Perché mi mandate lì? Mi stai prendendo in giro?


No, non lo sono. La tua opinione sulla tua conoscenza della portata è molto esagerata. Non è per insultare, è solo ovvio che non hai imparato le basi.

Ho un po' di tempo, quindi proverò "sulle dita": Hai descritto le variabili all'interno di una funzione - è lì che esistono. La funzione ha completato il suo lavoro e la memoria allocata alle variabili viene liberata. Poi il riferimento a ciò che si usa al di fuori dell'ambito delle variabili? Non ci può essere alcuna "spazzatura" a questo indirizzo. Possiamo solo essere contenti che gli sviluppatori abbiano avuto lungimiranza ed escluso l'aritmetica degli indirizzi. Il risultato della funzione, se dobbiamo passarlo all'esterno, viene sempre passato per valore, non per riferimento (cioè, si passa il valore stesso, non l'indirizzo della cella di memoria in cui è memorizzato il valore). Ci sono naturalmente delle eccezioni, ma non per µl4 (tranne quando si lavora con gli array). Quindi, per favore, rileggetelo - non farà male.

 
VladislavVG:

Possiamo solo rallegrarci della lungimiranza degli sviluppatori che hanno eliminato l'aritmetica degli indirizzi.

Ma è lì, anche se non è descritto...
 
valenok2003:


E gli array?


Con gli array non è difficile: di solito un array come parametro viene passato per riferimento dall'esterno - all'interno della funzione, lo si elabora all'interno della funzione e non è necessario restituire nulla - il risultato si ottiene subito. La necessità di restituire il riferimento (o l'indirizzo) può sorgere se state allocando dinamicamente la memoria per l'array all'interno di una funzione, e descrivendo lì l'array stesso. Poi, per utilizzare questo array al di fuori della funzione, è necessario passare l'indirizzo dell'area di memoria allocata all'esterno.

Sembra più spaventoso di quanto non sia. Se non è chiaro, posso darvi alcuni esempi.

 
VladislavVG:


Non è complicato con gli array: di solito un array come parametro viene passato per riferimento dall'esterno - all'interno della funzione, lo si elabora all'interno della funzione e non è necessario restituire nulla - il risultato si ottiene immediatamente. La necessità di restituire il riferimento (o l'indirizzo) può sorgere se state allocando dinamicamente la memoria per l'array all'interno di una funzione, e descrivendo lì l'array stesso. Poi, affinché questo array possa essere utilizzato al di fuori della funzione, è necessario passare all'esterno l'indirizzo dell'area di memoria allocata.

Sembra più spaventoso di quanto non sia. Se non capite, posso darvi alcuni esempi.



Grazie, questo è chiaro. Cioè, se una variabile o una matrice è descritta ad un livello superiore, si può fare riferimento al suo indirizzo avanti e indietro quanto si vuole.
 
valenok2003:


grazie, era chiaro, cioè se una variabile o una matrice è descritta a un livello più alto, si può fare riferimento al suo indirizzo avanti e indietro quanto si vuole

Giusto.