Meu 1º EA, problemas horário, estratégia - página 2

 
Romeu Masselai:

Aparentemente funcionou :)  vou testar mais afundo e com tempo, muito obrigado pela sua ajuda, estava tão pilhado nisso, que não percebi esse detalhe, por isso é bom um olhar externo.

De nada. Boa sorte! 🤝

 
Vinicius de Oliveira

Boa tarde @Vinicius de Oliveira, após 1 semana na demo, coloquei o EA na conta real, e diferentemente do que acontecia na demo, onde as ordens de stop loss e stop gain eram executadas com no máximo 1 real pra + ou pra - do definido nos inputs stop loss e gain, na conta real houve gain de 3 reais, sendo que no input estava 25 pontos (5 reais), e como é uma estratégia de scalp, isso faz muita diferença no resultado, o que preciso mudar para melhorar esse aredondamento.


       ZeroMemory(mrequest);
         mrequest.action=TRADE_ACTION_DEAL;                                                                                  
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);                                                         
         mrequest.sl = NormalizeDouble(latest_price.bid + STL*_Point,_Digits);                                                
         mrequest.tp = NormalizeDouble(latest_price.bid - STG*_Point,_Digits);                                                
         mrequest.symbol = _Symbol;                                                                                        
         mrequest.volume = Lote;                                                                                        
         mrequest.magic = EA_Magic_Number;                                                                                    
         mrequest.type= ORDER_TYPE_SELL;                                                                                   
         mrequest.type_filling = ORDER_FILLING_FOK;                                                                           
         mrequest.deviation=5; 
 
Romeu Masselai:

Boa tarde @Vinicius de Oliveira, após 1 semana na demo, coloquei o EA na conta real, e diferentemente do que acontecia na demo, onde as ordens de stop loss e stop gain eram executadas com no máximo 1 real pra + ou pra - do definido nos inputs stop loss e gain, na conta real houve gain de 3 reais, sendo que no input estava 25 pontos (5 reais), e como é uma estratégia de scalp, isso faz muita diferença no resultado, o que preciso mudar para melhorar esse aredondamento.


Boa noite @Romeu Masselai!


Para o correto arredondamento dos preços, utilize a função NormalizePrice() em vez de NormalizeDouble() ...

//+--------------------------------------------------------------------------------------------------------------------+
//| This function normalizes and adjusts the price to the TICK SIZE                                                    |
//+--------------------------------------------------------------------------------------------------------------------+
double NormalizePrice(double Price)
  {
   //--- Get the minimal price change
   double TickSize = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE);

   //--- Return the price normalized
   if(TickSize == 0.0) {return(NormalizeDouble(Price, _Digits));}

   //--- Return the price normalized and adjusted to the TICK SIZE
   return(NormalizeDouble(MathRound(Price / TickSize ) * TickSize, _Digits));
  }


Então, ficaria ...

mrequest.price = NormalizePrice(latest_price.bid);
mrequest.sl    = NormalizePrice(latest_price.bid + STL*_Point);
mrequest.tp    = NormalizePrice(latest_price.bid - STG*_Point);
 
Romeu Masselai:

Boa tarde @Vinicius de Oliveira, após 1 semana na demo, coloquei o EA na conta real, e diferentemente do que acontecia na demo, onde as ordens de stop loss e stop gain eram executadas com no máximo 1 real pra + ou pra - do definido nos inputs stop loss e gain, na conta real houve gain de 3 reais, sendo que no input estava 25 pontos (5 reais), e como é uma estratégia de scalp, isso faz muita diferença no resultado, o que preciso mudar para melhorar esse aredondamento.


Bom dia,

vou intrometer nesse post e dar meu pitaco de contribuição.

Você precisa ter ciência de algumas coisas antes de colocar em REAL para entender o que é esse "arredondamento".


1) Em DEMO as ordens são executadas a preço LAST,  ou seja não são executadas pelo preços ofertados (ASK/BID) e a liquidez é infinita.(*)

2) Por diversos fatores, praticamente não existe desvio em conta DEMO, sendo o mais importante o fato da ordem ser executada no servidor de teste do mt5 da corretora.

3)  Em conta REAL as ordens sofrem um desvio, isto é:  Os preços do  ASK / BID do momento que o EA enviou a ordem são frequentemente diferentes dos preços do momento da execução na EXCHANGE ( B3 ). Isso também faz com que o resultado gain/loss seja diferente do desejado.

   Em conta real as ordens sofrem derrapagem, isto é: A execução da ordem, mais frequentemente chamada de preenchimento da ordem, é feito conforme as quantidades ofertadas em cada preço, então final do execução você tem o preço médio de execução e é sobre esse preço médio que os stops gain/loss usam como referencia.

4) Os gargalos ou soluços em conta REAL são frequentes para o MT5 / B3 e produzem desvio de vários TICKS.

5) Por último e o mais importante, os stops GAIN/LOSS são gatilhos que disparam uma ordem a mercado, portanto estão estão sujeitas a tudo que foi dito anteriormente.


(*) Não obedecem as quantidades ofertadas em cada preço  e o limite é o volume máximo que pode ser operado para o ativo.

(

 
Rogerio Giannetti Torres:

Bom dia,

. . .

Bom dia!


Excelente contribuição, Rogerio! Muito bem explicado!

 
Rogerio Giannetti Torres:

Bom dia,

vou intrometer nesse post e dar meu pitaco de contribuição.

Você precisa ter ciência de algumas coisas antes de colocar em REAL para entender o que é esse "arredondamento".


1) Em DEMO as ordens são executadas a preço LAST,  ou seja não são executadas pelo preços ofertados (ASK/BID) e a liquidez é infinita.(*)

2) Por diversos fatores, praticamente não existe desvio em conta DEMO, sendo o mais importante o fato da ordem ser executada no servidor de teste do mt5 da corretora.

3)  Em conta REAL as ordens sofrem um desvio, isto é:  Os preços do  ASK / BID do momento que o EA enviou a ordem são frequentemente diferentes dos preços do momento da execução na EXCHANGE ( B3 ). Isso também faz com que o resultado gain/loss seja diferente do desejado.

   Em conta real as ordens sofrem derrapagem, isto é: A execução da ordem, mais frequentemente chamada de preenchimento da ordem, é feito conforme as quantidades ofertadas em cada preço, então final do execução você tem o preço médio de execução e é sobre esse preço médio que os stops gain/loss usam como referencia.

4) Os gargalos ou soluços em conta REAL são frequentes para o MT5 / B3 e produzem desvio de vários TICKS.

5) Por último e o mais importante, os stops GAIN/LOSS são gatilhos que disparam uma ordem a mercado, portanto estão estão sujeitas a tudo que foi dito anteriormente.


(*) Não obedecem as quantidades ofertadas em cada preço  e o limite é o volume máximo que pode ser operado para o ativo.

(

Obrigado pela explicação, tenho noção de tudo o que falou, embora seja um iniciante com pouquissimo conhecimento na linguagem, já sou experiente no mercado, e sei que é normal acontecer algumas vezes ainda mais com lotes maiores, porém como estou em fase de testes, está com lote mínimo, o que reduzia o problema de liquidez, e ainda, o preço foi direto no alvo, quase não passou calor, fiz as alterações que @Vinicius de Oliveira gentilmente forneceu, e ainda sim aconteceu novamente hoje, o que queria saber, é se existe alguma maneira de zerar essa derrapagem, o EA só vender no preço estabelecido ou além  já no loss  essa derrapagem poderia existir, visto o perigo de a ordem não ser executada e o mercado ir contra mim.


sinput group "----- Parâmetros de Negociação"
input int      Stop_Loss             = 90;       // STOP LOSS
input int      Stop_Gain             = 25;       // STOP GAIN
input int      EA_Magic_Number       = 1111;     // MAGIC NUMBER
input double   Lote                  = 1.0
         mrequest.action=TRADE_ACTION_DEAL;                                                                                   // Execução imediata da ordem
         mrequest.price = NormalizePrice(latest_price.bid);
         mrequest.sl    = NormalizePrice(latest_price.bid + STL*_Point);
         mrequest.tp    = NormalizePrice(latest_price.bid - STG*_Point);                                              // Take Profit
         mrequest.symbol = _Symbol;                                                                                           // Ativo
         mrequest.volume = Lote;                                                                                              // Numero de lotes
         mrequest.magic = EA_Magic_Number;                                                                                    // Numero Magico da ordem
         mrequest.type= ORDER_TYPE_SELL;                                                                                      // Ordem de venda
         mrequest.type_filling = ORDER_FILLING_FOK;                                                                           // Tipo de execução da ordeme
         mrequest.deviation=100; 





 
Ou pelo menos diminuir, 5 pontos pra mais ou para menos.
 
Romeu Masselai:
Ou pelo menos diminuir, 5 pontos pra mais ou para menos.

Olá Romeu!


Outra coisa que você poderia testar / ponderar também seria a utilização de deviation = 5 (ou menor) e type_filling = ORDER_FILLING_IOC (quanto estiver trabalhando com volumes maiores).

 
Vinicius de Oliveira:

Olá Romeu!


Outra coisa que você poderia testar / ponderar também seria a utilização de deviation = 5 (ou menor) e type_filling = ORDER_FILLING_IOC (quanto estiver trabalhando com volumes maiores).

tinha pensado nisso também, vou mudar no código e amanha se tiver alguma operação falo o que deu.

 
Romeu Masselai:

tinha pensado nisso também, vou mudar no código e amanha se tiver alguma operação falo o que deu.

Romeu, peço desconsiderar essa minha última sugestão, se a sua corretora utilizar o modo de execução de mercado. Recebi o feedback (muito válido) de que o campo deviation não é considerado nesse caso:



... Para os dois casos abaixo (execução a pedido e execução instantânea) a sugestão pode ser válida:


Razão: