Fechar operação no TP

 

Estou testando um EA em conta real no WDO. Ele tem TP de 1 ponto (OCO), mas percebo que raramente ele fecha a operação no TP, e sim antes (com 0.5 pt). É possível forçar o fechamento somente se for no preço do TP?



Obrigado

 
mcronline:


O TP/SL são ordens start emitidas a mercado, ou seja a maioria das vezes vai executar no spread. Para contornar isso ou você coloca o spread na ordem ou usa ordens LIMIT.

 
Rogerio Giannetti Torres:

O TP/SL são ordens start emitidas a mercado, ou seja a maioria das vezes vai executar no spread. Para contornar isso ou você coloca o spread na ordem ou usa ordens LIMIT.

Obrigado Rogério. Eu pensava que o tp sl eram ordens limit. Sabe se tem como configurar de forma que sejam? ou tenho que enviar novas ordens limit separadas? Estou usando o MqlTradeRequest para abrir a operação.

 
mcronline:

Obrigado Rogério. Eu pensava que o tp sl eram ordens limit. Sabe se tem como configurar de forma que sejam? ou tenho que enviar novas ordens limit separadas? Estou usando o MqlTradeRequest para abrir a operação.

Não, não tem nada automático (configurável), você vai ter que programar tudo.

Ao abrir a posição deve emitir as duas ordens LIMIT e quando a posição fechar, isto é executar uma das ordens,  a ordem que ficou pendente deve ser cancelada.

Bom trabalho!

 
mcronline:

Obrigado Rogério. Eu pensava que o tp sl eram ordens limit. Sabe se tem como configurar de forma que sejam? ou tenho que enviar novas ordens limit separadas? Estou usando o MqlTradeRequest para abrir a operação.

Não podem ser Ordens Limit pelo próprio pressuposto de uma Ordem Limit - mesmo que seja FOK, IOC ou AON, você se encontrará (caso não haja liquidez necessária) em uma arapuca, caso queira sair completamente da operação.

;)

 
Rogerio Giannetti Torres:

Não, não tem nada automático (configurável), você vai ter que programar tudo.

Ao abrir a posição deve emitir as duas ordens LIMIT e quando a posição fechar, isto é executar uma das ordens,  a ordem que ficou pendente deve ser cancelada.

Bom trabalho!

Oi Giannetti, tudo bem?

Acho que vc quis dizer uma ordem LIMIT e uma ordem STOP (e não duas ordens LIMIT), certo?

Certamente o TP pode ser substituído por uma ordem LIMIT, com a vantagem de economizar o spread, por sair do trade vendendo pelo ASK ou recomprando pelo BID, enquanto que o TP sairia vendendo pelo BID ou recomprando pelo ASK.

Mas para substituir o SL teria que ser uma ordem STOP, pois, se fosse enviada uma ordem LIMIT com preço melhor que o de mercado (compra acima do ASK ou venda abaixo do BID), essa ordem seria executada imediatamente a preço de mercado.

Meu raciocínio está correto ou não entendi alguma coisa?

 

Bom dia  mrconline

o Trader_patinhas tem toda razão na observação que ele fez,  o TP seria substituído uma ordem SELL/BUY  LIMIT  e o SL seria substituída por uma ordem SELL/BUY STOP LIMIT .

Abs()

 

Vou compartilhar o que penso aqui sobre o assunto dessa thread e peço aos colegas que critiquem se eu estiver pensando algo errado, ou sugiram ideias alternativas ...

O meu contexto aqui é a B3 (para Forex, talvez haja diferenças) e a questão abordada talvez não seja relevante pra quem faz swing trade, ou segue tendência de longo prazo, mas certamente é crucial para quem faz scalpings curtos várias vezes por dia.

Temos as seguintes opções para sair de um trade vencedor realizando lucro:

(A) configurar o "Take Profit" automático oferecido pelo servidor MT5

(B) pendurar uma ordem do tipo ORDER_TYPE_SELL_LIMIT (para sair de uma posição comprada) ou  ORDER_TYPE_BUY_LIMIT (para sair de uma posição vendida)

Vantagem da opção (B) em relação à opção (A):

(1) Você evita que o spread ASK-BID seja subtraído do seu ganho, pois sai vendendo pelo ASK (ou recomprando pelo BID), enquanto que no TP automático vc sairia vendendo pelo BID (ou recomprando pelo ASK).

Problemas da opção (b):

(1) Se a sua posição sair pelo "Stop Loss", é necessário cancelar a ordem que estava servindo como "Take Profit", pois do contrário ela poderá ser executada posteriormente, abrindo uma posição indesejada com perdas potencialmente ilimitadas.

(2) Se a conexão entre o terminal e o servidor MT5 cair e a sua posição sair pelo "Stop Loss", não será possível cancelar a ordem "Take Profit" e ela poderá ser executada posteriormente, abrindo uma posição indesejada com perdas potencialmente ilimitadas.

Como eu faço nos meus robôs:

- uso a opção (B) para economizar o spread

- para evitar o problema (1), no evento OnTradeTransaction, ao receber notificação indicando que o "Stop Loss" de uma posição foi acionado, eu mando cancelar a ordem "Take Profit" correspondente.

- para evitar o problema (2), eu deixo o robô rodando num servidor da Amazon, que costuma ter uma conexão muito estável, e aceito o risco, com base na crença (que até o momento vem sendo confirmada) de que o caixa gerado pela economia de 0,5 ponto de dólar a cada giro será mais do que suficiente para cobrir eventuais prejuízos ocasionados nas raríssimas situações em que o servidor da Amazon perder a conexão justamente no momento em que o robô esteja posicionado em um scalping perdedor.

O que acham? Concordam?

Sugerem alguma outra forma de realizar lucro em um trade vencedor além de (A) ou (B) ?

Alguma ideia melhor para evitar o problema (2) ?

Há algum outro problema ou risco, além desses que eu relatei, que eu não esteja percebendo?

obs: pode parecer bobagem ficar se preocupando em economizar spread, mas 0,5 ponto no DOL vale R$ 125 reais e, pra quem faz uma média de 20 tentativas de scalping por dia com 1 contratinho, estamos falando de R$ 2500 por dia, ou R$ 50 mil por mês! Ou seja, pra quem faz 20 trades por dia com 1 contratinho de DOL (nada excepcional, considerando que tem corretora que exige menos de R$ 200 de margem pra isso), a negligência com o spread pode transformar uma estratégia que GANHA R$ 25 mil por mês em uma estratégia que PERDE R$ 25 mil por mês.
 
Rogerio Giannetti Torres:

Bom dia  mrconline

o Trader_patinhas tem toda razão na observação que ele fez,  o TP seria substituído uma ordem SELL/BUY  LIMIT  e o SL seria substituída por uma ordem SELL/BUY STOP LIMIT .

Abs()

Ao contrário do caso do TP, para limitar as perdas eu costumo usar o SL automático mesmo.
Acho perigoso usar como "stop-loss" ordens dos tipos ORDER_TYPE_SELL_STOP_LIMIT (para sair de posição comprada) ou ORDER_TYPE_BUY_STOP_LIMIT (para sair de posição vendida), pois, essas ordens STOP_LIMIT penduram a ordem de saída no book, em vez de executar a mercado.
O problema disso é que, se uma ordem a mercado de grande volume (ou um fluxo muito rápido e intenso) vier na direção contrária à sua posição, a liquidez no nível de preço configurado na ordem STOP_LIMIT pode ser consumida de uma só vez e a sua ordem ficar pendurada ali, sem ser executada, enquanto o mercado continua avançando na direção contrária à sua posição, "furando" o seu stop-loss e podendo causar perdas ilimitadas.
Para garantir que o "stop-loss" não seja "furado", acredito ser necessário usar as versões de ordem STOP que executam a mercado (ORDER_TYPE_SELL_STOP e ORDER_TYPE_BUY_STOP), mas nesse caso acredito que o efeito seja idêntico ao SL automático, com a desvantagem de vc ter que cancelar explicitamente a ordem STOP caso a posição seja fechada no "Take Profit".
Por essas razões, no caso de limitar as perdas, eu opto pelo SL automático mesmo.

 
Trader_Patinhas:

Vou compartilhar o que penso aqui sobre o assunto dessa thread e peço aos colegas que critiquem se eu estiver pensando algo errado, ou sugiram ideias alternativas ...

O meu contexto aqui é a B3 (para Forex, talvez haja diferenças) e a questão abordada talvez não seja relevante pra quem faz swing trade, ou segue tendência de longo prazo, mas certamente é crucial para quem faz scalpings curtos várias vezes por dia.

Temos as seguintes opções para sair de um trade vencedor realizando lucro:

(A) configurar o "Take Profit" automático oferecido pelo servidor MT5

