Discussão do artigo "Que testes deve passar o robô de negociação antes da publicação no Mercado" - página 21

 

Houve um erro no código do arquivo check_freezelevel.mq5 (linha 140), faltando a instrução `if(!TP_check)`.

bool CheckPositionForFREEZE_LEVEL(ulong ticket)
  {
//--- obter o nível SYMBOL_TRADE_FREEZE_LEVEL
   int freeze_level=(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_FREEZE_LEVEL);
   if(freeze_level!=0)
     {
      PrintFormat("SYMBOL_TRADE_FREEZE_LEVEL=%d: Cannot modify order"+
                  "  nearer than %d points from the activation price",freeze_level,freeze_level);
     }
//--- selecione a posição para trabalhar
   if(!PositionSelectByTicket(ticket))
     {
      //--- falha ao selecionar a posição
      return(false);
     }
//--- obter os dados do pedido 
   ENUM_POSITION_TYPE pos_type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
   double sl=PositionGetDouble(POSITION_SL);
   double tp=PositionGetDouble(POSITION_TP);
//--- resultado da verificação de StopLoss e TakeProfit
   bool SL_check=false,TP_check=false;
//--- tipo de posição
   switch(pos_type)
     {
      //--- comprar
      case POSITION_TYPE_BUY:
        {
         SL_check=(Bid-sl>freeze_level*_Point);
         if(!SL_check)
            PrintFormat("Position %s #%d cannot be modified: Bid-StopLoss=%d points"+
                        " < SYMBOL_TRADE_FREEZE_LEVEL=%d points)",
                        EnumToString(pos_type),ticket,(int)((Bid-sl)/_Point),freeze_level);
         TP_check=(tp-Bid>freeze_level*_Point);
         if(!TP_check)
            PrintFormat("Position %s #%d cannot be modified: TakeProfit-Bid=%d points"+
                        " < SYMBOL_TRADE_FREEZE_LEVEL=%d points)",
                        EnumToString(pos_type),ticket,(int)((tp-Bid)/_Point),freeze_level);
         //--- retorna o resultado da verificação
         return(SL_check&&TP_check);
        }
      break;
      //--- vender
      case POSITION_TYPE_SELL:
        {
         SL_check=(sl-Ask>freeze_level*_Point);
         if(!SL_check)
            PrintFormat("Position %s cannot be modified: StopLoss-Ask=%d points"+
                        " < SYMBOL_TRADE_FREEZE_LEVEL=%d points)",
                        EnumToString(pos_type),(int)((sl-Ask)/_Point),freeze_level);
         TP_check=(Ask-tp>freeze_level*_Point);
         PrintFormat(" Position %s cannot be modified: Ask-TakeProfit=%d points"+
                     " < SYMBOL_TRADE_FREEZE_LEVEL=%d points)",
                     EnumToString(pos_type),(int)((Ask-tp)/_Point),freeze_level);
         //--- retorna o resultado da verificação
         return(SL_check&&TP_check);
        }
      break;
     }
//--- a posição não passou na verificação
   return (false);
  }
 
Olá, meu EA negocia com base em eventos de notícias e não funciona no testador de estratégia, mas é lucrativo na conta real. O fato de meu EA não funcionar no testador fará com que ele seja reprovado na validação de mercado?
 

Em geral, a verificação dos níveis de TakeProfit e StopLoss com a distância mínima de SYMBOL_TRADE_STOPS_LEVEL levada em consideração tem o seguinte aspecto:

  • A compra é feita pelo preço Ask - os níveis TakeProfit e StopLoss devem estar a umadistância de pelo menos SYMBOL_TRADE_STOPS_LEVEL pontos do preço Bid.
  • A venda é feita pelo preço Bid - os níveis TakeProfit e StopLoss devem estar a uma distância de pelo menos pontos SYMBOL_TRADE_STOPS_LEVEL do preço Ask.
A compra é feita pelo preço Ask
A venda é feita pelo preço Bid
TakeProfit - Bid >= SYMBOL_TRADE_STOPS_LEVEL
Bid - StopLoss >= SYMBOL_TRADE_STOPS_LEVEL
Ask - TakeProfit >= SYMBOL_TRADE_STOPS_LEVEL
StopLoss - Ask >= SYMBOL_TRADE_STOPS_LEVEL



Alguém pode me explicar a dúvida que estou tendo?

Entendo que a compra é feita pelo preço de venda e a venda é feita pelo preço de compra. Também consigo entender por que estamos usando o preço de compra para comparar quando compramos para stop loss e take profit (porque estaremos fazendo a operação oposta, vendendo, portanto, o preço de compra).

No entanto, não entendo por que o take profit também não é comparado com o preço de venda ao comprar, porque se o compararmos apenas com o preço de compra, o usuário poderia definir o valor mais alto do que o preço de compra, mas mais baixo do que o preço de venda, o que não faz sentido algum?

Obrigado por sua atenção.

 

Hi,

meu EA foi recusado porque a validação informa "nenhuma atividade de negociação". Como meu EA foi projetado para negociar em uma data específica de notícias, eu precisaria saber quais dados históricos são usados durante a validação do EA. Assim, eu poderia fornecer uma data padrão para fins de validação.

Desde já, obrigado

Tim

 
@Tim Arthur Herbert Kasprzyk #: meu EA foi recusado porque a validação informa "nenhuma atividade de negociação". Como meu EA foi projetado para negociar em uma data específica de notícias, eu precisaria saber quais dados históricos são usados durante a validação do EA. Assim, eu poderia fornecer uma data padrão para fins de validação.

Parece que você não leu este tópico antes de postar ...

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

Discussão do artigo "As verificações que um robô de negociação deve passar antes de ser publicado no mercado"

Fernando Carreiro, 2022.12.24 18:46

De acordo com as regras do produto Mercado, você não tem permissão para restringir ou limitar seu EA a um único símbolo. Seu EA deve funcionar para todos os símbolos, mesmo que seu uso pretendido seja para um único símbolo.

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

Discussão do artigo "As verificações que um robô de negociação deve passar antes de ser publicado no mercado"

Fernando Carreiro, 2023.03.27 01:50

Você não tem permissão para limitar seu EA de forma alguma. Ele deve ser capaz de negociar com tudo e qualquer coisa, mesmo que tenha sido projetado para índices. Leia as regras do mercado.

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

Discussão do artigo "As verificações que um robô de negociação deve passar antes da publicação no Mercado"

Fernando Carreiro, 2023.06.01 13:15

Seu EA deve ser capaz de negociar em todos os símbolos e todos os períodos de tempo. Não deve haver limitações.

Para reduzir o tamanho do seu registro, considere ...

  • Reduzir o número de instruções "prints" na saída do registro
  • Usar um trailing-step ou time-step em vez de trailing stops contínuos.
  • Não criar e excluir continuamente ordens pendentes. Considerar o uso de ordens pendentes "virtuais".
 
Fernando Carreiro #:

Parece que você não leu este tópico antes de postar...

Olá, Fernando, obrigado por seu feedabck. Na verdade, meu EA não está restrito a nenhum símbolo ou período de tempo. Ele requer apenas uma data de notícias específica, como a data de notícias da taxa de juros do FED. Também forneço uma data de notícias padrão no EA. Portanto, em teoria, ele deve passar na validação. Mas pode ser que o processo de validação esteja usando dados históricos que não cobrem minha data padrão. Portanto, seria útil entender quais dados históricos são usados (não qual símbolo ou período de tempo, isso eu posso ver no relatório).
 
@Tim Arthur Herbert Kasprzyk #: Olá, Fernando, obrigado por seu feedback. Na verdade, meu EA não está restrito a nenhum símbolo ou período de tempo. Ele requer apenas uma data de notícias específica, como a data de notícias da taxa de juros do FED. Também forneço uma data de notícias padrão no EA. Portanto, em teoria, ele deve ser aprovado na validação. Mas pode ser que o processo de validação esteja usando dados históricos que não cobrem minha data padrão. Portanto, seria útil entender quais dados históricos são usados (não qual símbolo ou período de tempo, isso eu posso ver no relatório).

Isso ainda é uma limitação. Remova toda e qualquer limitação definindo os valores dos parâmetros padrão para permitir a negociação independentemente de qualquer data, símbolo ou período de tempo.

O EA também precisará ler as especificações do contrato e ajustar-se de acordo, caso contrário, falhará no processo de validação.

 
Recebo a mensagem "Strategy Tester Report not found" EURUSD 1H. Como posso resolver isso?

Já verifiquei várias vezes no testador de estratégia e meu EA funciona sem nenhum erro.

Codifiquei um EA de "Teste de validação" que simplesmente abre uma posição com o volume mínimo permitido e fecha a posição após alguns segundos, mas o mesmo erro ocorreu.

 

Acabei de ler um comentário sobre o relatório de validação que diz "nenhuma atividade de negociação". Todos os EAs devem negociar? Meu EA está apenas desenhando coisas no gráfico, ou deveria ter sido um indicador?

 

Alguém está tendo esse tipo de problema? Na conta DEMO da Metaquotes, ele funciona normalmente e, no teste, não passou na validação.


teste em EURUSD,H1 (netting) 2021.06.30 23:59:59 A função ExpertRemove() chamada se removeu dentro de OnDeinit se removeu em 99% do intervalo de teste relatório do testador de estratégia 1 total de negociações