Laços e Encerramento ou Eliminação de Pedidos - página 2

 

O que faz mal se a OrderSelect não seleciona o pedido?
A condição OrderMagicNumber==MagicNo nunca seria verdadeira. Portanto, não há necessidade de verificar o resultado da OrderSelect e continuar se a OrderSelect não for válida.

é melhor se você quiser verificar OrderSelect para diminuir a variável do laço. Exemplo:

for(PositionIndex = 0; PositionIndex < OrdersTotal() ; PositionIndex ++)  
   {
   if( ! OrderSelect(PositionIndex, SELECT_BY_POS, MODE_TRADES) ) { PositionIndex--; continue; }
 
  1. Se a ordemSelect falhar, você poderá obter o número mágico da última ordem selecionada ou algo deixado na memória e isso poderá coincidir. Verifique sempre.
  2. Você deve SEMPRE fazer uma contagem regressiva. Supostamente enquanto você estava trabalhando na posição 3 posição 0 fechada. A próxima ordem em que você queria trabalhar era na posição 4, mas estará na posição 3 quando você fizer um loop e aumentar a posiçãoIndex para 4. Agora você perdeu uma. Ao fazer a contagem regressiva você pode processar a mesma ordem uma segunda vez, mas não falhará nenhuma.
 
WHRoeder:
  1. Se a ordemSelect falhar, você poderá obter o número mágico da última ordem selecionada ou algo deixado na memória e isso poderá coincidir. Verifique sempre.
  2. Você deve SEMPRE fazer uma contagem regressiva. Supostamente enquanto você estava trabalhando na posição 3 posição 0 fechada. A próxima ordem em que você queria trabalhar era na posição 4, mas estará na posição 3 quando você fizer loop e incrementar a posição Index para 4. Agora você perdeu uma. Ao fazer a contagem regressiva você pode processar a mesma ordem uma segunda vez, mas não falhará nenhuma.

1- Quem lhe disse isso? E de que memória você está falando?


2- Não mencionei a contagem para baixo ou para cima. o código em si não está contando para baixo.

 
  1. OrderMagicNumber() e os outros SEMPRE devolvem algo. Se OrderSelect() falhar, você recebe lixo aleatório, sobras, talvez da seleção anterior bem sucedida, talvez pelo valor da última ordem fechada, talvez o que já está em um registro. Já tentou desreferenciar um ponteiro em um objeto apagado? Memória, esse é o pequeno chip preto na placa de circuito. Tente isto
    int start(){    Print(Whatever()); }
    double Whatever(){
       for(i=0; i<10; i++) double tmp=Close[i];
       // no value returned
    }
    e postar alguma saída.
  2. Eu sei que "o código fornecido em si não está em contagem regressiva". Esse é o problema. Sempre faça a contagem regressiva! Seu decréscimo NÃO funcionará e é um loop infinito em potencial.
    if( ! OrderSelect(PositionIndex, SELECT_BY_POS, MODE_TRADES) ) { PositionIndex--; continue; }

 

Existe uma razão específica para codificar:

if( ! OrderSelect(PositionIndex, SELECT_BY_POS, MODE_TRADES) ) continue;

ao invés de (?)

if( OrderSelect(PositionIndex, SELECT_BY_POS, MODE_TRADES) )
{
  // statements if true
}

Eu sei que é considerado um não-não por alguns padrões de codificação. Ele dá um melhor desempenho ou é apenas uma preferência?

 
burgie:

Existe uma razão específica para codificar:

ao invés de (?)

Eu sei que é considerado um não-não por alguns padrões de codificação. Ele dá um melhor desempenho ou é apenas uma preferência?

Nenhuma razão específica que eu me lembre... Não sei realmente qual é a coisa lógica a fazer, por que a OrderSelect() deveria falhar... e se falhar, o que deveria ser feito?
 
burgie:

Existe uma razão específica para codificar:

ao invés de (?)

Eu sei que é considerado um não-não por alguns padrões de codificação. Ele dá um melhor desempenho ou é apenas uma preferência?


Dentro de um loop, isto é exatamente o mesmo, escolha o que você preferir.
 
burgie:

Existe uma razão específica para codificar:

ao invés de (?)

Eu sei que é considerado um não-não por alguns padrões de codificação. Ele dá um melhor desempenho ou é apenas uma preferência?

 

se(orderselect(......)) executar isto //---não voltar atrás

if(!orderselect(.......))continuar // voltar e verificar

 
MirTD:

se(orderselect(......)) executar isto //---não voltar atrás

if(!orderselect(.......))continuar // voltar e verificar

Já respondi à pergunta que me foi feita sobre minha codificação...
Razão: