Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 329
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Non c'è bisogno di ordinare l'array dopo ogni aggiunta di un elemento dell'array. È meglio spostare l'ordinamento
Dal riferimento
Mas[Blizko2] è il valore più piccolo più vicino nell'array
Grazie per la vostra risposta! Potreste dirmi che per determinare il prossimo elemento dell'array, ho usato l'elemento +1 già trovato, ma il tester dà un errore in questo punto.
Devo trovare il prossimo elemento. Ovviamente è +1, ma il programma mi dà un errore! Forse c'è un altro modo o forse lo faccio male? Per favore, datemi un suggerimento)
Blizko1 = Mas[Blizko2]+1;
o come questo?
ma poi alla compilazione un avvertimento sulla possibile perdita di dati
Con questa costruzione
Blizko1 = Mas[Blizko2]+1;
si aggiunge 1 al valore ottenuto dalla cella dell'indice Blizko2, ed è lì che viene memorizzato il prezzo - un valore doppio. State aggiungendo un 1 intero. Per evitare un avvertimento, è necessario scrivere +1.0
Ma questo non salverà nemmeno il "padre della democrazia russa", perché state aggiungendo 1 non all'indice ma al valore memorizzato nell'array Mas[] dall'indice Blizko2.
Quindi, naturalmente, per ottenere un valore da una cella vicina dell'array, è necessario aggiungere o sottrarre 1 all'indice. Ma qui abbiamo un errore in cui siete inciampati: se l'indice punta alla cella più esterna di una matrice - o 0 o l'ultima, allora sottraendo 1 (a 0) o aggiungendo 1 (all'ultima) si cade fuori dalla matrice - non c'è nessuna cella del genere. Di conseguenza, dovete controllare che Blizko2+1 non sia più di ArraySize(Mas)-1, o che Blizko2-1 non sia meno di zero.
E... ti è stato detto che non hai bisogno di ordinare l'array ad ogni iterazione del ciclo - hai bisogno di freni?
Dovrebbe essere ordinato dopo aver controllato se la dimensione dell'array è maggiore di 1.
E questo disegno non è affatto chiaro:
Guarda: in Blizko2 hai l'indice della cella dell'array con il prezzo.
Poi scrivi nell'array - nella sua cella Blizko2+1 il valore contenuto nella variabile Blizko1 (perché????) - dovresti avere dei prezzi lì, ma li stai riempiendo di valori incomprensibili.
Dovete capire cosa state facendo in generale - commentate ogni linea della vostra funzione. Pensieroso.
Con questa costruzione
si aggiunge 1 al valore ottenuto dalla cella dell'indice Blizko2, ed è lì che viene memorizzato il prezzo - un valore doppio. State aggiungendo un 1 intero. Per evitare un avvertimento, è necessario scrivere +1.0
Ma questo non salverà nemmeno il "padre della democrazia russa", perché state aggiungendo 1 non all'indice ma al valore memorizzato nell'array Mas[] dall'indice Blizko2.
Quindi, naturalmente, per ottenere un valore da una cella vicina dell'array, è necessario aggiungere o sottrarre 1 all'indice. Ma qui abbiamo un errore in cui siete inciampati: se l'indice punta alla cella più esterna di una matrice - o 0 o l'ultimissima, allora sottraendo 1 (a 0) o aggiungendo 1 (all'ultimissima), cadete fuori dalla matrice - non c'è nessuna cella del genere. Di conseguenza, dovete controllare che Blizko2+1 non sia più di ArraySize(Mas)-1, o che Blizko2-1 non sia meno di zero.
E... ti è stato detto che non hai bisogno di ordinare l'array ad ogni iterazione del ciclo - hai bisogno di freni?
Per ordinarlo, dobbiamo controllare se la dimensione dell'array è più di 1.
E questa costruzione non è affatto chiara:
Vedi: in Blizko2 hai l'indice della cella dell'array con il prezzo.
Poi scrivi nell'array - nella sua cella Blizko2+1 il valore contenuto nella variabile Blizko1 (perché????) - dovresti avere dei prezzi lì, ma li stai riempiendo di valori incomprensibili.
Dovete capire cosa state facendo in generale - commentate ogni linea della vostra funzione. Pensieroso.
Grazie per la risposta informativa! Lo scopo per cui voglio creare l'array è quello di determinare i prezzi degli ordini più vicini sotto il prezzo e sopra il prezzo, se ce ne sono. Se sono disponibili e la distanza da loro al prezzo supera la distanza che ho definito, allora apri gli ordini corrispondenti. Ho pensato che sarebbe stato così (ho descritto la logica delle mie azioni qui il più possibile)
Sembrerei qualcosa del genere
Sembrerei qualcosa del genere
Grazie, cosa significaDBL_MAX nel livello superiore?
Grazie! Cosa significaDBL_MAX?
Hai anche un link inserito dal motore intelligente del forum. È più facile cliccarci sopra che aspettare una risposta.
Hai anche un link inserito dal motore intelligente del forum. È più facile cliccarci sopra che aspettare una risposta.
Grazie! Vorrei avere un tale motore)))
Grazie per la risposta informativa! Lo scopo per cui intendo creare l'array è quello di determinare i prezzi degli ordini più vicini sotto il prezzo e sopra il prezzo, se ce ne sono. Se sono disponibili e la distanza da loro al prezzo supera una certa distanza, allora apri gli ordini corrispondenti. Ho pensato che sarebbe stato così (ho descritto la logica delle mie azioni qui il più possibile)
C'è un errore in questo commento di linea.
Forum sul trading, sistemi di trading automatico e test di strategie di trading.
Qualsiasi domanda, aiuto e discussione su algoritmi e codici per i principianti di MQL4
Alexey Viktorov, 2017.10.04 09:32
Dall'aiuto
Valore restituito
Restituisce l'indice del primo elemento trovato. Se il valore cercato non viene trovato, restituisce l'indice dell' elemento più piccolo più vicino tra cui si trova il valore cercato.
Mas[Blizko2] è il valore più piccolo più vicino nella matrice.
Resta solo da aggiungere che il riferimento non dice nulla sulla dipendenza dalla direzione di ordinamento dell'array. Quindi, nessuna manipolazione è necessaria dopo ArrayBsearch. Il compito è già fatto.
Artyom ha già spiegato tutto ulteriormente. Controlla l'uguaglianza di un indice a zero e la dimensione di un array per non saltare fuori dai limiti...
Come posso fare in modo che il mouse inizi ad essere tracciato solo dopo che il pulsante è stato cliccato? Ma la situazione accade (nell'idea di trasferire uno stop su tutti gli ordini in un punto con un clic del mouse dall'EA) quando clicco il pulsante, uno stop su tutti gli ordini al prezzo in cui il pulsante è stato cliccato inizia ad essere trasferito in una volta sola. Come può questa proprietà if(id==CHARTEVENT_CLICK)
if(ObjectGetInteger(0, "cm STOP ALL",OBJPROP_STATE))
Come posso fare in modo che il mouse inizi ad essere tracciato solo dopo che il pulsante è stato cliccato? Ma la situazione accade (nell'idea di trasferire uno stop su tutti gli ordini in un punto con un clic del mouse dall'EA) quando clicco il pulsante, uno stop su tutti gli ordini al prezzo in cui il pulsante è stato cliccato inizia ad essere trasferito in una volta sola. Come può questa proprietà if(id==CHARTEVENT_CLICK)
if(ObjectGetInteger(0, "cm STOP ALL",OBJPROP_STATE))