Ajuda e/ou Ideias para código de TakeProfit diferente

 

Pessoal, sou economista e não programador mas desenvolvi um código através de tentativa e erro, códigos abertos e ajuda de amigos programadores, um robô nos últimos anos para operar Mini Contrato de Dólar.

O Robô opera diariamente na conta real da XP dentro da AWS a 2 anos, porém, a forma como desenvolvi meu código (que só executa um novo comando a cada novo candle) cria uma desvantagem de quase sempre 0.5 (1 pip) na cotação devido ao livro. Exemplo: Se estou com uma posição em aberto e Comprado, meu TakeProfit está em um ponto que terá como referência o valor do último negócio, desta forma a defasagem do ganho acontece pois um comprador mandou a ordem a mercado e comprou de um vendedor que estava no ponto onde meu TakeProfit dispararia a ordem para zerar posição. Acontece que se estou comprado ele manda uma venda, sendo o comprador mais próximo no livro de ofertas ainda estar a 0.5 (1 pip) abaixo no livro e quase sempre me dando uma defasagem de 0.5 ou (1 pip) em relação ao TakeProfit proposto.

O Valor de TakeProfit está bem otimizado para minha estratégia, porém esta perda em comparação (Vida Real vs Idealizada) está se tornando bastante relevante.

O StopLoss configurado do jeito que está já está perfeito e não requer mudanças. Eu queria saber se há alguma forma de configurar um gatilho no valor de objetivo (TakeProfit) para se executado instantaneamente como é feito o TP mas que ele agisse como um gatilho para disparar um TakeProfit talvez 0.5 (1 pip) acima e um StopLoss 0.5 (1 pip) abaixo de onde está o valor naquele exato momento em tempo real do candle.

Linha de comando para enviar ordem de compra para bolsa (Mesmas usadas em vários robôs abertos disponíveis).

      if(Exemplo Condições de Compra)
        {
         mrequest.action = TRADE_ACTION_DEAL;                                   
         mrequest.price = latestPrice.bid;                                      
         mrequest.sl = NormalizeDouble(latestPrice.ask-setupFactory.GetStopLoss(),_Digits);
         mrequest.tp = NormalizeDouble(latestPrice.ask+setupFactory.GetTakeProfit(),_Digits);
         mrequest.symbol = _Symbol;                                             
         mrequest.volume = Lots;                                                
         mrequest.magic = EA_Magic;                                             
         mrequest.type = ORDER_TYPE_BUY;                                        
         mrequest.type_filling = ORDER_FILLING_RETURN;                          
         mrequest.deviation = 100;                                              
         bool sent = OrderSend(mrequest,mresult);                               
         if(sent || mresult.retcode==10009 || mresult.retcode==10008)           
           {
            Alert("Operando Comprado com sucesso, Número da Ordem é: ",mresult.order);
           }
         else
           {
            Alert("A ordem de Compra não pode ser executada, o código de erro é: ",GetLastError());
            return;
           }

Eu tenho um StopLoss móvel alimentado pelo indicador ParabolicSAR que funciona bem em grande parte das vezes.

Li bastante nos últimos dias e tentei achar alguma função do próprio Metatrader 5 como talvez aquele Price Trigger para substituir a linha de TakeProfit somente, mas a princípio descobri que o Price Trigger não funciona desta forma, ou se é possível não sei como faz.

Não quero mudar a Derrapagem, pois desta forma operando muitos contratos corre o risco de não conseguir zerar posição. Também não gostaria de modificar a forma como o robô todo trabalha na execução do código (só executa as linhas a cada novo candle).

Eu queria algo bem simples do tipo.

Tocou no meu StopLoss que já funciona bem zera posição como ele já faz. (Não quero alteração aqui)

Mas se for em direção do Gain e o preço atingiu o valor que estava estipulado o TakeProfit, daí no mesmo momento o Metatrader Colocasse o TP (1 pip) acima e o SL (1 pip) abaixo, isto para garantir que neste momento eu quero encerrar posição a todo custo, mesmo aceitando se acabar dando 0.5 abaixo, porém, ao que me parece em muitos momentos quando estou em direção do Gain ele ainda continua por alguns instantes subindo (no caso de operando comprado) e poderia aumentar os ganhos com uma favorável probabilidade de ocorrer maior compensando as vezes que teria o encerramento da ordem 0.5 abaixo do antigo modo de TP.

Alguém tem alguma ideia/ajuda?

 

Olá Diogo,

mesmo sabendo que não é garantido a execução da ordem limite quando o preço é atingido, eu as uso para a saída por TP,  as poucas vezes que a ordem ficou no book foi mais que compensado com o ganho do spread do dólar.

A ideia central em usar ordens limite para TP é garantir que a estratégia será obedecida, ou seja se a ordem limite (TP) não foi executada então para mim o preço "não atingiu"  o TP.

 
Rogerio Giannetti Torres:

Olá Diogo,

mesmo sabendo que não é garantido a execução da ordem limite quando o preço é atingido, eu as uso para a saída por TP,  as poucas vezes que a ordem ficou no book foi mais que compensado com o ganho do spread do dólar.

A ideia central em usar ordens limite para TP é garantir que a estratégia será obedecida, ou seja se a ordem limite (TP) não foi executada então para mim o preço "não atingiu"  o TP.

Pois é, eu já pensei várias vezes nisso mas estava tentando achar outro modo de solucionar. Agora pensando melhor, talvez uma possibilidade seria deixar sem derrapagem e colocar uma linha para ler se há alguma ordem pendente no livro no próximo candle, caso afirmativo, zerar a valor de mercado. 

De qualquer modo Obrigado.

Se mais alguém tiver alguma outra ideia ficarei feliz se puder compartilhar.

 

@diogoacordi

Tal como o @Rogerio Giannetti Torres, eu também uso ordens-limite em lugar do TakeProfit. Abro a ordem a mercado apenas com o Stop-Loss e logo em seguida abro uma ordem-limite no preço-alvo para fazer o papel do Take-Profit, justamente para zerar a posição sempre vendendo no ASK ou comprando no BID, evitando assim a perda do spread ocasionada pelo Take-Profit, que zera as posições a mercado (vendendo no BID ou comprando no ASK).

Pra quem faz scalpings curtos muitas vezes por dia, às vezes ganhando e às vezes perdendo, esse 1 tick a mais em cada trade vencedor faz uma diferença grande no fim do mês.

 
Trader_Patinhas:

@diogoacordi

Tal como o @Rogerio Giannetti Torres, eu também uso ordens-limite em lugar do TakeProfit. Abro a ordem a mercado apenas com o Stop-Loss e logo em seguida abro uma ordem-limite no preço-alvo para fazer o papel do Take-Profit, justamente para zerar a posição sempre vendendo no ASK ou comprando no BID, evitando assim a perda do spread ocasionada pelo Take-Profit, que zera as posições a mercado (vendendo no BID ou comprando no ASK).

Pra quem faz scalpings curtos muitas vezes por dia, às vezes ganhando e às vezes perdendo, esse 1 tick a mais em cada trade vencedor faz uma diferença grande no fim do mês.

Exatamente isso. 

 
Boa noite pessoal 
Estou fazendo um EA de cruzamento de médias, só que ele só funciona com TK e SL , eu gostaria se caso ele tivesse um novo cruzamento de médias antes de atingir o TK ou SL mudaria de comprando para vendido ou de vendido para comprado
Alguém pode me ajudar?
Razão: