Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1436

 
taramortom #:
Uso l'ottimizzazione genetica.

Sembra che sia questo il caso. A quanto pare, nell'ottimizzazione genetica, i parametri responsabili dell'accensione/spegnimento degli oscillatori sono fortemente dominanti rispetto ai parametri dell'oscillatore. In altre parole, quando si riproduce la generazione successiva, un genitore che ha il gene per l'oscillatore spento ucciderà un gruppo di discendenti di altri genitori con il gene acceso per questo oscillatore. In altre parole, questi discendenti saranno scartati dalla condizione di parametri errati, non daranno figli e l'evoluzione arriverà rapidamente a un punto morto.
Provate a osservare il comportamento del tester in fase di ottimizzazione completa su un breve intervallo del periodo di test. Ci saranno omissioni inutili di combinazioni in questo caso?

 
Yuriy Bykov #:

Sembra che questo sia il caso. A quanto pare, durante l'ottimizzazione genetica, i parametri responsabili dell'accensione/spegnimento degli oscillatori sono fortemente dominanti rispetto ai parametri dell'oscillatore. In altre parole, quando si riproduce la generazione successiva, un genitore che ha il gene per l'oscillatore spento ucciderà un gruppo di discendenti di altri genitori con il gene acceso per questo oscillatore. In altre parole, questi discendenti saranno scartati dalla condizione di parametri errati, non daranno figli e l'evoluzione arriverà rapidamente a un punto morto.
Provate a osservare il comportamento del tester in fase di ottimizzazione completa su un breve intervallo del periodo di test. Ci saranno omissioni inutili di combinazioni in questo caso?


Sì, il problema è nella combinazione: algoritmo genetico + blocco di alcune combinazioni. Con l'ottimizzazione completa tutto funziona correttamente, ma l'ottimizzazione completa richiede un tempo irrealisticamente lungo.

Speravo di poter mostrare in qualche modo all'ottimizzatore che tali varianti sono inaccettabili e che non dovrebbe nemmeno provare a usarle e concentrarsi su altre varianti. In effetti, succede come hai scritto tu.

 
Alexey Petrov #:

Potete creare un lavoro da freelance e scegliere tra gli sviluppatori che si candidano per il vostro lavoro.

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

Grazie, ho pubblicato il mio annuncio e spero di trovare finalmente una soluzione :)
 

Ciao!


Come si presenta il codice che permette all'Expert Advisor di operare in determinate ore in MQL5? Non riesco a portarlo da MQL4.


void OnTick()

{

double PriceBid=MarketInfo(0,MODE_BID);

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

Comment("datum ",inpoint,

"n", "step ",iter,

"n", "time ",time,

"n", "prezzo", Bid,

"\n", "prezzo", PrezzoOfferta);

if(time <= Stop_work_time)

{

//se(Tipo==BUY || Tipo==ALL)nuovoordine di acquisto();

//if(Tipo==SELL || Tipo==ALL)newsellorder();

in();

takestop();

stoporders();

connected();

delorders();

}

altrimenti

{

takestop();

delorders();

}

}

File:
kachinmind.mq4  38 kb
 
EfremovSergey permette ad un Expert Advisor di operare in determinate ore in MQL5? Non riesco a portarlo da MQL4.


void OnTick()

{

double PriceBid=MarketInfo(0,MODE_BID);

double time = Ora() + Minuto()*0,01;

Comment("datum ",inpoint,

"{n", "step ",iter,

"n", "tempo",tempo,

"n", "prezzo", Bid,

"n", "prezzo", PrezzoOfferta);

if(time <= Stop_work_time)

{

//se(Tipo==BUY || Tipo==ALL)nuovoordine di acquisto();

//if(Tipo==SELL || Tipo==ALL)newsellorder();

in();

takestop();

stoporders();

connected();

delorders();

}

altrimenti

{

takestop();

delorders();

}

}

L'implementazione di questo compito in mq5 può essere ripetuta usando

MqlDateTime
 

Buongiorno e buon umore a tutti!

Cari esperti!!! Potreste dirmi cosa c'è di sbagliato in questo codice (in giallo è evidenziata la parte in cui compare periodicamente l'errore)?

//+------------------------------------------------------------------+
//|                                            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);
  }
//+------------------------------------------------------------------+

Perché periodicamente, poi funziona nello strategy tester, poi non funziona e nel log appare questo messaggio:


Saluti, Vladimir.

 
MrBrooklin #:

Buongiorno e buon umore a tutti!

Cari esperti!!! Vi prego di dirmi cosa c'è di sbagliato in questo codice (è evidenziata in giallo la parte di codice in cui compare periodicamente l'errore):

Perché periodicamente, poi funziona nello strategy tester, poi non funziona e nel log compare questo messaggio:


Saluti, Vladimir.

Mettere un controllo dopo la linea

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

se Dati < 1 qualcosa, in qualche modo grida.

 
Alexey Viktorov #:

Mettere un segno di spunta dopo la riga

se Dati < 1 qualcosa, grida in qualche modo.

Buongiorno Alexey, grazie per il suggerimento! Proverò subito.

Saluti, Vladimir.

 

Invece di:

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

L'ho inserito:

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

e tutto ha funzionato. Disegna lalinea in modo costante e come dovrebbe, ma solo ora ad ogni nuovo avvio dell'Expert Advisor nel tester della strategia appaiono periodicamente dei messaggi:

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

Questo, quindi, influirà in qualche modo negativamente sul codice o posso "dimenticarmene"?

Saluti, Vladimir.

 
MrBrooklin tester della strategia:

Questo influirà in qualche modo negativamente sul codice o posso "dimenticarmene"?

Saluti, Vladimir.

Cosa vi impedisce di fare questo

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

return true;
}
return false;
}