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

 
rigonich:


Non è il tempo in sé che conta, ma se qualcosa è stato fatto entro un certo periodo di tempo, questo è ciò che si dovrebbe controllare.

P.S. E non avete bisogno di definire N, basta fare il vostro controlloif(TimeCurrent() >= iTime(Symbol(),1440,0) ) fino a quando l'azione che volete è fatta (impostare un ordine).


Ma se lo imposti in questo modo

if(TimeCurrent() >= iTime(Symbol(),1440,0)

In questo modo il segnale sarà valido per tutto il tempo dopo l'apertura della barra e . All'infinito. Perché ne ho bisogno? La cosa principale è aprire un ordine all'apertura di un bar, non un pacchetto.

 
hoz:

Ma se la metti così

In questo modo il segnale sarà valido permanentemente dopo l'apertura della barra e ... Fino all'infinito. A cosa mi serve? La cosa principale è aprire un ordine all'apertura del bar invece del pacco.


И ... All'infinito - questo è un caso speciale, se la vostra condizione necessaria - l'impostazione dell'ordine - non sarà soddisfatta oggi o domani...

E per evitare l'apertura di un pacchetto, dovremmo semplicemente controllare prima di ogni apertura o l'esistenza di un ordine aperto o se l'apertura ha avuto luogo nel periodo necessario.

 
rigonich:


In pratica si usa in tutte le operazioni che lavorano con gli ordini. Bisogna prima selezionare l'ordine e poi fare qualcosa con esso (visualizzare le informazioni dell'ordine, inviare un ordine di compravendita al server per modificarlo o chiuderlo) Ci sono due modi per selezionare gli ordini nel terminale, per ticket, che è il numero assegnato all'ordine sul server che non cambia per un ordine particolare, o per il numero dell'ordine (indice) con cui l'ordine è memorizzato nel terminale. Questo numero può cambiare ad ogni tick, a seconda di quali e quanti ordini vengono aperti, impostati, chiusi o cancellati.

Per lavorare con gli ordini, vengono implementati cicli di valutazione degli ordini.


So come iniziare un tale ciclo.

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

{

se(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

Come posso ottenere una variabile che dia TRUE quando gli ultimi due trade sono in perdita, e FALSE quando sono in profitto?

O in questo modo.

quando le transazioni sono chiuse da stop - da qualche parte la casella di controllo counter.... dovrebbe essere attivata ma come faccio a catturare il momento della chiusura?

 
rigonich:


Questo è l'indice che definisce la posizione dell'ordine nell'array in cui sono memorizzati i dati sugli ordini presenti nel terminale.

Cioè,ciò che è sottolineato (sotto SELECT_BY_POS) bool OrderSelect(int index, int select, int pool=MODE_TRADES)



Ho capito bene che l'ultimo ordine che ho chiuso avrà l'indice 1. E dopo aver chiuso quello successivo, indice 2... e così via con ogni nuova posizione chiusa? E i totali giornalieri? Contano gli scambi di ieri? O si ricomincia tutto da capo ogni giorno?
 
lottamer:


So come iniziare un tale ciclo...

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

{

se (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

Come posso ottenere una variabile che dia TRUE quando gli ultimi due trade sono in perdita, e FALSE quando sono in profitto?

O in questo modo.

quando le transazioni sono chiuse da stop - da qualche parte la casella di controllo counter.... dovrebbe essere attivata ma come faccio a catturare il momento della chiusura?


Il modo più semplice è quello di passare attraverso tutti gli ordini nel ciclo, cercando quello che è stato chiuso per ultimo, vedere se il tuo ordine ha chiuso su uno stop o un profitto, scegliere il suo ticket, ricominciare il ciclo da capo, se l'ordine con il ticket che hai salvato ha salvato, saltarlo, trovare quello che ha chiuso per ultimo ma uno...

P.S. E nonMODE_TRADES, ma MODE_HISTORY.

 
ma un'altra domanda ... funzioneSecondsAfterOpenLastPos() . se l'EA è stato disattivato, questa funzione restituirà il valore dell'ultimo trade CHIUSO ieri? (non posso controllarlo - il mercato è stagnante)
 
rigonich:


Ci sono alcune soluzioni a questi problemi. La più semplice è probabilmente la seguente: passa attraverso tutti gli ordini nel ciclo, cerca quello che è stato chiuso per ultimo, usa lo stop o il profitto per trovare l'ordine, salva il suo ticket, riavvia il ciclo, se l'ordine con il ticket che hai salvato è stato selezionato, saltalo,trova quello che ha chiuso per ultimo ma uno...

P.S. E nonMODE_TRADES, ma MODE_HISTORY.


la logica è chiara.... ma per me è impossibile scriverla nel mio codice... è troppo complicato... non ho mai lavorato con i cicli di forza bruta... semplicemente non ne avevo bisogno... quindi è una foresta oscura :))) e i loop che ho visto non mi sono molto chiari... è chiaro che provano qualcosa... e basta.

Potresti darmi l'esempio più semplice... ma con spiegazioni, così capisco cosa succede nel ciclo e dove?

 
lottamer:

forse puoi rifare le due opzioni da qui https://forum.mql4.com/ru/38949/page5#434244

Funzione TimeOpenLastPos().

Questa funzione restituisce l'ora dell'ultima posizione aperta.

Abbiamo bisogno di un tempo aperto dell'ultima posizione CHIUSA.

o

Funzione SecondsAfterOpenLastPos().

Questa funzione restituisce il numero di secondi dall'ultima posizione aperta.

E DEVE essere in ore.... invece che in secondi.

questo è più vicino.

La prima opzione può essere utilizzata con modifiche minime (cerca la storia e ciò di cui hai bisogno). Volete che non apra più di un trade al giorno?
 
lottamer:
Ma un'altra domanda ... la funzioneSecondsAfterOpenLastPos() . se l'EA è stato disattivato, questa funzione restituirà il valore dell'ultimo trade CHIUSO ieri? (non posso controllarlo - il mercato è stagnante)


Lo farà.

Più precisamente, sarà, ma non chiuso, bensì aperto.

 
rigonich:


In pratica si usa in tutte le operazioni che lavorano con gli ordini. Bisogna prima selezionare un ordine e poi fare qualcosa con esso (visualizzare le informazioni dell'ordine, inviare un ordine di compravendita al server per modificarlo o chiuderlo) Ci sono due modi per selezionare gli ordini nel terminale, per ticket, che è il numero assegnato all'ordine sul server che non cambia per un ordine particolare, o per il numero dell'ordine (indice) dove l'ordine è memorizzato nel terminale. Questo numero può cambiare ad ogni tick, a seconda di quali e quanti ordini vengono aperti, impostati, chiusi o cancellati.

Per lavorare con gli ordini, ci sono cicli di valutazione degli ordini.


Bene, per esempio, ho un ordine limite all'apertura di D1. TP e SL potrebbero non funzionare per alcuni giorni, se controlliamo un ordine, sarà disponibile e non ne apriremo uno nuovo. Quindi non è buono. Così, si perderanno potenziali scambi.
Motivazione: