Mercado pulou minha saída parcial e acionou take profit

 

Pessoal, boa tarde!

Estou desenvolvendo um EA, para operar com WDO, que abre uma posição com take profit de 1 ponto e execuções parciais no zero a zero e no meio ponto.

Na maioria dos casos tudo funciona muito bem, mas testando em uma determinada data, o mercado já tinha acionado a parcial no zero a zero, pulou a saída parcial de meio ponto e foi direto pro take profit, saindo da posição com a quantidade de contratos restante na posição. Isso fez com que a ordem de liquidação parcial de meio ponto ficasse em aberto. Na sequência, o mercado pegou a ordem que tinha ficado em aberto, abrindo uma posição contrária à tendência.

Ex.:

Posição: SELL             40 contratos a 3.750,00, TP a 3.749,00

             BUY LIMIT     25 contratos a 3.750,00 (zero a zero)

             BUY LIMIT     5 contratos a 3.749,50 (meio ponto)

1) execução parcial de 25 contratos a 3.750,00, restando 15 contratos para o TP em 3.749,00;

2) mercado pula negociação a 3.749,50 e passa a operar em 3.749,00, executando o TP de 15 contratos.

3) ordem BUY LIMIT de 5 contratos a 3.749,50 fica aberta.

4) EA não consegue cancelar a ordem, que é executada no mesmo instante que o TP foi acionado, abrindo posição comprada de 5 contratos a 3.749,50 em um mercado de baixa.

O código possui gerenciador que cancela as ordens intermediárias, caso não exista posição em aberto, mas não funcionou neste caso.

Imagino que isso possa ter acontecido em função de negociações diretas, levando o mercado diretamente a negociações em um determinado patamar de preço, sem ter passado pelo preço de acionamento da minha ordem de liquidação parcial (no exemplo, a de 5 contratos a 3.749,50).

Para resolver esse problema, estou alterando o código para fazer o controle do TP diretamente pelo EA (não deixar a plataforma fazer o net e contrtolar o TP com o volume adequado), conforme código abaixo (obs.: por favor não reparem o padrão de definição de variáveis e a identação "javesca" rsrsrsrs), mas desconfio que possa existir uma maneira melhor de resolver, pois imagino que isso deva acontecer com frequência com outros desenvolvedores.

void VerificaTP(){
   int volumePosicao = 0;
   for(int i = PositionsTotal()-1 ; i >= 0 ; i--){
      string symbol = PositionGetSymbol(i);
      ulong magic = PositionGetInteger(POSITION_MAGIC);
      ulong ticketPosicao = PositionGetInteger(POSITION_TICKET);
      int positionType = (int)PositionGetInteger(POSITION_TYPE);
      volumePosicao = (int)PositionGetDouble(POSITION_VOLUME);
      double positionTakeProfit = PositionGetDouble(POSITION_TP);
      int controle = 0;
      if(positionTakeProfit > 0){
         controle = 1;
      }
      
      if(symbol == _Symbol && magic == trade.RequestMagic() && volumePosicao > 0){
         // verificar quais ordens estão abertas
         for(int j = OrdersTotal() - 1 ; j >= 0 ; j--){
            ulong ticketOrdem = OrderGetTicket(j);
            string orderSymbol = OrderGetString(ORDER_SYMBOL);
            ulong orderMagic = OrderGetInteger(ORDER_MAGIC);
            string tpOrdem = OrderGetString(ORDER_COMMENT);
            if(orderSymbol == _Symbol && orderMagic == trade.RequestMagic()){
               if(tpOrdem == "Zero"){
                  controle = controle + 2;
               } else if(tpOrdem == "Meio"){
                  controle = controle + 4;
               } else if(tpOrdem == "TP"){
                  controle = controle + 8;
               }
            }
         }
         switch(controle){
            // a ordem dos números na verificação do case obedece as combinações de maior para menor incidência, 
            // de forma a exigir menos processamento

            case 1:
               // tem apenas o PositionTP
               // não fazer nada
               ;
               break;
            case 15:
               // tem ordem TP, ZZ, M e PositionTP
               // cancelar PositionTP (flag para não permitir controle pelo PositionTP)
               ;
               break;
            case 7:
               // tem ordem ZZ, M e PositionTP
               // cancelar o PositionTP e criar a ordem TP (flag para não permitir controle pelo PositionTP)
               ;
               break;
            case 5:
               // tem ordem M e PositionTP
               // cancelar o PositionTP e criar a ordem TP (flag para não permitir controle pelo PositionTP)
               ;
               break;
            case 0:
               // não tem PositionTP, nem ordem ZZ, nem ordem M, nem ordem TP
               // criar PositionTP (flag para permitir controle pelo PositionTP)
               ;
               break;
            case 2:
               // tem apenas a ordem ZZ
               // criar a ordem TP
               ;
               break;
            case 3:
               // tem a ordem ZZ e PositionTP
               // cancelar o PositionTP e criar a ordem TP (flag para não permitir controle pelo PositionTP)
               ;
               break;
            case 4:
               // tem apenas a ordem M
               // criar a ordem TP 
               ;
               break;
            case 6:
               // tem ordem M e ZZ
               // criar a ordem TP
               ;
               break;
            case 8:
               // tem apenas a ordem TP
               // cancelar ordem TP e criar PositionTP (flag para permitir controle pelo PositionTP)
               ;
               break;
            case 9:
               // tem ordem TP e PositionTP
               // cancelar ordem TP e criar PositionTP (flag para permitir controle pelo PositionTP)
               ;
               break;
            case 10:
               // tem ordem TP e ZZ
               // não faz nada
               ;
               break;
            case 11:
               // tem ordem TP, ZZ e PositionTP
               // cancelar PositionTP (flag para não permitir controle pelo PositionTP)
               ;
               break;
            case 12:
               // tem ordem TP e M
               // não faz nada
               ;
               break;
            case 13:
               // tem ordem TP, M e PositionTP
               // cancelar PositionTP (flag para não permitir controle pelo PositionTP)
               ;
               break;
            case 14:
               // tem ordem TP, ZZ e M
               // não faz nada 
               ;
               break;
            default:
               Print("Combinação não localizada: ", controle);
         }
      }
   }
}

Alguém tem uma dica de como resolver esse problema ou sugere alguma forma mais eficiente do meu EA lidar com a liquidação parcial?

Obs.: tentei cancelar a ordem quando o tick tiver pulado o preço da ordem pendente, mas também não deu certo.

Obrigado.

 
eduardobasilio:

Pessoal, boa tarde!

Estou desenvolvendo um EA, para operar com WDO, que abre uma posição com take profit de 1 ponto e execuções parciais no zero a zero e no meio ponto.

Na maioria dos casos tudo funciona muito bem, mas testando em uma determinada data, o mercado já tinha acionado a parcial no zero a zero, pulou a saída parcial de meio ponto e foi direto pro take profit, saindo da posição com a quantidade de contratos restante na posição. Isso fez com que a ordem de liquidação parcial de meio ponto ficasse em aberto. Na sequência, o mercado pegou a ordem que tinha ficado em aberto, abrindo uma posição contrária à tendência.

Ex.:

Posição: SELL             40 contratos a 3.750,00, TP a 3.749,00

             BUY LIMIT     25 contratos a 3.750,00 (zero a zero)

             BUY LIMIT     5 contratos a 3.749,50 (meio ponto)

1) execução parcial de 25 contratos a 3.750,00, restando 15 contratos para o TP em 3.749,00;

2) mercado pula negociação a 3.749,50 e passa a operar em 3.749,00, executando o TP de 15 contratos.

3) ordem BUY LIMIT de 5 contratos a 3.749,50 fica aberta.

4) EA não consegue cancelar a ordem, que é executada no mesmo instante que o TP foi acionado, abrindo posição comprada de 5 contratos a 3.749,50 em um mercado de baixa.

O código possui gerenciador que cancela as ordens intermediárias, caso não exista posição em aberto, mas não funcionou neste caso.

Imagino que isso possa ter acontecido em função de negociações diretas, levando o mercado diretamente a negociações em um determinado patamar de preço, sem ter passado pelo preço de acionamento da minha ordem de liquidação parcial (no exemplo, a de 5 contratos a 3.749,50).

Para resolver esse problema, estou alterando o código para fazer o controle do TP diretamente pelo EA (não deixar a plataforma fazer o net e contrtolar o TP com o volume adequado), conforme código abaixo (obs.: por favor não reparem o padrão de definição de variáveis e a identação "javesca" rsrsrsrs), mas desconfio que possa existir uma maneira melhor de resolver, pois imagino que isso deva acontecer com frequência com outros desenvolvedores.

