Discussão do artigo "Guia prático do MQL5: Como Evitar Erros Quando Configurando/Modificando Níveis de Negociação" - página 2

 
tatankaska:
Olá, ao testar seu consultor especialista no testador de estratégia no GOLD, sempre obtive avisos Falha ao abrir a posição - Paradas inválidas - nenhuma posição foi aberta. O que estava errado? Ele foi escrito para evitar esse tipo de erro?
Receio que precisemos de algum código para ajudá-lo. O mais provável é que o erro exista de fato em seu código. Verifique se seus stops são maiores do que a distância mínima permitida e se, por acaso, você não colocou os stops de compra e venda no lugar errado. Verifique também se a sua corretora permite especificar stops na abertura da posição - algumas delas exigem que os stops sejam adicionados somente às posições existentes (a chamada"execução de mercado").
 
marketeer:
Receio que precisemos de algum código para poder ajudá-lo. O mais provável é que o erro exista de fato em seu código. Verifique se seus stops são maiores do que a distância mínima permitida e se, por acaso, você não colocou os stops de compra e venda no lugar errado. Verifique também se a sua corretora permite especificar stops na abertura da posição - algumas delas exigem que os stops sejam adicionados somente às posições existentes (a chamada"execução de mercado").

Olá. Testei apenas o consultor especialista anexado ao artigo Como evitar erros ao definir/modificar o nível de negociação, sem nenhuma alteração (Positionpropertiesplus). Plataforma Instatrader da Instaforex. As funções desse consultor são escritas de forma que, se eu definir parâmetros de parada incorretos, eles serão definidos como os mais baixos permitidos. Portanto, normalmente eu não deveria receber nenhum aviso de erro - isso é verdade para os pares de moedas. Mas pelo GOLD nessa plataforma, a cada tentativa do positionpropertiesplus EA de abrir uma posição com stops, recebo o aviso de erro de stops inválidos e nenhuma posição no testador de estratégia foi aberta. É esse o caso que você mencionou - problema com a plataforma instatrader e com o corretor? Nas propriedades do símbolo GOLD está escrito execução instantânea.

Aqui está um exemplo de função para cálculo de stoploss do EA mencionado - usei o EA anexado ao artigo mencionado sem nenhuma alteração, apenas usei GOLD em vez de pares de forex:

//+------------------------------------------------------------------+

//| Cálculo do valor de Stop Loss|

//+------------------------------------------------------------------+

double CalculateStopLoss(ENUM_ORDER_TYPE order_type)

  {

//--- Se o Stop Loss for necessário

   if(StopLoss>0)

     {

      //--- Para o valor de Stop Loss calculado

      double sl=0.0;

      //--- Se você precisar calcular o valor para uma posição de COMPRA

      if(order_type==ORDER_TYPE_BUY)

        {

         // Calcular o nível

         sl=NormalizeDouble(sym_ask-CorrectValueBySymbolDigits(StopLoss*sym_point),sym_digits);

         //--- Retorna o valor calculado se ele for inferior ao limite inferior do nível de paradas

         // Se o valor for maior ou igual, retorne o valor ajustado

         return(sl<sym_down_level ? sl : sym_down_level-sym_offset);

        }

      //--- Se você precisar calcular o valor de uma posição de VENDA

      if(order_type==ORDER_TYPE_SELL)

        {

         //--- Calcular o nível

         sl=NormalizeDouble(sym_bid+CorrectValueBySymbolDigits(StopLoss*sym_point),sym_digits);

         //--- Retorna o valor calculado se ele for maior que o limite superior do nível de paradas

         // Se o valor for menor ou igual, retorne o valor ajustado

         return(sl>sym_up_level ? sl : sym_up_level+sym_offset);

        }

     }

//---

   return(0.0);

  } 
 
tatankaska:
...

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


Olá,

Por favor, use o botão SRC ao postar o código. Obrigado.


Desta vez, eu o editei para você.


 
tatankaska:

Olá, testei apenas o consultor especialista anexado ao artigo Como evitar erros ao definir/modificar o nível de negociação, sem nenhuma alteração (Positionpropertiesplus). Plataforma Instatrader da Instaforex. As funções desse consultor são escritas de forma que, se eu definir parâmetros de parada incorretos, eles serão definidos como os mais baixos permitidos. Portanto, normalmente eu não deveria receber nenhum aviso de erro - isso é verdade para os pares de moedas. Mas pelo GOLD nessa plataforma, a cada tentativa do positionpropertiesplus EA de abrir uma posição com stops, recebo o aviso de erro de stops inválidos e nenhuma posição no testador de estratégia foi aberta. É esse o caso que você mencionou - problema com a plataforma Instatrader e com o corretor? Nas propriedades do símbolo GOLD está escrito execução instantânea.

Aqui está um exemplo de função para cálculo de stoploss do EA mencionado - usei o EA anexado ao artigo mencionado sem nenhuma alteração, apenas usei GOLD em vez de pares de forex:

Sim, foi esse o caso. Com o GOLD no Instatrader, os stops só podiam ser colocados após a abertura da posição. Quando a posição era aberta sem stops e após a abertura modificada, tudo estava OK. Obrigado, pessoal.
 

Mais uma vez, com relação ao cálculo dos stops (SL/TP) no EA anexado, eles são calculados corretamente apenas para instrumentos em que o ponto do símbolo = tamanho do tick do símbolo. Esse não é o caso do GOLD.

Os stops devem ser, nesse caso (pelo GOLD), corrigidos para o tamanho válido do tick do símbolo, caso contrário, você receberá um aviso de erro - stops inválidos.

Portanto, os avisos de erro do GOLD não são resultado da execução do mercado. O EA precisa de uma pequena correção no cálculo do SL/TP, se você quiser usá-lo com o GOLD.

 
E quanto ao fechamento de uma posição? Se houver condições (sinal) para fechar posições no Expert Advisor, como fazer isso, onde posso ver esses exemplos?
 
Nauris:
E quanto ao fechamento de uma posição? Se houver condições (sinal) para fechar posições no Expert Advisor, como fazer isso, onde posso ver esses exemplos?
A classe CTrade da biblioteca padrão é usada no artigo. Ela tem o método PositionClose. Você pode usá-lo.
 
Eu modifico isso para o código

//+------------------------------------------------------------------+
//| Configuração do painel de informações|
//|------------------------------------------------------------------+
void SetInfoPanel()
  {
//--- Visualização ou modos em tempo real
   if(ShowInfoPanel && (IsVisualMode() || IsRealtime()))
     {
     // O código restante da função SetInfoPanel()
     // ...
     }
  }