Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 115
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
Ragazzi, ecco una domanda: come faccio a mettere valori variabili in un array unidimensionale?
Non mandarlo in aiuto - lì non c'è nessun esempio per un problema del genere.
Diciamo che c'è una variabile a, che cambia in certe condizioni.
Voglio un array per memorizzare gli ultimi 3 valori di questa variabile. Come è implementato questo in mql4?
Sto scrivendo int mas[3];
mas[]=a; all'interno del ciclo, dopo una condizione che cambia a,
Il compilatore dà fuori ']', ma non funziona nulla, anche se logicamente dovrebbe. - Vuole che metta qualche espressione sconosciuta dentro le parentesi in mas[]=a.
MQL4 ha qualche funzione che riempie l'array con un valore variabile ad ogni iterazione del ciclo?
Mi scuso per non aver trovato l'inizio della corrispondenza, ma vorrei consigliare immediatamente di evitare condizioni e calcoli complessi al loro interno - questo rende il codice illeggibile e di conseguenza complica la ricerca di errori logici, io scriverei il tuo codice così:
Se capisci quello che voglio dire, puoi modificare il codice che ti ho dato un po' di più, voglio dire di metterlo in una condizione separataif(OrderType()==OP_BUY....
Allora sarà molto più facile trovare errori logici, imho
Inserire dopo ogni OrderSend => ritorno
o fare una selezione tramite l'interruttore :
Provando questo e non funziona.
hai pochi parametri di input nella chiamata del tuo indicatore personalizzato - conta quantevariabili esterne nell'indicatoreMorning Flat? (extern) - questo è il numero di parametri che dovreste passare quando usate iCustom
.....
Scrivo int mas[3]=a; all'interno del ciclo dopo la condizione quando a cambia,
ma non funziona nulla, anche se logicamente dovrebbe.
Imparate a fare tutte le azioni passo dopo passo piuttosto che tutte insieme.
Esempio :
hai pochi parametri di input nella chiamata del tuo indicatore personalizzato - conta quantevariabili esterne nell'indicatoreMorning Flat? (extern) - questo è il numero di parametri che dovreste passare quando usate iCustom
Li ho già provati tutti.
Ho risolto in un altro modo. Ho inserito il codice di calcolo del prezzo dell'indicatore nel mio Expert Advisor.
La logica del codice è la stessa, ma se si dividono le condizioni, è più veloce trovare dove si trova l'errore logico, e nel tuo caso, se lo metti in una condizione separata, ottieni l'ottimizzazione - la condizione sarà controllata una volta e non 4 volte:
in una condizione separata, otteniamo un'ottimizzazione del codice - la condizione sarà controllata una volta e non 4 volte come nel tuo esempio.
Controllate l'output nel diario dell'Expert Advisor usando il comando
per la registrazione in modo da poter vedere quale frammento di codice è stato eseguito e con quali parametri
Grazie per la vostra risposta. Dividere le condizioni al limite. Controllato la logica con i commenti. Si è scoperto che la chiusura della posizione si basa sulle condizioni della prima posizione aperta. Significa che se prima abbiamo aperto una posizione Buy o Sell con la Condizione 1 e poi una seconda posizione aperta con la stessa condizione ma con la Condizione 2, questa condizione di chiusura viene ignorata e anche la seconda posizione viene chiusa con la Condizione 1 indipendentemente dall'altro numero magico. Cosa devo fare?
Li ho già esaminati tutti.
Ho risolto il problema in un modo diverso. Ho incollato il codice del calcolo del prezzo dall'indicatore a Expert Advisor.
Ho notato che iCustom() non è stato chiamato correttamente, dovrebbe essere così:
Io passo 7 parametri quando chiamo l'indicatore, tu l'hai chiamato con 3 parametri
Lascerei la chiamata dell'indicatore, ma modificherei l'indicatore stesso - rimuoverei le variabili esterne e gli oggetti grafici dal codice dell'indicatore
Ho controllato la logica con i commenti. Si è scoperto che le posizioni vengono chiuse in base alle condizioni della prima posizione aperta.
Congratulazioni! Sei sulla strada giusta, ma è meglio in fase di debug stamparlo nel diario (Print()) invece che nel commento ( Commetn())
Mostrami il codice.
Allora, ho notato che non hai chiamato correttamente iCustom(), dovrebbe essere così:
Io passo 7 parametri quando chiamo l'indicatore, e tu l'hai chiamato con 3 parametri
Lascerei la chiamata dell'indicatore, ma modificherei l'indicatore stesso - rimuoverei le variabili esterne e gli oggetti grafici dal codice dell'indicatore
congratulazioni! Sei sulla strada giusta, ma è meglio, in fase di debug, fare l'output nel giornale (Print()) invece che nel commento (Commetn())
mostrare il codice.
Ho rimosso le impronte.
Ho rimosso le impronte.
Non conosco tutta la logica del tuo codice, ma dopo ogni chiusura dell'ordine devi sicuramente uscire dal ciclo tramite break; e al prossimo tick devi controllare nuovamente gli ordini sulle tue condizioni - non so come si comportaOrderSelect() dopo che l'ordine è chiuso - se l'ordine è chiuso, allora cosa viene selezionato, o ci sarà un errore?
Fondamentalmente, il vostro problema è che volete controllare e chiudere tutto in una volta in un solo ciclo.
interruttore()
o fare una funzione per chiudere l'ordine (ci sono funzioni già pronte per gli ordini https://www.mql5.com/ru/forum/131859/page2#434206 )
o usare la pausa dopo che l'ordine è chiuso nel vostro codice
Non conosco tutta la logica del tuo codice, ma dopo ogni chiusura di un ordine, devi sicuramente uscire dal ciclo tramite break; e al prossimo tick devi controllare di nuovo le tue condizioni - non so come si comportaOrderSelect() dopo che l'ordine è chiuso - se l'ordine è chiuso, allora cosa viene selezionato, o un errore?
Fondamentalmente, il vostro problema è che volete controllare e chiudere tutto in una volta in un solo ciclo.
interruttore()
o fare una funzione per chiudere l'ordine (ci sono funzioni già pronte per gli ordini https://www.mql5.com/ru/forum/107476 )
o usa la pausa dopo che l'ordine è chiuso nel tuo codice
Grazie. La rottura sembra aver aiutato. Vedremo cosa succederà dopo.