Alguém tem uma dica de como resolver esse problema ou sugere alguma forma mais eficiente do meu EA lidar com a liquidação parcial?

Obs.: tentei cancelar a ordem quando o tick tiver pulado o preço da ordem pendente, mas também não deu certo.

Obrigado.

Oi Eduardo.

Acho que uma forma mais "limpa" e segura de fazer o que vc quer é capturar o evento de execução da sua saída parcial e do seu TP e fazer esse tratamento imediatamente ao receber a notificação do evento.

Caso não saiba como fazer isso, estude a função OnTradeTransaction() na documentação.

No exato momento em que chegar uma notificação de que o TP foi executado, vc manda cancelar imediatamente todas as ordens de saída parcial que não tiverem sido executadas.

Pode acontecer de alguma delas ser executada antes vc conseguir cancelar. Nesse caso, vc receberá uma nova notificação em OnTradeTransaction() e aí é só mandar zerar a posição que foi aberta indevidamente.

Uma coisa me chamou a atenção na sua estratégia: por que vc faz uma saída parcial no "zero a zero"? 

Não seria melhor, em vez de abrir posição com 40 contratos e sair parcialmente com 25 contratos no "zero-a-zero", vc entrar com apenas 15 contratos e não fazer essa saída parcial?

Do jeito que vc está fazendo, a menos que eu tenha entendido algo errado, me parece que vc está arriscando à toa o capital correspondente ao risco desses 25 contratos, além de estar pagando emolumentos por eles à toa também, uma vez que é certo que não vai lucrar nada com eles (somente os outros 15 poderão render algum lucro).

 
eduardobasilio:

Pessoal, boa tarde!

Estou desenvolvendo um EA, para operar com WDO, que abre uma posição com take profit de 1 ponto e execuções parciais no zero a zero e no meio ponto.

Na maioria dos casos tudo funciona muito bem, mas testando em uma determinada data, o mercado já tinha acionado a parcial no zero a zero, pulou a saída parcial de meio ponto e foi direto pro take profit, saindo da posição com a quantidade de contratos restante na posição. Isso fez com que a ordem de liquidação parcial de meio ponto ficasse em aberto. Na sequência, o mercado pegou a ordem que tinha ficado em aberto, abrindo uma posição contrária à tendência.

Ex.:

Posição: SELL             40 contratos a 3.750,00, TP a 3.749,00

             BUY LIMIT     25 contratos a 3.750,00 (zero a zero)

             BUY LIMIT     5 contratos a 3.749,50 (meio ponto)

1) execução parcial de 25 contratos a 3.750,00, restando 15 contratos para o TP em 3.749,00;

2) mercado pula negociação a 3.749,50 e passa a operar em 3.749,00, executando o TP de 15 contratos.

3) ordem BUY LIMIT de 5 contratos a 3.749,50 fica aberta.

4) EA não consegue cancelar a ordem, que é executada no mesmo instante que o TP foi acionado, abrindo posição comprada de 5 contratos a 3.749,50 em um mercado de baixa.

O código possui gerenciador que cancela as ordens intermediárias, caso não exista posição em aberto, mas não funcionou neste caso.

Imagino que isso possa ter acontecido em função de negociações diretas, levando o mercado diretamente a negociações em um determinado patamar de preço, sem ter passado pelo preço de acionamento da minha ordem de liquidação parcial (no exemplo, a de 5 contratos a 3.749,50).

Para resolver esse problema, estou alterando o código para fazer o controle do TP diretamente pelo EA (não deixar a plataforma fazer o net e contrtolar o TP com o volume adequado), conforme código abaixo (obs.: por favor não reparem o padrão de definição de variáveis e a identação "javesca" rsrsrsrs), mas desconfio que possa existir uma maneira melhor de resolver, pois imagino que isso deva acontecer com frequência com outros desenvolvedores.

Alguém tem uma dica de como resolver esse problema ou sugere alguma forma mais eficiente do meu EA lidar com a liquidação parcial?

Obs.: tentei cancelar a ordem quando o tick tiver pulado o preço da ordem pendente, mas também não deu certo.

Obrigado.

Você está saindo no Spread do mercado. Nem sempre o Spread é de 0,5.

E lembre-se que o WDO acompanha o DOL, é como um carro com reboque, quando o DOL vira, o WDO dá estilingadas que invalidam o spread comum...

;)

;)

 
Flavio Jarabeck:

Você está saindo no Spread do mercado. Nem sempre o Spread é de 0,5.

E lembre-se que o WDO acompanha o DOL, é como um carro com reboque, quando o DOL vira, o WDO dá estilingadas que invalidam o spread comum...

;)

;)

Vlw, Flavio!
 
Trader_Patinhas:

Oi Eduardo.

Acho que uma forma mais "limpa" e segura de fazer o que vc quer é capturar o evento de execução da sua saída parcial e do seu TP e fazer esse tratamento imediatamente ao receber a notificação do evento.

Caso não saiba como fazer isso, estude a função OnTradeTransaction() na documentação.

No exato momento em que chegar uma notificação de que o TP foi executado, vc manda cancelar imediatamente todas as ordens de saída parcial que não tiverem sido executadas.

Pode acontecer de alguma delas ser executada antes vc conseguir cancelar. Nesse caso, vc receberá uma nova notificação em OnTradeTransaction() e aí é só mandar zerar a posição que foi aberta indevidamente.

Uma coisa me chamou a atenção na sua estratégia: por que vc faz uma saída parcial no "zero a zero"? 

Não seria melhor, em vez de abrir posição com 40 contratos e sair parcialmente com 25 contratos no "zero-a-zero", vc entrar com apenas 15 contratos e não fazer essa saída parcial?

Do jeito que vc está fazendo, a menos que eu tenha entendido algo errado, me parece que vc está arriscando à toa o capital correspondente ao risco desses 25 contratos, além de estar pagando emolumentos por eles à toa também, uma vez que é certo que não vai lucrar nada com eles (somente os outros 15 poderão render algum lucro).

Vlw, Trader_Patinhas.

Entendi o seu ponto. Obrigado pelas dicas!

Sobre o OnTradeTransaction(), eu já estudei sobre ele sim e, via de regra, funcionaria como a minha função que fecha ordens em aberto e neste caso não daria certo.

Mas independente de a saída no Zero a Zero ou no meio ponto não fazer sentido, o ponto principal que quero saber é como vcs tratam: 1) saídas parciais; 2) quando o mercado pula determinado nível de preço e passa a operar um tick ou dois a frente (acima no caso de compra e abaixo no caso de venda).

Obrigado pelas considerações.

Abç.

 
eduardobasilio:

Vlw, Trader_Patinhas.

Entendi o seu ponto. Obrigado pelas dicas!

Sobre o OnTradeTransaction(), eu já estudei sobre ele sim e, via de regra, funcionaria como a minha função que fecha ordens em aberto e neste caso não daria certo.

Mas independente de a saída no Zero a Zero ou no meio ponto não fazer sentido, o ponto principal que quero saber é como vcs tratam: 1) saídas parciais; 2) quando o mercado pula determinado nível de preço e passa a operar um tick ou dois a frente (acima no caso de compra e abaixo no caso de venda).

Obrigado pelas considerações.

Abç.

As saídas parciais COM LUCRO eu trato da seguinte forma:

1) Todas as saídas com lucro (tanto parciais quanto a última total) eu implemento com ordens BUY LIMIT / SELL LIMIT. Não uso TP (motivo: tentar sair vendendo pelo ASK ou comprando pelo BID, para evitar a perda do spread ASK-BID na hora de sair).

2) Para remediar o problema do pulo da ordem, em todos os eventos OnTick eu verifico se alguma das minhas ordens LIMIT foi pulada (se ficou aquém do preço de mercado do momento) e, em caso positivo, modifico imediatamente o preço da ordem para o preço de mercado (ASK para posição comprada ou BID para posição vendida). Assim, caso seja pulada, a ordem LIMIT de saída "persegue" o preço de mercado até finalmente conseguir ser executada (e é ótimo que essa perseguição demore, pois quanto mais demorar melhor vai ser a saída).

O meu verdadeiro pavor é se isso acontecer no Stop-Loss. Até pouco tempo atrás eu acreditava que a ordem SL executava EM QUALQUER VALOR ALÉM do preço configurado e não tomava nenhuma precaução contra isso. Recentemente colegas daqui do fórum relataram que, se o preço pular o valor exato do SL, a ordem SL fica pendente expondo a posição aberta a prejuízos ilimitados.

Até o momento nunca vi isso acontecer comigo e a documentação não me parece clara quanto a isso, mas confio no testemunho dos colegas (em especial do @Rogerio Giannetti Torres, que relatou que é frequente isso acontecer em commodities agrícolas).

