Ordens Stop Loss e Take Profit

 

Sou novo na comunidade e estou programando meu primeiro robô, que envia uma ordem de compra ou vendar com take profit de 100 pontos  e stop loss 200 pontos no mini índice.

Porem as saída nunca ficam no valor exato, o take profit sempre fica menor e o stop loss maior, alguém poderia me ajudada com o código abaixo?


#include <Trade/Trade.mqh>

CTrade trade;

 int Almejado = 100; 

int Entrada = 5; 

double ask, bid, last;

void OnTick()

  {

         ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);

         bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);

         last = SymbolInfoDouble(_Symbol, SYMBOL_LAST);


         if(Compra())

         {     

            trade.Buy(Entrada,_Symbol,0, ask - (Almejado * 2), ask + Almejado, "Compra a mercado");

         }         

         if(Venda())

         {  

            trade.Sell(Entrada,_Symbol,0, bid + (Almejado * 2), bid - Almejado, "Venda a mercado");

         }

  }

Documentação sobre MQL5: Constantes, Enumeradores e Estruturas / Constantes de Negociação / Propriedades de uma Ordem
Documentação sobre MQL5: Constantes, Enumeradores e Estruturas / Constantes de Negociação / Propriedades de uma Ordem
  • www.mql5.com
Propriedades de uma Ordem - Constantes de Negociação - Constantes, Enumeradores e Estruturas - Referência MQL5 - Referência sobre algorítimo/automatização de negociação na linguagem para MetaTrader 5
 
Fernando Ferreira:

Sou novo na comunidade e estou programando meu primeiro robô, que envia uma ordem de compra ou vendar com take profit de 100 pontos  e stop loss 200 pontos no mini índice.

Porem as saída nunca ficam no valor exato, o take profit sempre fica menor e o stop loss maior, alguém poderia me ajudada com o código abaixo?

Isso se chama Spread. Execuções à mercado funcionam dessa maneira.

Ex.: Quando você compra à mercado você está agredindo a contraparte do Book de Ofertas de Venda.

Estude mais sobre o Livro de Ofertas (Book).

E também estude sobre RLP.

E estude tb sobre os Tipos de Ordens.

E, por último, sendo cruelmente honesto, não conhecer e nunca ter operado o mercado de Futuros e já partir pra desenvolver robôs eu acho um erro gigantesco...
 
Fernando Ferreira:

Sou novo na comunidade e estou programando meu primeiro robô, que envia uma ordem de compra ou vendar com take profit de 100 pontos  e stop loss 200 pontos no mini índice.

Porem as saída nunca ficam no valor exato, o take profit sempre fica menor e o stop loss maior, alguém poderia me ajudada com o código abaixo?


#include <Trade/Trade.mqh>

CTrade trade;

 int Almejado = 100; 

int Entrada = 5; 

double ask, bid, last;

void OnTick()

  {

         ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);

         bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);

         last = SymbolInfoDouble(_Symbol, SYMBOL_LAST);


         if(Compra())

         {     

            trade.Buy(Entrada,_Symbol,0, ask - (Almejado * 2), ask + Almejado, "Compra a mercado");

         }         

         if(Venda())

         {  

            trade.Sell(Entrada,_Symbol,0, bid + (Almejado * 2), bid - Almejado, "Venda a mercado");

         }

  }

Fernando, bom dia.

Bom no inicio do tópico você falar que quer um Tk profit de 100 e um SP loss de 200, achei estranho, mas a estratégia é de cada um, depois você fala que o tk profit sempre fica menor que o sp loss, o que estaria coerente com seu afirmativa inicial, depois vendo o código notei que você tentou fazer um stop=100 take=200, se for isso que você quer, tente esse.

 trade.Buy(Entrada,_Symbol,0, ask + (Almejado * 2), ask - Almejado, "Compra a mercado");


lembre que quando você mandou pegar o preço "Ask" é o preço de venda mais "barato" você não quer sair no mais barato, você quer sair com lucro, logo ask+tk

o conceito é o mesmo para o Sell.

 

Acho que vocês entenderam errado, ele em nenhum momento falou que é novo no mini indice, ele é novo criando robôs!


Eu tenho essa mesma dúvida. Eu percebi que o take profit e o stop loss são a mercado, ou seja, quando o preço bater no alvo, é disparada a operação a mercado, e não no valor exato, ai ficamos refém do spread. No do mini indice geralmente é só 5pts de spread, mas em ações as vezes o spread pode ser grande. Como resolver isso? Tem como fazer o take profit e o stop loss ser no preço exato?

 
Ricardo Eduardo #:

Acho que vocês entenderam errado, ele em nenhum momento falou que é novo no mini indice, ele é novo criando robôs!


Eu tenho essa mesma dúvida. Eu percebi que o take profit e o stop loss são a mercado, ou seja, quando o preço bater no alvo, é disparada a operação a mercado, e não no valor exato, ai ficamos refém do spread. No do mini indice geralmente é só 5pts de spread, mas em ações as vezes o spread pode ser grande. Como resolver isso? Tem como fazer o take profit e o stop loss ser no preço exato?

Oi Ricardo,

O take profit e stop loss de uma posição não tem como por causa que isso é configuração do servidor do MT5 e isso as corretoras brasileiras "decidiram" deixar como ordens a mercado (stop), por exemplo se elas tivessem configurado nos futuros isso com ordem equivalente a limit para stopar aconteceria que tu abre posição é chamada margem digamos de 1 contrato, tu puxa o stop então a margem necessaria muda pra 2 contrato, se tu puxar o take profit então a margem muda novamente pra 3 contrato. Se for uma posição de 5 contrato, então no final com os 2 stops seriam algo como 15 contratos chamados na margem. A pessoa que me explicou isso parecia bem envolvida com o MT5 na epoca.

O que a gente pode fazer pra ter o stop e take profit no preço mais perto do exato é retirar o SL / TP da posição e abrir uma ordem STOP LIMIT, e dai quando bate no stop a gente envia a limitada com um determinado offset de preço aceitavel pra evitar um provavel "pulo" ou se quiser mandar no valor exato tambem. Entretanto, pelo que é falado em outro topico a ordem do tipo STOP LIMIT tem variação entre corretoras. (desculpe não lembrar o topico pra colar o link, mas se garimpar acha)

 
Ricardo Rodrigues Lucca #:

Oi Ricardo,

O take profit e stop loss de uma posição não tem como por causa que isso é configuração do servidor do MT5 e isso as corretoras brasileiras "decidiram" deixar como ordens a mercado (stop), por exemplo se elas tivessem configurado nos futuros isso com ordem equivalente a limit para stopar aconteceria que tu abre posição é chamada margem digamos de 1 contrato, tu puxa o stop então a margem necessaria muda pra 2 contrato, se tu puxar o take profit então a margem muda novamente pra 3 contrato. Se for uma posição de 5 contrato, então no final com os 2 stops seriam algo como 15 contratos chamados na margem. A pessoa que me explicou isso parecia bem envolvida com o MT5 na epoca.

O que a gente pode fazer pra ter o stop e take profit no preço mais perto do exato é retirar o SL / TP da posição e abrir uma ordem STOP LIMIT, e dai quando bate no stop a gente envia a limitada com um determinado offset de preço aceitavel pra evitar um provavel "pulo" ou se quiser mandar no valor exato tambem. Entretanto, pelo que é falado em outro topico a ordem do tipo STOP LIMIT tem variação entre corretoras. (desculpe não lembrar o topico pra colar o link, mas se garimpar acha)

No meu caso, eu resolvi essa questão incluindo ordem de SellLimit nos valores desejados, ai fico controlando no robô se já encerrou a posição, se sim, cancela a outra ordem. Desse jeito a ordem fica no book e evita qualquer problema em caso de queda de energia ou internet, e até mesmo garante a venda no valor desejado

 
Ricardo Eduardo #:

No meu caso, eu resolvi essa questão incluindo ordem de SellLimit nos valores desejados, ai fico controlando no robô se já encerrou a posição, se sim, cancela a outra ordem. Desse jeito a ordem fica no book e evita qualquer problema em caso de queda de energia ou internet, e até mesmo garante a venda no valor desejado

Legal, mas isso não resolve só parte da sua dúvida? Me parece que só garantiria a substituição de uma das ordens stops.
Razão: