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

 
taramortom #:
Eu uso a otimização genética.

Então, parece que esse é o caso. Aparentemente, na otimização genética, os parâmetros responsáveis por ligar/desligar os osciladores são fortemente dominantes com relação aos parâmetros do oscilador. Ou seja, ao criar a próxima geração, um pai que tenha o gene para o oscilador desligado matará vários descendentes de outros pais com o gene ligado para esse oscilador. Ou seja, esses descendentes serão descartados pela condição de parâmetros incorretos, não darão descendentes e a evolução chegará rapidamente a um impasse.
Tente observar o comportamento do testador na otimização total em um curto intervalo do período de teste. Haverá omissões desnecessárias de combinações nesse caso?

 
Yuriy Bykov #:

Então, parece que esse é o caso. Aparentemente, durante a otimização genética, os parâmetros responsáveis por ligar/desligar os osciladores são fortemente dominantes com relação aos parâmetros do oscilador. Ou seja, ao reproduzir a próxima geração, um pai que tenha o gene para o oscilador desligado matará um monte de descendentes de outros pais com o gene ligado para esse oscilador. Ou seja, esses descendentes serão descartados pela condição de parâmetros incorretos, não darão descendentes e a evolução chegará rapidamente a um impasse.
Tente observar o comportamento do testador na otimização total em um curto intervalo do período de teste. Haverá omissões desnecessárias de combinações nesse caso?


Sim, o problema está na combinação: algoritmo genético + bloqueio de determinadas combinações. Com a otimização total, tudo funciona corretamente, mas a otimização total levará um tempo irrealisticamente longo.

Eu esperava poder, de alguma forma, mostrar ao otimizador que essas variantes são inaceitáveis e que ele nem deveria tentar usá-las e se concentrar em outras variantes. Na verdade, isso acontece como você escreveu.

 
Alexey Petrov #:

Você pode criar um trabalho freelance e escolher entre os desenvolvedores que se candidatam ao seu trabalho

https://www.mql5.com/fr/job

Obrigado, publiquei meu anúncio e espero finalmente encontrar uma solução :)
 

Olá!


Como é o código que permite que o Expert Advisor negocie em determinados horários na MQL5? Não consigo transferi-lo da MQL4.


void OnTick()

{

double PriceBid=MarketInfo(0,MODE_BID);

double time = Hour() + Minute()*0.01;

Comentário("datum ",inpoint,

"\n", "step ",iter,

"n", "time ",time,

"n", "price", "Bid",

"\n", "preço", PriceBid);

Se (tempo <= Stop_work_time)

{

//se(Type==BUY || Type==ALL)newbuyorder();

//se(Type==SELL || Type==ALL)newsellorder();

in();

takeestop();

stoporders();

connected();

delorders();

}

else

{

takestop();

delorders();

}

}

Arquivos anexados:
kachinmind.mq4  38 kb
 
EfremovSergey permite que um Expert Advisor negocie em determinados horários na MQL5? Não consigo transferi-lo da MQL4.


void OnTick()

{

double PriceBid=MarketInfo(0,MODE_BID);

double time = Hour() + Minute()*0.01;

Comentário("datum ",inpoint,

"{n", "step ",iter,

"n", "time",time,

"n", "price", "Bid",

"\n", "price", PriceBid);

se(tempo <= tempo_de_trabalho_de_parada)

{

//se(Type==BUY || Type==ALL)newbuyorder();

//se(Type==SELL || Type==ALL)newsellorder();

in();

takeestop();

stoporders();

connected();

delorders();

}

else

{

takestop();

delorders();

}

}

A implementação dessa tarefa no mq5 pode ser repetida usando

MqlDateTime
 

Bom dia e bom humor a todos!

Caros especialistas!!! Vocês poderiam me dizer o que está errado neste código (a parte em que o erro aparece periodicamente está destacada em amarelo)?

//+------------------------------------------------------------------+
//|                                            Proba (version_1).mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//--- Global variables
MqlRates pArray[];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ArraySetAsSeries(pArray,true);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(!DownwardTrendline())
     {
      Print("Ошибка при создании линии DownwardTrendline!!! ", GetLastError());
      return;
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool DownwardTrendline()
  {
   int candles=(int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
   double pHigh[];
   ArraySetAsSeries(pHigh,true);
   CopyHigh(_Symbol,_Period,0,candles,pHigh);
   int candleHigh = ArrayMaximum(pHigh,0,candles);
   int Data = CopyRates(_Symbol,_Period,0,candles,pArray);
   ObjectDelete(0,"DnwardTrendline");
   ObjectCreate(0,"DnwardTrendline",OBJ_TREND,0,pArray[candleHigh].time,
                pArray[candleHigh].high,pArray[0].time,pArray[0].high);
   ObjectSetInteger(0,"DnwardTrendline",OBJPROP_COLOR,Blue);
   ObjectSetInteger(0,"DnwardTrendline",OBJPROP_STYLE,STYLE_SOLID);
   ObjectSetInteger(0,"DnwardTrendline",OBJPROP_WIDTH,3);
   ObjectSetInteger(0,"DnwardTrendline",OBJPROP_RAY_RIGHT,true);
   return(true);
  }
//+------------------------------------------------------------------+

Por que periodicamente, depois funciona no testador de estratégia, depois não funciona e no registro aparece essa mensagem:


Atenciosamente, Vladimir.

 
MrBrooklin #:

Bom dia e bom humor a todos!

Caros especialistas!!! Por favor, me digam o que está errado neste código (a parte do código em que o erro aparece periodicamente está destacada em amarelo):

Por que periodicamente, depois funciona no testador de estratégia, depois não funciona e no registro aparece esta mensagem:


Atenciosamente, Vladimir.

Coloque uma verificação após a linha

   int Data = CopyRates(_Symbol,_Period,0,candles,pArray);

se Data < 1 algo, de alguma forma, gritar.

 
Alexey Viktorov #:

Coloque uma marca de verificação após a linha

se Data < 1 alguma coisa, grite de alguma forma.

Bom dia Alexey, obrigado pela dica! Vou tentar agora.

Abraços, Vladimir.

 

Em vez de:

   int Data = CopyRates(_Symbol,_Period,0,candles,pArray);

Eu o coloquei:

   if(CopyRates(_Symbol,_Period,0,candles,pArray)==-1)
     {
      Print("Ошибка копирования исторических данных в массив pArray[]!!!", GetLastError());
      return(false);
     }

e tudo funcionou. Ele desenha alinha de forma constante e como deveria, mas somente agora, a cada nova inicialização do Expert Advisor no testador de estratégias, as mensagens aparecem periodicamente:

2023.01.20 11:23:37.064 2022.01.03 03:21:49   Ошибка копирования исторических данных в массив pArray[]!!!4003
2023.01.20 11:23:37.064 2022.01.03 03:21:49   Ошибка при создании линии DownwardTrendline!!! 4003

Será que isso afetará negativamente o código ou posso "esquecer" isso?

Atenciosamente, Vladimir.

 
MrBrooklin testador de estratégia:

Isso, então, de alguma forma, afetará negativamente o código ou posso "esquecer" isso?

Atenciosamente, Vladimir.

O que o impede de fazer isso?

bool .....()
{
if(Data>0)
{
..................
................

return true;
}
return false;
}
Razão: