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

 
Maksim Burov #:

Boa tarde.

Você pode me dizer como organizar uma nova execução dos parâmetros de otimização obtidos, mas para um período de tempo diferente.

Otimizado para o último semestre em um parâmetro de par de moedas, registrado no Excel. Peguei o período do último ano e quero executar os parâmetros. Como faço para colocá-los de volta no testador ou otimizador.
Verifique o que será aprovado e o que não será aprovado, anote no Excel. Talvez então execute, por exemplo, nos últimos 2 anos.

Selecione o período no qual deseja executar seus dados. E, em seguida, na guia dos parâmetros obtidos, clique com o botão direito do mouse nos parâmetros necessários e selecione teste único.
 
Roman Kutemov #:
Selecione o período no qual deseja executar seus dados. E, em seguida, na guia dos parâmetros obtidos, clique com o botão direito do mouse no parâmetro desejado e selecione teste único.

Obrigado.
E como fazer tudo no escopo, e não ficar mexendo em cada parâmetro?

 

Você poderia me ajudar com os cálculos?


Preciso ter um take profit 3 vezes maior que o stop. Parece funcionar, mas algo está errado)). O robô opera com ouro e índices, mas se recusa a operar com moedas (embora calcule tudo corretamente).

Primeiro, defino o stop na mínima da vela 1:

//---Устанавливаем стоп
   double stoploss = iLow(_Symbol,PERIOD_CURRENT,1);
      Print("Цена стопа ", stoploss);

Em seguida, calculo a distância do ASK até o stop em pontos e atribuo esse valor aos pontos de parada:

//---Опредеяем размер стопа в пунктах
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double low = iLow(_Symbol, 0, 1);
   double points = NormalizeDouble((ask - low) / _Point, _Digits);
      Print("Размер стопа ", points);

Depois disso, calculo o stop também em pips:

//---Считаем тейкпрофит
   double TP = NormalizeDouble(points * 3, _Digits);
   Print("Размер тейка ", TP);


Em seguida, abro uma transação e adiciono TR ao ASK :

//---Открываем сделку на покупку
         if(Close > maHandle && Close > Open)
            {
               if(trade.Buy(Lot,_Symbol,SYMBOL_ASK,stoploss, ask + TP,"Это я, твой робот") == true)
                  {
                     Print("Открыта покупка");
                  }


E no testador todos os cálculos estão corretos, em pontos de 5 dígitos, o stop também está em Low1, o tamanho do stop também está correto em pontos de 5 dígitos. Mas há algo errado com o take profit, que não é de 507 pips, mas de 5070 pips.



 

Olá, Sergey.

Ao calcular o stop, você vai da distância em preço para a distância em pips. Em seguida, multiplicando por 3, você obtém a distância até o takeout também em pips. Em seguida, você adiciona o número de pips ao preço de venda.

Tente não dividir pelo tamanho de um pip ou lembre-se de multiplicar por ele novamente.

//---Устанавливаем стоп
   double stoploss = iLow(_Symbol,PERIOD_CURRENT,1);
      Print("Цена стопа ", stoploss);

//---Опредеяем размер стопа
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double low = iLow(_Symbol, 0, 1);
   double points = NormalizeDouble((ask - low) / _Point, _Digits);
   double points = NormalizeDouble((ask - low), _Digits);
      
//--- ...

Ou assim

//---Устанавливаем стоп
   double stoploss = iLow(_Symbol,PERIOD_CURRENT,1);
   Print("Цена стопа ", stoploss);

//---Опредеяем размер стопа в пунктах (это целое число)
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double low = iLow(_Symbol, 0, 1);
   int points = (ask - low) / _Point;
   Print("Размер стопа ", points);

//---Считаем тейкпрофит
   int TP = points * 3;
   Print("Размер тейка ", TP);

//---Открываем сделку на покупку
         if(Close > maHandle && Close > Open)
            {
               if(trade.Buy(Lot,_Symbol,SYMBOL_ASK,stoploss, NormalizeDouble(ask + TP * _Point, _Digits),"Это я, твой робот") == true)
                  {
                     Print("Открыта покупка");
                  }
 
Yuriy Bykov #:

Olá, Sergei.


Muito obrigado! Realmente me perdi nos preços/itens. Vou tentar agora)))

 
Agora tudo é contado e definido corretamente, mas somente em USDJPY, XAUUSD e qualquer índice. Mas em moedas como USDCAD, EURUSD, a coruja não negocia e envia o erro 4756. Procurei o valor na ajuda, mas não ajudou)
 
Sergey Izhutov #:
Agora tudo é contado e definido corretamente, mas somente em USDJPY, XAUUSD e qualquer índice. Mas em moedas como USDCAD, EURUSD, a coruja não negocia e envia o erro 4756. Procurei o valor na ajuda, mas não adiantou nada)

Faça como no post anterior: forneça o código que abre posições para você. Então, talvez você possa dar alguma orientação. Não deve haver nenhuma diferença fundamental entre o USDJPY e o USDCAD; o mais provável é que haja algum erro trivial.

 
Yuriy Bykov #:

Faça como na última postagem:

Aqui está o código

//---Открываем сделку на покупку
         if(Close > maHandle && Close > Open)
            {
               if(trade.Buy(Lot,_Symbol,SYMBOL_ASK,stoploss, ask + BuyTP,"Это я, твой робот") == true)
                  {
                     Print("Открыта покупка");
                  }
                 else
                     {
                         // Получение кода ошибки
                         int error_code = GetLastError();
                         Print("Ошибка отправки заявки: ", GetLastError());
                     }
                  
                     return;
            }
            
    //---Открываем сделку на продажу
         if(Close < maHandle && Close < Open)
            {
               if(trade.Sell(Lot,_Symbol,SYMBOL_ASK,stoploss,ask - SellTP,"Это я, твой робот") == true)
                  {
                     Print("Открыта продажа");
                  }
                 else
                     {
                         // Получение кода ошибки
                         int error_code = GetLastError();
                         Print("Ошибка отправки заявки: ", GetLastError());
                     }
                  
                     return;
            }
 

Provavelmente, o erro está aqui:

if(Close > maHandle && Close > Open)

De acordo com sua lógica, maHandle deve ser o preço e, provavelmente, é um identificador, ou seja, um número inteiro - o número de série do indicador entre todos os indicadores carregados. Consulte a Ajuda da MQL5 para saber a maneira correta de obter valores de indicadores.

 
Yuriy Bykov #:

Provavelmente há um erro aqui:

De acordo com sua lógica, maHandle deve ser o preço e, provavelmente, é um identificador, ou seja, um número inteiro - o número de série do indicador entre todos os indicadores carregados. Consulte a Ajuda da MQL5 para saber a maneira correta de obter os valores do indicador.

Pensei a mesma coisa à noite, que eu deveria removê-lo. Ainda não me tornei amigo dos índices. Lembro-me vagamente que no 4 eu apenas escrevia Close > MA e tudo funcionava lá. Tentarei comentar a alça e verei quais são os resultados