Victor, penso che l'interruttore sia meglio qui - è più veloce e più visivo.
bool IsOrderType(int type)
{
switch (type)
{
case OP_BUY:
case OP_SELL:
case OP_BUYLIMIT:
case OP_SELLLIMIT:
case OP_BUYSTOP:
case OP_SELLSTOP:
return (true);
}
return (false);
}
Oh, a proposito -- una ragionevole ottimizzazione del lavoro nel tester -- l'ho usato ultimamente.
int FindLastOpenTime(int tip, int imagic)
{
int Res=-1;
int lOrderOpenTime=-1;
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != imagic) continue;
if (!(tip==-1 || isOrderType(tip))) continue;
if (IsTesting()) return (OrderTicket()); // тутif (lOrderOpenTime==-1) {
lOrderOpenTime=OrderOpenTime();
Res=OrderTicket();
} elseif (lOrderOpenTime<OrderOpenTime()) {
lOrderOpenTime=OrderOpenTime();
Res=OrderTicket();
}
}
return (Res);
}
A proposito, la funzione si chiama FindLastOpenTime e restituisce un biglietto.
Sarebbe meglio così?
datetime FindLastOpenTime(int tip, int imagic, int& ticket)
{
//...
}
A proposito, la funzione si chiama FindLastOpenTime, ...
L'idea è che
if (lOrderOpenTime<OrderOpenTime()) {
lOrderOpenTime=OrderOpenTime();
Res=OrderTicket();
}
potrebbe iniziare a funzionare proprio a -1, non sono del tutto sicuro del perché abbia bisogno di un if...else esterno. Ritorno, imho, è davvero meglio lOrderOpenTime, poi ritorno -1 permetterà di catturare l'errore.
ha sempre ucciso la logica di una tale costruzione in operandi ciclici:
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != imagic) continue; if (!(tip==-1 || isOrderType(tip))) continue;
vedere aiuto :
L'istruzione continue trasferisce il controllo all'inizio dell'istruzione esterna while o for più vicina, causando l'inizio della prossima iterazione. Questo operatore è l'opposto di break.
Non è per niente chiaro, e se un ordine non passa le condizioni allora cosa? Uscire dal ciclo? se l'operatore continue è direttamente opposto all' operatore break...
Per me, la logica standard è più chiara e comprensibile:
int FindLastOpenTime(int type, int imagic){int time = 0;
for(int i = OrdersTotal() -1 ;i>=0;i--){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol()){
if(OrderType()==type){
if(OrderMagicNumber()==magic){
if(OrderOpenTime()>time){
time=OrderOpenTime();
}
}
}
}
}
}
return(time);
}
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
Victor, penso che l'interruttore sia meglio qui - è più veloce e più visivo.
Oh, a proposito -- una ragionevole ottimizzazione del lavoro nel tester -- l'ho usato ultimamente.
A proposito, la funzione si chiama FindLastOpenTime e restituisce un biglietto.
Sarebbe meglio così?
Victor, penso che lo scambio sia migliore qui - è più veloce e più chiaro.
È davvero più chiaro.
TheXpert:
A proposito, la funzione si chiama FindLastOpenTime, ...
if (lOrderOpenTime<OrderOpenTime()) { lOrderOpenTime=OrderOpenTime(); Res=OrderTicket(); }potrebbe iniziare a funzionare proprio a -1, non sono del tutto sicuro del perché abbia bisogno di un if...else esterno. Ritorno, imho, è davvero meglio lOrderOpenTime, poi ritorno -1 permetterà di catturare l'errore.è logico usare questo tipo di cose?
ha sempre ucciso la logica di una tale costruzione in operandi ciclici:
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != imagic) continue;
if (!(tip==-1 || isOrderType(tip))) continue;
vedere aiuto :
L'istruzione continue trasferisce il controllo all'inizio dell'istruzione esterna while o for più vicina, causando l'inizio della prossima iterazione. Questo operatore è l'opposto di break.
Non è per niente chiaro, e se un ordine non passa le condizioni allora cosa? Uscire dal ciclo? se l'operatore continue è direttamente opposto all' operatore break...
Per me, la logica standard è più chiara e comprensibile:
Puntura #2. Logica (logica) e brevità hanno poca correlazione.
Un primo esempio direttamente da MQL, che, tra l'altro, molte persone non sono schizzinose nell'usare.
Questa non è logica, è un omicidio della logica. Inoltre, è un potenziale terreno fertile per gli errori impliciti.
Non sei sicuro di dove sia la foratura? E perché il secondo? Se è il secondo, dov'è il primo?
Per coloro che non hanno un ufficio o una zip.
Dima aggiunge qualcosa per coloro che non hanno metaeditor.exe :-)
Victor, ancora complimenti!