Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 71

 
xyz999: 2) Se a optimização (backktest) foi realizada durante um período de 10 meses e a opção de teste 1/4 forward foi seleccionada, como por exemplo, como devo entender:
Terminal do Cliente / Testador de Estratégia / Testes de retrocesso / Testes de avanço
 

Obrigado.

Sim, a partir desta ligação.

http://www.metatrader5.com/ru/terminal/help/tester/tester_using/forward_testing.

Encontrei a resposta à minha segunda pergunta. No entanto, NÃO há respostas à primeira e terceira perguntas.

Eu também gostaria de os ter.

Quero saber os resultados e rácios de outros comerciantes. Como os meus resultados são muito alarmantes. Sou cientista na área do controlo automático e modelação de processos não estacionários, o que inclui também um gráfico de movimento de preços no mercado. Tenho vindo a modelar processos não estacionários durante muitos anos e a forma como o testador trabalha não se enquadra de forma alguma nos meus anos de experiência. Algo está errado aqui. Ou utilizo incorrectamente o testador ou este não funciona correctamente. Vamos descobrir juntos.

O meu backtest estritamente após o período de optimização mostra 200% do lucro que tivemos durante a optimização com os mesmos parâmetros. No entanto, ao escolher outros parâmetros de optimização e testes durante o período de optimização, obteremos várias vezes menos lucro. Não deve ser esse o caso. É por isso que tenho algumas perguntas.

 
xyz999: Encontrei uma resposta para a minha segunda pergunta. No entanto, não há RESPOSTA À PRIMEIRA E TERCEIRA PERGUNTA. Eu também gostaria de os ter.

Bem, não depende de mim, como eles dizem, "Tudo o que posso" (c). Estou longe do tema em si. Tente procurar no fórum, talvez onde já tenham sido discutidos testes avançados. Ou, se achar que o tema é muito importante, crie um novo ramo temático. Caso contrário, as perguntas perder-se-ão no ramo geral.

xyz999 : Sim, neste link https://www.metatrader5.com/ru/terminal/help/algotrading/testing encontrei a resposta à minha segunda pergunta.

Também há materiais de referência no terminal. F1.

 
mario065:

Fez uma coisa muito estúpida de fazer.

Peguei no corpo do indicador de Média Móvel Personalizada e coloquei o tampão de IFM dentro.

Eu alterei o preço.

Fi-lo por si como perito, apenas um indicador e um comentário para verificar.

Obrigado por não deixar a mensagem sem resposta. Infelizmente, o testador continua a rejeitar a suavização dos outros indicadores. O meu consultor especializado requer dois indicadores - MFI e DEMA ao mesmo tempo. Implementei o vosso algoritmo com MFI no meu EA - em vão - não fui capaz de o executar para optimização de variáveis globais.

Mais uma vez obrigado pelas vossas mensagens.
 
O artigo sobre a EA https://www.mql5.com/ru/articles/100 menciona condições para abrir posições, mas sem condições para as fechar.


   bool Buy_opened=false;  // переменные, в которых будет храниться информация 
   bool Sell_opened=false; // о наличии соответствующих открытых позиций

   if(PositionSelect(_Symbol)==true) // есть открытая позиция
     {
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
         Buy_opened=true;  //это длинная позиция
        }
      else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
        {
         Sell_opened=true; // это короткая позиция
        }
     }    
             
   bool Buy_Condition_1=...
   bool Buy_Condition_2=...
   bool Buy_Condition_3=...

   
 if(Buy_Condition_1 || Buy_Condition_2)
     { 
       if(Buy_Condition_3)
        {
         // есть ли в данный момент открытая позиция на покупку?
         if(Buy_opened)
           {
            Alert("Уже есть позиция на покупку!!!");
            return;    // не добавлять к открытой позиции на покупку
           }        
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.ask,_Digits);           // последняя цена ask
         mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.magic = EA_Magic;                                            // Magic Number
         mrequest.type = ORDER_TYPE_BUY;                                       // ордер на покупку
         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=10;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
         OrderSend(mrequest,mresult);
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {
            Alert("Ордер Buy успешно помещен, тикет ордера #:",mresult.order,"!!");
           }
         else
           {
            Alert("Запрос на установку ордера Buy не выполнен - код ошибки:",GetLastError());
            return;
           }
        }
      }
 
 bool Buy_Close_1=....
 bool Buy_Close_2=...
 bool Buy_Close_3=...
 
 if(Buy_Close_1 || Buy_Close_2)
     {
      if(Buy_Close_3)
        {
        // есть ли в данный момент открытая позиция на покупку?
         if(????)
         {
           Alert("Позицию на покупку закрываю!!!");
            return;    // закрыл
         }        
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена bid
         mrequest.sl = 0;
         mrequest.tp = 0;
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.magic = EA_Magic;                                            // Magic Number
         mrequest.type = ORDER_TYPE_SELL; // ордер на продажу                                     // ордер на покупку
         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=10;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
         OrderSend(mrequest,mresult);

Em vez de pontos de interrogação, coloquei PositionSelect(_Symbol) com valor verdadeiro. Não ajudou.


Pergunta. O que posso mudar minimamente - para poder estabelecer condições de proximidade?
Пошаговое руководство по написанию MQL5-советников для начинающих
Пошаговое руководство по написанию MQL5-советников для начинающих
  • 2010.06.09
  • Samuel
  • www.mql5.com
Написание советников на MQL5 проще чем кажется, вы легко можете этому научиться. В этом руководстве вы познакомитесь с основными моментами, необходимыми для написания простого советника на основе конкретной торговой стратегии. Рассмотрена структура советника, использование встроенных технических индикаторов и торговых функций, вопросы отладки и тестирования советника на исторических данных.
 
Lester:
O artigo sobre o Conselheiro Especialista https://www.mql5.com/ru/articles/100 menciona as condições para a abertura de posições, mas não discute as condições para o encerramento de posições.


Em vez de pontos de interrogação, coloquei PositionSelect(_Symbol) com valor verdadeiro. Não ajudou.


Pergunta. O que posso mudar para o mínimo - para poder estabelecer condições de fecho?

Tem um retorno após o Alerta. A posição provavelmente não está a fechar devido a este regresso. Por favor, leve-o embora e tente novamente.

// есть ли в данный момент открытая позиция на покупку?
         if(????)
         {
           Alert("Позицию на покупку закрываю!!!");
           return;    // закрыл
         }  


 
Obrigado, pois senti que a resposta era muito simples e que estava por perto.
No entanto, surgiu outra questão sobre a parte dos pontos de interrogação.

Sobre o algoritmo.

Em condições apropriadas + sem posição - a posição é aberta, e noutras condições e na presença de uma posição aberta - a posição aberta é fechada.

Se não estou enganado - existência de uma posição, nomeadamente Buy_opened

if(Buy_Condition_1 || Buy_Condition_2)
     { 
       if(Buy_Condition_3)
        {
         // есть ли в данный момент открытая позиция на покупку?
         if(Buy_opened)
           {
            Alert("Уже есть позиция на покупку!!!");
            return;    // не добавлять к открытой позиции на покупку
           }        

igual a um - causa alerta e retorno (volta ao início), e igual a zero - abre ordem de compra.

Pergunta. O que devo escrever em vez de pontos de interrogação - a condição de uma ordem aberta, para que a EA não abra uma posição (no meu caso, abre uma ordem de venda) ?

 bool Buy_Close_1=....
 bool Buy_Close_2=...
 bool Buy_Close_3=...
 
 if(Buy_Close_1 || Buy_Close_2)
     {
      if(Buy_Close_3)
        {
        // есть ли в данный момент открытая позиция на покупку?
         if(????)
         {
           Alert("Позицию на покупку закрываю!!!");
            return;    // закрыл
         }        
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена bid
         mrequest.sl = 0;
         mrequest.tp = 0;

No momento prescrevi também Buy_opened, porque as condições desta definição estão relacionadas com PositionSelect(_Symbol)

Compreendo que as perguntas não significam nada, pois é possível experimentar rapidamente todas as opções lógicas possíveis e testar, mas o problema é que o bug testador não me permite fazer isto, mas há uma oportunidade de diagnosticar de facto no M1 em modo de comércio real.

 
Lester:
...

Compreendo que as perguntas não significam nada, já que se pode experimentar rapidamente todas as opções e testes lógicos possíveis, mas o problema é que o bug do testador não me permite fazer isso, mas há uma oportunidade de diagnosticar de facto no M1 em modo de comércio real.

Não compreendo bem a sua pergunta.

E que insecto no testador encontrou que o impede de executar o teste?

 
tol64:

Não compreendo bem a sua pergunta.

O que é o erro no testador que o impede de executar o teste?

Descrevi-o anteriormente ou no ramo do Indicador. A demonstração referente ao cabo indicador de IFM não é exibida na janela de IFM e, portanto, o testador não funciona, mas o Expert Advisor trabalha. O mesmo com MA, AMA...!

Sobre a questão. O que devemos escrever em vez dos pontos de interrogação para fazer o Consultor Especialista "compreender" que existe uma posição aberta e não abrir uma ordem!

bool Buy_Close_1=....
 bool Buy_Close_2=...
 bool Buy_Close_3=...
 
 if(Buy_Close_1 || Buy_Close_2)
     {
      if(Buy_Close_3)
        {
        // есть ли в данный момент открытая позиция на покупку?
         if(????)
         {
           Alert("Позицию на покупку закрываю!!!");
           // Return убрал благодаря форуму ))
         }        
 
Lester:
Descrito anteriormente, ou no ramo do indicador. Dema referente ao cabo indicador de IFM - não é exibido na janela IFM, e portanto - o Expert Advisor não funciona. O mesmo se aplica à MA, AMA.

Sobre a questão. O que devemos escrever em vez de pontos de interrogação para que a EA "veja" que existe uma posição aberta e não abra uma ordem!

Se houver uma posição (PositionSelect(_Symbol)) e todas as outras condições forem cumpridas, então feche a posição. Se o retorno do seu exemplo não for removido, a condição deve ter o seguinte aspecto

if(!PositionSelect(_Symbol))
  {
   return;
  }

o que significa que se não houver posição, então saia. Se não sair, o programa executará o código que vem depois deste bloco.

Mas eu colocaria a verificação da presença/ausência de posição antes de fechar as verificações de condições.

Razão: