Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1253

 
Vladimir Karputov:

L'ottimizzazione è fatta da AGENTI (nel vostro caso, AGENTI LOCALI).

Per visualizzare i log dell'agente locale: fare clic con il tasto destro del mouse sulla scheda Log e andare alla cartella dell'agente

Questo è il punto, non ci sono errori. Tutto è a posto, forse c'è un firewall o qualcosa del genere.

File:
 
Aleksandr Dziuba:

Questo è il punto, non ci sono errori. Tutto conta, forse ci sono dei firewall o qualcosa del genere?

Eseguire un solo test, un solo passaggio. Non l'ottimizzazione, solo un singolo passaggio. In questo modo potrai vedere il registro.

 
Vladimir Karputov:

Eseguire un solo test - un solo passaggio. Non l'ottimizzazione, ma un singolo passaggio. In questo modo puoi vedere il registro con certezza.

Cosa intendi per "visivo"? Bene, ho il registro. Non ci vedo niente di male. I parametri sono tutti passati. Anche ha funzionato, ma l'uscita è ancora 20.000.

File:
20200924.log  17 kb
 
Aleksandr Dziuba:

Cosa intendi per "visivo"? Bene, ho il registro. Non ci vedo niente di male. I parametri sono tutti passati. Anche questo è stato eseguito, ma l'output Balance era 20000 e lo è ancora.

Quindi, cambiate il codice in modo che diamessaggi di errore quando ci sono errori o se l'operazione di scambio non può essere eseguita. O in generale, il codice è sbagliato e non dà segnali. I miracoli non accadono.

Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Импортируемая функция не может иметь такого параметра (нельзя передавать указатель, класс или структуру, содержащую динамический массив, указатель, класс и т.д.) Недопустимый возвращаемый тип. Например, такая ошибка будет выдана для функций, импортированных из...
 
Vladimir Karputov:

Quindi cambiate il codice in modo che diamessaggi di errore quando si verificano errori o se il trade non può essere eseguito. O se il codice è difettoso e non dà alcun segnale. Non ci sono miracoli.

Sì...

Quindi, l'ottimizzazione non è inclusa in Ontick. OnInit viene elaborato. Ma On-Tick non viene generato. Ecco il problema.

Ho integrato i punti Print ( ) negli input e negli output, ma solo Init viene scritto nel log.

P.S.

Gestisco gli errori. Forza dell'abitudine. Scrivo programmi dal 1987.

 
Aleksandr Dziuba:

Sì...

In generale, l'ottimizzazione non è inclusa in Ontick. OnInit viene elaborato. Ma On Tick non viene generato. Ecco il problema.

Ho integrato i punti di stampa ( ) negli ingressi e nelle uscite, ma solo Init viene scritto nel log.

P.S.

Gestisco gli errori. Forza dell'abitudine. Scrivo programmi dal 1987.

Solo i telepati potranno aiutare senza il codice - e ora tutti i telepati sono in vacanza perché è un peccato.

 
Vladimir Karputov:

Senza il codice, solo i telepati possono aiutare - e ora, per fortuna, tutti i telepati sono in vacanza.

Ho trovato la ragione. Per qualche motivo, gli indicatori non vengono ricalcolati in Ontick (non dà il numero di barre ricalcolate). Forse devo aggiornare le citazioni.

Ho comunque perso i miei ringraziamenti. Sono diventato più intelligente. Ho imparato dove sono scritti i registri.

 

Convertito un semplice indicatore da MQL4 -> MQL5, ma nessun segnale sulle ultime barre. Per favore, aiutatemi a trovare la ragione. Il codice sorgente e il risultato sono in allegato. Incollerò qui anche quello convertito.

#property indicator_chart_window
#property indicator_plots   4
#property indicator_buffers 4
#property indicator_color1 PaleVioletRed
#property indicator_color2 DeepSkyBlue
#property indicator_color3 Red
#property indicator_color4 LimeGreen

input int  dist2           = 21;       // Distance#2
input int  dist1           = 14;       // Distance#1

double b1[];
double b2[];
double b3[];
double b4[];

