Efetuar compra ou venda no toque do candle na média móvel

 
Pessoal meu nome é Marcelo e estou iniciando meus estudos em MQL5. Eu já consigo fazer a estrutura de um Robô, porém algo que ainda estou com dificuldade é na estratégia, pois eu utilizo o toque do preço na média móvel, ou seja, eu faço operações de scalp. Porém o que não estou conseguindo fazer é a normalização e o arredondamento do preço e eu tenho uma falha de stop inválido. Já utilizei o Normalizedoble mas não deu certo, já tentei corrigir o número de dígitos mas não deu certo também. 
Estou utilizando o Mini Índice.
Gostaria muito da ajuda de vocês e se possível com um exemplo de código.
 
1092381537:
Pessoal meu nome é Marcelo e estou iniciando meus estudos em MQL5. Eu já consigo fazer a estrutura de um Robô, porém algo que ainda estou com dificuldade é na estratégia, pois eu utilizo o toque do preço na média móvel, ou seja, eu faço operações de scalp. Porém o que não estou conseguindo fazer é a normalização e o arredondamento do preço e eu tenho uma falha de stop inválido. Já utilizei o Normalizedoble mas não deu certo, já tentei corrigir o número de dígitos mas não deu certo também. Estou utilizando o Mini Índice. Gostaria muito da ajuda de vocês e se possível com um exemplo de código.


Boa noite, Marcelo!!


Segue a função:

Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Erro: [failed modify] (take profit, robô de GAP)

Vinicius de Oliveira, 2022.09.28 23:35


Boa noite Christian!!


Utilize a função NormalizePrice(), abaixo, em vez de NormalizeDouble() pra ver se resolve...

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

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

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


Ela está disponível também na classe CSymbolInfo:

Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Erro StopLoss Mini índice [ . . . ]

Rogerio Giannetti Torres, 2022.09.30 21:24

A [ . . . ] infelizmente reinventou uma roda quadrada... Certamente a definição do _POINT não é 1.  Mas tem solução e é bem simples, use a função NormalizePrice da classe de negociação CSymbolInfo.


...
#include <Trade\SymbolInfo.mqh>         CSymbolInfo       cSymbol;

...
cSymbol.Name(_Symbol);
cSymbol.Refresh();
´´´
...


requisicao.sl = cSymbol.NormalizePrice(Ask - SL);
requisicao.tp = cSymbol.NormalizePrice(Ask + TK);