Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 26
![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Una volta che avete pulito il vostro codice, sarà più leggibile per voi, per non parlare degli altri che hanno bisogno di capire la vostra logica. È lì che si vedranno tutti i bug.
Ora rimuovi le parentesi graffe accoppiate extra e disponi il resto normalmente in blocchi, e vedrai dove la tua logica è sbagliata.
Quali sono ridondanti?
Hai un sacco di parentesi graffe inutili nel tuo codice - elabora il codice con uno styler, e vedrai immediatamente le parentesi graffe vuote accoppiate extra.
Fatto
Fatto da
Un modo migliore: if(count<=20) count++; - perché contare ulteriormente se avete bisogno solo di 21?
2.{
if(Bars<801 || (IsTradeAllowed()==false)) //--- Проверим достаточна ли в истории баров для анализа и разрешение торговли
Print("Нет достаточного количества баров или торговля на текущем инструменте запрещена");
return;
}
Ed ecco il wigwam. Questo controllerà solo il numero di barre e stamperà quando ilconteggio>20, il resto del codice funzionerà quando ilconteggio<=20.
3.
if(OrderSymbol()==Symbol() && OrderType()<2)
continue;
Se avete solo bisogno di considerare quelli del mercato (e questo è quello che vi aspettate da un ulteriore codice), non avete bisogno dicontinuare affatto.
4.
{
dummy=(OrderClose(OrderTicket(),OrderLots(),Bid,0,White));
{
if((dummy==true) && ((OrderSelect(i,SELECT_BY_POS,MODE_TRADES))==false))
PlaySound("music");
Sleep(20000);
PlaySound("music");
Sleep(20000);
PlaySound("music");
Sleep(20000);
dummy=false;
ExpertRemove();
}
}
Chiude un ordine e si elimina? E se ce ne fossero altri? E abbiamo un intero minuto per dormire.
Non ho guardato il codice sopra, non c'è ancora un posto dove testarlo.
1 ok, lo sistemerò
2 non va bene, i seguenti blocchi non dovrebbero funzionare acount<20
3 OK, lo correggerò
4 Sì, è un minuto ma dovrebbe essere avviato solo se non ci sono più ordini a mercato per il simbolo corrente. Ho cercato di implementarlo attraverso un risultato negativo della selezione dell'ordine, ecco perché dovremmo impostare il ritorno da qualche parte, ma il ritorno in void OnTick() non sembra così buono. E ancora, OrdersTotal() darà il risultato sbagliato se abbiamo molti ordini per tutti i simboli.
2 non va bene, i seguenti blocchi non dovrebbero funzionare quandocount<20
Poi abbiamo bisogno di aggiungere else return dopo il blocco;
4 Sì, è un minuto ma dovrebbe essere avviato solo se non ci sono più ordini a mercato per il simbolo corrente. Ho cercato di implementarlo attraverso un risultato negativo della selezione degli ordini, ecco perché dovremmo impostare il ritorno da qualche parte, mentre il ritorno in void OnTick() non sembra molto buono. E ancora, OrdersTotal() darà il risultato sbagliato se abbiamo molti ordini su tutti i simboli.
Perché abbiamo bisogno di tre suoni?
Bene, possiamo fare tutto in due fasi: nel primo ciclo, si chiudono gli ordini e in quello successivo si ricalcolano tutti gli ordini di mercato per controllare se ce ne sono ancora, e se non ce ne sono, suonano le fanfare.
Ma non ho ancora capito qual è il trucco della musica dopo la chiusura degli ordini. Beh, si può fare una stampa al diario o inviare un messaggio alla posta o una notifica al proprio smartphone, ma perché si dovrebbe trasformare un EA in un carillon?Allora dovreste aggiungere un ritorno dopo il blocco else return;
Perché abbiamo bisogno di tre volte il suono?
Ma si può fare tutto in due passi: nel primo ciclo si chiudono gli ordini, e in quello successivo si ricalcolano tutti gli ordini di mercato per controllare se ce ne sono non chiusi, e se non ce ne sono, suona la fanfara.
Non ho ancora capito qual è il trucco della musica quando gli ordini sono stati chiusi. Bene, possiamo stamparlo sul giornale, inviare un messaggio alla posta o notificarlo allo smartphone, ma perché dovremmo trasformare la nostra EA in un carillon?Come si separano i cicli?
Come faccio a legare il suono all'ultimo ordine chiuso? Perché se non ci sono ordini, l'Expert Advisor non farebbe scattare un suono.
E un'ultima cosa: sono contento della musica per ora
Come separare i cicli?
Come legare il suono all'ultimo chiuso? perché se non ci sono ordini, l'Expert Advisor non funziona
E infine, la variante musicale mi va bene per il momento.
Cosa intende per "separato"? Non dobbiamo separare nulla, abbiamo solo bisogno di due cicli (sono quasi uguali) ma uno ha OrderClose() e l'altro ha un contatore di ordini. Il criterio di selezione dell'ordine è lo stesso. Se il contatore è=0, tutti gli ordini sono stati chiusi e possiamo suonare la musica.
Ho anche notato che la condizione
{
if((Bid>=ma1-X*Point && Bid<ma1) || (Bid<=ma1+X*Point && Bid>ma1))
{
{y=true;}
}
}
Non sembra essere legato a un certo ordine, quindi a cosa serve nel ciclo?
Lo controllerei prima del ciclo di chiusura.