(B) pendurar uma ordem do tipo ORDER_TYPE_SELL_LIMIT (para sair de uma posição comprada) ou  ORDER_TYPE_BUY_LIMIT (para sair de uma posição vendida)

Vantagem da opção (B) em relação à opção (A):

(1) Você evita que o spread ASK-BID seja subtraído do seu ganho, pois sai vendendo pelo ASK (ou recomprando pelo BID), enquanto que no TP automático vc sairia vendendo pelo BID (ou recomprando pelo ASK).

Problemas da opção (b):

(1) Se a sua posição sair pelo "Stop Loss", é necessário cancelar a ordem que estava servindo como "Take Profit", pois do contrário ela poderá ser executada posteriormente, abrindo uma posição indesejada com perdas potencialmente ilimitadas.

(2) Se a conexão entre o terminal e o servidor MT5 cair e a sua posição sair pelo "Stop Loss", não será possível cancelar a ordem "Take Profit" e ela poderá ser executada posteriormente, abrindo uma posição indesejada com perdas potencialmente ilimitadas.

Como eu faço nos meus robôs:

- uso a opção (B) para economizar o spread

- para evitar o problema (1), no evento OnTradeTransaction, ao receber notificação indicando que o "Stop Loss" de uma posição foi acionado, eu mando cancelar a ordem "Take Profit" correspondente.

- para evitar o problema (2), eu deixo o robô rodando num servidor da Amazon, que costuma ter uma conexão muito estável, e aceito o risco, com base na crença (que até o momento vem sendo confirmada) de que o caixa gerado pela economia de 0,5 ponto de dólar a cada giro será mais do que suficiente para cobrir eventuais prejuízos ocasionados nas raríssimas situações em que o servidor da Amazon perder a conexão justamente no momento em que o robô esteja posicionado em um scalping perdedor.

O que acham? Concordam?

Sugerem alguma outra forma de realizar lucro em um trade vencedor além de (A) ou (B) ?

Alguma ideia melhor para evitar o problema (2) ?

Há algum outro problema ou risco, além desses que eu relatei, que eu não esteja percebendo?

obs: pode parecer bobagem ficar se preocupando em economizar spread, mas 0,5 ponto no DOL vale R$ 125 reais e, pra quem faz uma média de 20 tentativas de scalping por dia com 1 contratinho, estamos falando de R$ 2500 por dia, ou R$ 50 mil por mês! Ou seja, pra quem faz 20 trades por dia com 1 contratinho de DOL (nada excepcional, considerando que tem corretora que exige menos de R$ 200 de margem pra isso), a negligência com o spread pode transformar uma estratégia que GANHA R$ 25 mil por mês em uma estratégia que PERDE R$ 25 mil por mês.

Eu também estava pensando num EA nessas características, usando ordens LIMIT ao invés dos TP ou SL automáticos. Isso daria certo se for negociar lote mínimo, no caso do mini-contratos seria 1, e nos contratos cheios seria 5. Mas me deparei com o problema de ter execução parcial de ordens no caso de negociar mais contratos. Tipo, executa parcialmente uma ordem de saída com lucro e depois o mercado vira e vai em direção ao stop-loss. A gestão de ordens ficaria mais complicada... Não sei se vc conseguiu alguma solução para isso...

 
Trader_Patinhas:

Vou compartilhar o que penso aqui sobre o assunto dessa thread e peço aos colegas que critiquem se eu estiver pensando algo errado, ou sugiram ideias alternativas ...

......

Alguma ideia melhor para evitar o problema (2) ?


Bom dia,

quem já sofreu uma chamada de margem, sabe o quanto dói! Eu tenho um robô monitor rodando em casa, cuja a única função é fechar todas posições e cancelar todas ordens pendentes as 17:35hr a partir de uma lista de ativos digitados como parâmetro. Os robôs que rodam no AWS fazem o mesmo procedimento as 17:30 hs.  Você confia no VPS até  que numa manhã do dia seguinte a corretora te liga cobrando margem!

Incrementar esse programa monitor para excluir as sobras de ordens LIMIT que ficaram na pedra aplicando alguma regra de risco é muito fácil.  

Hoje eu uso o AWS o fato que relatei foi em outro provedor.

PS: Pneu step só é um, portanto furar dois pneus ao mesmo tempo, o que não é impossível, vai te deixar na mão. Mas vai ser muito azarado assim na Cochinchina!

Razão: