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?
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.
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 variablesMqlRates pArray[];
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//---ArraySetAsSeries(pArray,true);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---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:
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);
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.2011:23:37.0642022.01.0303:21:49 Ошибка копирования исторических данных в массив pArray[]!!!40032023.01.2011:23:37.0642022.01.0303:21:49 Ошибка при создании линии DownwardTrendline!!! 4003
Será que isso afetará negativamente o código ou posso "esquecer" isso?
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?
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.
Você pode criar um trabalho freelance e escolher entre os desenvolvedores que se candidatam ao seu trabalho
https://www.mql5.com/fr/job
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();
}
}
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
MqlDateTimeBom 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)?
Por que periodicamente, depois funciona no testador de estratégia, depois não funciona e no registro aparece essa mensagem:
Atenciosamente, Vladimir.
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
se Data < 1 algo, de alguma forma, gritar.
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:
Eu o coloquei:
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:
Será que isso afetará negativamente o código ou posso "esquecer" isso?
Atenciosamente, Vladimir.
Isso, então, de alguma forma, afetará negativamente o código ou posso "esquecer" isso?
Atenciosamente, Vladimir.
O que o impede de fazer isso?