Forse potreste capire meglio un ciclo for capendo prima un ciclo while... un ciclo for è solo un ciclo while con condizione iniziale e incremento incorporati...
Controllate la documentazione sufor che dice . . .
"L'operatorefor è equivalente alla seguente successione di operatori:"
Expression1;
while(Expression2)
{
operator;
Expression3;
};
Specificamente collegato alla tua domanda,"Perché questo primo esempiocontiene una "condizione" come secondo parametro mentre il secondo esempio contiene "Expression2"come secondo parametro?"un'espressione può essere una condizione, una condizione si traduce in un valore vero o falso, per esempio (a > b) o (c || d) o (OrdersTotal() >= 0) , inoltre la documentazione dice anche . ."Expression2 è il test condizionale per la terminazione del ciclo."
Simon,
un'espressione può essere una condizione
Quindi, il parametro due nell'intestazione di un operatore 'for' può essere un'espressione O una condizione? Presumo che Expression_1 e Expression_3 debbano rimanere espressioni e non cambiare in condizioni, giusto? Non vedo perché l'espressione 1 & 3 non possano essere anche condizioni. Entrambe le espressioni 1&3 sono solo parametri da riempire. (essendo una condizione POTREBBE essere in alternativa il parametro due aka lo scopo di Expression_2)
Si prega di confermare i pensieri.
Le espressioni possono essere operazioni aritmetiche (2+2=4), assegnazioni, ecc. (tutte elencate nel dizionario di MetaEditor).
La condizione è vera || falsa (esempi: a>b, a>=b, a==b, ecc.).
Anche le operazioni sono contenute nel dizionario MetaEditor (esempi: Break, Continue, Return, while, for, ecc.)
Grazie
Simon,
un'espressione può essere una condizione
Quindi, il parametro due nell'intestazione di un operatore 'for' può essere un'espressione O una condizione? Presumo che Expression_1 e Expression_3 debbano rimanere espressioni e non cambiare in condizioni, giusto? Non vedo perché l'espressione 1 & 3 non possano essere anche condizioni. Entrambe le espressioni 1&3 sono solo parametri da riempire. (essendo una condizione POTREBBE essere in alternativa il parametro due aka lo scopo di Expression_2)
Documentazione - while
Libro - while
Simon, mi eserciterò nell'uso dell'operazione while nel codice. fatti un favore... Mi piace il suono di questo! :) Grazie.
William, Il numero, convertito in un booleano è una condizione ... (1=vero, 0=falso). Molte grazie.
Grazie a te.
Simon,
Ho scritto un EA che dovrebbe ;) essere in grado di fare quanto richiesto.
Sto condividendo una combinazione di questo EA accoppiato con un'istantanea del risultato dalla scheda "Esperti" nel terminale.
L'EA sembra essere in grado di selezionare l'ordine USDJPY e stampare le sue informazioni nella scheda Esperti. Perché l'EA non chiude l'ordine e non stampa le informazioni dell'ordine?
grazie.
Simon,
Ho scritto un EA che dovrebbe ;) essere in grado di fare quanto richiesto.
Sto condividendo una combinazione di questo EA accoppiato con un'istantanea del risultato dalla scheda "Esperti" nel terminale.
L'EA sembra essere in grado di selezionare l'ordine USDJPY e stampare le sue informazioni nella scheda Esperti. Perché l'EA non chiude l'ordine e non stampa le informazioni dell'ordine?
grazie.
Per favore, spiega il tuo codice e cosa dovrebbe fare... in particolare parlami del mentre, per favore.
Simon,
Per favore, spiega il tuo codice e cosa dovrebbe fare... in particolare parlami del mentre, per favore.
Farò del mio meglio per spiegare il codice e il suo scopo.
Scopo del codice:
1. Selezionare l'ordine USDJPY da un gruppo di tre ordini.
2. Modificare TP e SL dell'ordine USDJPY.
3. Eseguire la funzione OrderPrint().
4. Chiudere l'ordine USDJPY.
Spiegazione del codice:
In primo luogo, le variabili sono dichiarate.
int i; double bid_ask;
In secondo luogo, viene eseguito il ciclo 'while'.
Logica del ciclo 'while':
Lafunzione OrderSelect() usa la variabile 'i' come sostituto di un numero 1,2,3,ecc. (tenetelo a mente per favore)
Quindi, se la variabile i all'interno della funzione OrderSelect() e OrderSymbol() NON è USDJPY, aumenta la variabile i di 1. ( i++; )
while(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()!="USDJPY")
i++;
Il ciclo 'while' aumenta la variabile 'i' fino a quando la funzione OrderSelect() seleziona il biglietto d'ordine corretto E la funzione OrderSymbol() seleziona un ordine USDJPY. Quando entrambi gli obiettivi sono stati raggiunti, il ciclo while diventa falso e il controllo viene passato sotto i++; (il corpo del ciclo while).
In terzo luogo, viene eseguita la funzione OrderModify().
OrderModify(i,OrderOpenPrice(),50*Point,50*Point,0,CLR_NONE);
Quarto, viene eseguita la funzione OrderPrint().
OrderPrint();
Quinto, i parametri sono inclusi per discernere se l'ordine da chiudere è un ordine di acquisto o di vendita.
if(OrderType()==OP_BUY){bid_ask=Bid;} if(OrderType()==OP_SELL){bid_ask=Ask;}
Insesto luogo, una volta che il programma distingue se l'ordine è di acquisto o di vendita, esegue la funzione OrderClose().
OrderClose(i,OrderLots(),bid_ask,3,CLR_NONE);
Settimo (e ultimo), il programma include un commento che mostrerà la variabile 'i' per confermare che il numero del ticket è effettivamente il ticket su USDJPY durante il test visivo in strategy tester.
Comment("i = " ,i);
Grazie.
Simon,
logica del ciclo 'while':
La funzione OrderSelect() usa la variabile 'i' come sostituto di un numero 1,2,3,ecc. (tenetelo a mente per favore)
Quindi, se la variabile i nella funzione OrderSelect() e OrderSymbol() NON è USDJPY, aumenta la variabile i di 1. ( i++; )
Il ciclo 'while' aumenta la variabile 'i' fino a quando la funzione OrderSelect() seleziona il biglietto d'ordine corretto E la funzione OrderSymbol() seleziona un ordine USDJPY. Quando entrambi gli obiettivi sono stati raggiunti, il ciclo while diventa falso e il controllo viene passato sotto i++; (il corpo del ciclo while).
Se avessi incluso il controllo dei valori di ritorno e la segnalazione degli errori, probabilmente avresti visto il tuo problema da solo.
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Ciao comunità MQL4,
Primo riferimento: https://book.mql4.com/operators/for
Secondo il primo riferimento, un esempio di formato dell'operatore 'for' è scritto così:
Secondo riferimento: https://docs.mql4.com/basis/operators/for
Secondo il secondo riferimento, l'esempio fornito dell'operatore 'for' è descritto come segue:
Perché questo primo esempio contiene una "condizione" come secondo parametro mentre il secondo esempio contiene "Expression2" come secondo parametro?
Qual è il significato di questa contraddizione?
Ha anche importanza?
Se devo usare l'operatore del ciclo "for", credo che devo avere una comprensione approfondita di tutti i suoi parametri.
Grazie.