int    handle_atr;
int    min_rates_total;
double atr[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit() {

   SetIndexBuffer(0,b1,INDICATOR_DATA);
   SetIndexBuffer(1,b2,INDICATOR_DATA);
   SetIndexBuffer(2,b3,INDICATOR_DATA);
   SetIndexBuffer(3,b4,INDICATOR_DATA);
   
   ArraySetAsSeries(b1,true);
   ArraySetAsSeries(b2,true);
   ArraySetAsSeries(b3,true);
   ArraySetAsSeries(b4,true);

   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);
   PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_LINE);
   PlotIndexSetInteger(2,PLOT_DRAW_TYPE,DRAW_ARROW);
   PlotIndexSetInteger(3,PLOT_DRAW_TYPE,DRAW_ARROW);

      PlotIndexSetInteger(2,PLOT_ARROW,159);
      PlotIndexSetInteger(3,PLOT_ARROW,159);
   
   ResetLastError();
   handle_atr = iATR(NULL,PERIOD_CURRENT,50);
   if(handle_atr==INVALID_HANDLE) {
      Print("   ***   ATR handle was unable to create. Error ",GetLastError());
      return INIT_FAILED;
   }

   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   
   PlotIndexSetString(0,PLOT_LABEL,"SuperSignals Upper");
   PlotIndexSetString(1,PLOT_LABEL,"SuperSignals Lower");
   PlotIndexSetString(2,PLOT_LABEL,"SuperSignals Sell");
   PlotIndexSetString(3,PLOT_LABEL,"SuperSignals Buy");

        return INIT_SUCCEEDED;
   
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &High[],
                const double &Low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[]) {
                
   int counted_bars=prev_calculated;
   int i,limit;
   
   ArraySetAsSeries(Low,true);
   ArraySetAsSeries(High,true);

   if(counted_bars<0) return 0;
   if(counted_bars>0) counted_bars--;
           limit=rates_total-counted_bars;
           limit=MathMax(limit,dist1);
           limit=MathMax(limit,dist2);

   for (i = limit-1; i >= 0; i--) {
         int hhb1 = ArrayMaximum(High,i-dist1/2,dist1);
         int llb1 = ArrayMinimum(Low, i-dist1/2,dist1);
         int hhb  = ArrayMaximum(High,MathMax(0,i-dist2/2),dist2);
         int llb  = ArrayMinimum(Low, MathMax(0,i-dist2/2),dist2);

            b1[i] = EMPTY_VALUE;
            b2[i] = EMPTY_VALUE;
            b3[i] = EMPTY_VALUE;
            b4[i] = EMPTY_VALUE;
         
         ArraySetAsSeries(atr,true);
         int copied=CopyBuffer(handle_atr,0,0,limit,atr);
         if (copied<=0) Print("   ***   ATR failed to copy.");
         double tr = atr[i];

                      b1[i] = High[hhb];
                      b2[i] = Low[llb];
         if (i==hhb1) b3[i] = High[hhb1]+tr/2;
         if (i==llb1) b4[i] = Low[llb1] -tr/2;
    }
   
   return rates_total;
}
//+------------------------------------------------------------------+

Il risultato.


 
Grigori.S.B:

Convertito un semplice indicatore da MQL4 -> MQL5, ma nessun segnale sulle ultime barre. Per favore, aiutatemi a trovare la ragione. Il codice sorgente e il risultato sono in allegato. Incollo qui anche quello convertito.

Il risultato.


Il colpevole potrebbe essere qualcosa che non è stato fatto logicamente tra le piattaforme

Si prega di prestare attenzione ai diversi parametri di input

MT4

ArrayMaximum
Ищет в одномерном числовом массиве максимальный элемент.

int  ArrayMaximum(
   const void&   array[],             // массив для поиска
   int           count=WHOLE_ARRAY,   // количество проверяемых
   int           start=0              // с какого индекса начинаем поиск
   );

MT5

ArrayMaximum
Ищет максимальный элемент в первом измерении многомерного числового массива.

int  ArrayMaximum(
   const void&   array[],             // массив для поиска
   int           start=0,             // с какого индекса начинаем поиск
   int           count=WHOLE_ARRAY    // количество проверяемых
   );
 
Vitaly Muzichenko:

Più o meno il colpevole potrebbe essere qualcosa di non logicamente fatto tra le piattaforme

Notate i diversi parametri di input

MT4

MT5

Grazie Vitaliy.

L'ordine delle variabili in questo posto è corretto. Le ho scambiate durante la conversione. Anche le funzioni iHighest / iLowest erano in MQL4.

Questa è un'altra cosa. Mi sono già scervellato.

Motivazione: