Victor, eu acho que o interruptor é melhor aqui - é mais rápido e mais visual.
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 propósito -- otimização razoável do trabalho no testador -- tenho usado isso 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 propósito, a função é chamada FindLastOpenTime e retorna um bilhete.
Seria melhor assim?
datetime FindLastOpenTime(int tip, int imagic, int& ticket)
{
//...
}
A propósito, a função é chamada FindLastOpenTime, ...
A idéia é que
if (lOrderOpenTime<OrderOpenTime()) {
lOrderOpenTime=OrderOpenTime();
Res=OrderTicket();
}
pode começar a trabalhar logo em -1, não sei bem por que precisa de um externo se...senão... Retornar, imho, é realmente melhor lOrderOpenTime, então o retorno -1 permitirá apanhar o erro.
sempre matou a lógica de tal construção em operandos cíclicos :
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != imagic) continue; if (!(tip==-1 || isOrderType(tip))) continue;
ver ajuda :
A declaração contínua transfere o controle para o início da declaração externa mais próxima enquanto ou para declaração, causando o início da próxima iteração. Este operador é o oposto de uma pausa.
Não está nada claro, e se uma ordem não passar as condições, então o quê? Sair do laço? se continuar operando é diretamente o oposto de quebrar a operadora ...
Para mim, a lógica padrão é mais clara e mais compreensível:
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);
}
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
Victor, eu acho que o interruptor é melhor aqui - é mais rápido e mais visual.
Oh, a propósito -- otimização razoável do trabalho no testador -- tenho usado isso ultimamente.
A propósito, a função é chamada FindLastOpenTime e retorna um bilhete.
Seria melhor assim?
Victor, eu acho que o interruptor é melhor aqui - é mais rápido e mais claro.
É realmente mais claro.
TheXpert:
A propósito, a função é chamada FindLastOpenTime, ...
if (lOrderOpenTime<OrderOpenTime()) { lOrderOpenTime=OrderOpenTime(); Res=OrderTicket(); }pode começar a trabalhar logo em -1, não sei bem por que precisa de um externo se...senão... Retornar, imho, é realmente melhor lOrderOpenTime, então o retorno -1 permitirá apanhar o erro.é lógico usar este tipo de coisa?
sempre matou a lógica de tal construção em operandos cíclicos :
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != imagic) continue;
if (!(tip==-1 || isOrderType(tip))) continue;
ver ajuda :
A declaração contínua transfere o controle para o início da declaração externa mais próxima enquanto ou para declaração, causando o início da próxima iteração. Este operador é o oposto de uma pausa.
Não está nada claro, e se uma ordem não passar as condições, então o quê? Sair do laço? se continuar operando é diretamente o oposto de quebrar a operadora ...
Para mim, a lógica padrão é mais clara e mais compreensível:
Punção nº 2. A lógica (lógica) e a brevidade têm pouca correlação.
Um excelente exemplo logo fora da MQL, que, a propósito, muitas pessoas não são reticentes ao uso.
Isto não é lógica - é um assassinato da lógica. Além disso, é um terreno potencialmente fértil para erros implícitos.
Não tem certeza de onde está o furo? E por que o segundo? Se é o segundo, onde está o primeiro?
Para aqueles que não têm um escritório ou um zíper.
Dima acrescentar algo para aqueles que não têm metaeditor.exe :-)
Victor, parabéns novamente!