Fiz uma nova versão que verifica, em todos os eventos Ontick, se o "SL" foi pulado e, em caso positivo, cancela o SL e em seguida zera a posição com ordem a mercado. Eu primeiro zero o SL e espero chegar a notificação da modificação no OnTradeTransaction para ter certeza de que o SL já está inativo, para só então zerar a posição. O motivo disso é evitar a possibilidade de o SL ser executado antes de a ordem a mercado ser executada, o que me deixaria com uma posição indesejada aberta no sentido oposto.

 
Trader_Patinhas:

As saídas parciais COM LUCRO eu trato da seguinte forma:

1) Todas as saídas com lucro (tanto parciais quanto a última total) eu implemento com ordens BUY LIMIT / SELL LIMIT. Não uso TP (motivo: tentar sair vendendo pelo ASK ou comprando pelo BID, para evitar a perda do spread ASK-BID na hora de sair).

2) Para remediar o problema do pulo da ordem, em todos os eventos OnTick eu verifico se alguma das minhas ordens LIMIT foi pulada (se ficou aquém do preço de mercado do momento) e, em caso positivo, modifico imediatamente o preço da ordem para o preço de mercado (ASK para posição comprada ou BID para posição vendida). Assim, caso seja pulada, a ordem LIMIT de saída "persegue" o preço de mercado até finalmente conseguir ser executada (e é ótimo que essa perseguição demore, pois quanto mais demorar melhor vai ser a saída).

O meu verdadeiro pavor é se isso acontecer no Stop-Loss. Até pouco tempo atrás eu acreditava que a ordem SL executava EM QUALQUER VALOR ALÉM do preço configurado e não tomava nenhuma precaução contra isso. Recentemente colegas daqui do fórum relataram que, se o preço pular o valor exato do SL, a ordem SL fica pendente expondo a posição aberta a prejuízos ilimitados.

Até o momento nunca vi isso acontecer comigo e a documentação não me parece clara quanto a isso, mas confio no testemunho dos colegas (em especial do @Rogerio Giannetti Torres, que relatou que é frequente isso acontecer em commodities agrícolas).

Fiz uma nova versão que verifica, em todos os eventos Ontick, se o "SL" foi pulado e, em caso positivo, cancela o SL e em seguida zera a posição com ordem a mercado. Eu primeiro zero o SL e espero chegar a notificação da modificação no OnTradeTransaction para ter certeza de que o SL já está inativo, para só então zerar a posição. O motivo disso é evitar a possibilidade de o SL ser executado antes de a ordem a mercado ser executada, o que me deixaria com uma posição indesejada aberta no sentido oposto.

Sensacional, Trader_Patinhas! Vlw.

Eu estou fazendo da mesma forma. Também estou usando ordens Limit para controlar saídas parciais e TP agora, além de fazer a verificação de preços ask/bid para acionar saída a mercado em caso de o mercado ter pulado minha ordem.

Sobre o SL, estou usando trade.SetDeviationInPoints(desvio) no OnInit(), onde "desvio" é o tamanho da "derrapagem" (slippage) das ordens stop. Se vc colocar um valor grande, ele executa a mercado, mas se passar do seu desvio vai continuar tendo de lidar com o problema do controle do SL. Eu estou usando 50 pontos como desvio para testar a eficiência no WDO, até o momento está OK.

Obrigadão pela força!

 
Pessoal, dentro dessa dúvida de realização parcial, tenho um EA que faz scalper de mini índice. Na conta demo ele opera perfeito: ele entra na posição, faz a parcial, faz a saída total e as reversões quando necessário. Porém, na conta real ele entra na posição e não faz as devidas saídas. Existe algum parâmetro diferente para a conta real? Em tempo, todas as ordens são feitas a mercado, não uso limit em nenhuma das situações. 
 
Charllie Camargos:
Pessoal, dentro dessa dúvida de realização parcial, tenho um EA que faz scalper de mini índice. Na conta demo ele opera perfeito: ele entra na posição, faz a parcial, faz a saída total e as reversões quando necessário. Porém, na conta real ele entra na posição e não faz as devidas saídas. Existe algum parâmetro diferente para a conta real? Em tempo, todas as ordens são feitas a mercado, não uso limit em nenhuma das situações. 

Bom dia Charles,

sim existe uma diferença entre DEMO para REAL que faz toda diferença, em DEMO a liquidez do ativo é infinita. Outra diferença também crucial, em conta REAL os ordens são executadas pelos preços ofertados ( Ask/Bid ), em demo as ordens são executadas pelo último preço ( Last ).

 
Trader_Patinhas:

As saídas parciais COM LUCRO eu trato da seguinte forma:

1) Todas as saídas com lucro (tanto parciais quanto a última total) eu implemento com ordens BUY LIMIT / SELL LIMIT. Não uso TP (motivo: tentar sair vendendo pelo ASK ou comprando pelo BID, para evitar a perda do spread ASK-BID na hora de sair).

2) Para remediar o problema do pulo da ordem, em todos os eventos OnTick eu verifico se alguma das minhas ordens LIMIT foi pulada (se ficou aquém do preço de mercado do momento) e, em caso positivo, modifico imediatamente o preço da ordem para o preço de mercado (ASK para posição comprada ou BID para posição vendida). Assim, caso seja pulada, a ordem LIMIT de saída "persegue" o preço de mercado até finalmente conseguir ser executada (e é ótimo que essa perseguição demore, pois quanto mais demorar melhor vai ser a saída).

O meu verdadeiro pavor é se isso acontecer no Stop-Loss. Até pouco tempo atrás eu acreditava que a ordem SL executava EM QUALQUER VALOR ALÉM do preço configurado e não tomava nenhuma precaução contra isso. Recentemente colegas daqui do fórum relataram que, se o preço pular o valor exato do SL, a ordem SL fica pendente expondo a posição aberta a prejuízos ilimitados.

Até o momento nunca vi isso acontecer comigo e a documentação não me parece clara quanto a isso, mas confio no testemunho dos colegas (em especial do @Rogerio Giannetti Torres, que relatou que é frequente isso acontecer em commodities agrícolas).

Fiz uma nova versão que verifica, em todos os eventos Ontick, se o "SL" foi pulado e, em caso positivo, cancela o SL e em seguida zera a posição com ordem a mercado. Eu primeiro zero o SL e espero chegar a notificação da modificação no OnTradeTransaction para ter certeza de que o SL já está inativo, para só então zerar a posição. O motivo disso é evitar a possibilidade de o SL ser executado antes de a ordem a mercado ser executada, o que me deixaria com uma posição indesejada aberta no sentido oposto.

Caro @Trader_Patinhas

É possível disponibilizar o código que trata esses "pulos"???. Estou começando no MQL5 e meu robo tem esses problemas, além de as vezes dobrar a quantidade de lotes que eu determinei ... Estou tentando corrigir esses problemas e seu exemplo me ajudará muito. Antecipadamente, Muito Obrigado!

 
Wanderlei De Sá Azevedo:

Caro @Trader_Patinhas

É possível disponibilizar o código que trata esses "pulos"???. Estou começando no MQL5 e meu robo tem esses problemas, além de as vezes dobrar a quantidade de lotes que eu determinei ... Estou tentando corrigir esses problemas e seu exemplo me ajudará muito. Antecipadamente, Muito Obrigado!

Prezado,

Aquele item (2) era uma paranoia delirante minha, pois uma ordem limit jamais será "pulada", pois ela fica registrada no livro de ofertas do pregão e existe uma fila de prioridade de execução, por preço e por ordem de chegada.

Aquele esquema de "perseguir" o preço de mercado que eu descrevi na postagem eu joguei no lixo poucos dias depois, logo que me dei conta de que era inútil (eu o estava construindo na ocasião, nunca cheguei a implantá-lo em produção)

Quanto à possibilidade de um stop ser pulado, eu continuo fazendo como descrevi: no meu loop periódico no evento OnTimer, eu verifico se por acaso o preço "last" ficou além do meu stop-loss e, se isso tiver acontecido, chamo uma função de "pânico" que cancela todas as ordens pendentes e zera a posição. Mas até hoje isso nunca aconteceu no dólar, pois dificilmente o dólar vai ter algum preço sem oferta no book e, mais dificilmente ainda, ocorreria o supremo azar de esse preço vazio coincidiria justamente com o meu stop-loss no exato momento de o stop-loss ser acionado. Acredito que isso só aconteça com ativos muito ilíquidos, como as commodities que o @Rogerio Giannetti Torres relatou, nas quais é muito comum haver vários níveis de preço vazios no book.

Razão: