Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 699

 
Dmitry Belov:

Ciao, potresti dirmi perché ZigD[0] non viene emesso in sommente?

ZigM[0] funziona?

 
Alexey Viktorov:

ZigM[0] ha un'uscita?

Sì, è così...


	          
 
Dmitry Belov:

Sì, è così...

Scusa, non ho guardato attentamente il codice...

Quando zzz>0 significa che il valore può essere uguale alla barra alta o bassa. Rispettivamente questo valore dovrebbe essere controllato contro questi valori e a seconda del risultato messo in uno o nell'altro array.

 
Alexey Viktorov:

Scusa, non ho guardato attentamente il codice...

Quando zzz>0, significa che il valore può essere uguale alla barra alta o bassa. Di conseguenza, questo valore dovrebbe essere controllato con questi valori e a seconda del risultato messo in uno o nell'altro array.

Lo faccio, ma per qualche motivo non fa uscire ZigD[] e non esce affatto se aggiungo ZigD, se lo commento, esce tutto.

//+------------------------------------------------------------------+
//|                                                           01.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window

#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_width1 1

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
extern int nn=30;

int  ww=0, kk=0;
int dd=0;
double zz,SredRazmax, zzz;
double HZZ[], ZigM[];
int ZigD[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,HZZ);
   SetIndexBuffer(1,ZigM);
   SetIndexStyle(0,DRAW_SECTION);
   SetIndexEmptyValue(0,0.0);
   SredRazmax=0.0;
//---
   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 shift,limit;
//--- Первый вызов индикатора или смена таймфрейма или подгрузка данных из истории
   if(prev_calculated==0)
     {
      limit=rates_total-1;
      SredRazmax=0.0;
      ArrayInitialize(HZZ,0.0);
     }
   else limit=rates_total-prev_calculated+1;
   for(shift=limit; shift>=0; shift--)
     {
      zz=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,shift);
      if(zz>0.0)
        {
         HZZ[shift]=zz;
        }
     }
     for(ww = 0; ww <= Bars-1; ww++)
  {
      zzz = iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, ww);
      
           if(zzz > 0.0)   
           {
           ZigM[kk]=zzz;
            kk++; 
           ZigD[dd]=ww;
            dd++;  
            }
   }       
   
   // Расчет средних значений 
     for(kk=0;kk<=nn;kk++)
     {
        if(ZigM[kk]>ZigM[kk+1]){SredRazmax+=(ZigM[kk]-ZigM[kk+1]);}
        if(ZigM[kk]<ZigM[kk+1]){SredRazmax+=(ZigM[kk]-ZigM[kk+1])*(-1);}
     if(IsStopped()) 
     break; 
     }
    Comment("Средний размах = ",SredRazmax/nn,",",ZigM[0],",",ZigM[1]);
    Comment(ZigD[0]);
   return(0);
  }
  //+-  
 

Ciao gente!

Non potevo trovare una "finestra" più adatta per affrontare una domanda su MT4.

Quando si apre il terminale, la "linea di stato", "standard", "grafici","strumenti grafici" e"periodi del grafico" scompaiono improvvisamente. Lo spengo e la prossima volta che lo riapro ottengo un terminale vuoto, solo il grafico attuale.

Non ho mai visto un bug del genere e non so cosa fare. Per favore, consigliatemi. Non so cosa fare.

 
Vadens:

Ciao gente!

Non potevo trovare una "finestra" più adatta per affrontare una domanda su MT4.

Quando si apre il terminale, la "linea di stato", "standard", "grafici","strumenti grafici" e"periodi del grafico" scompaiono improvvisamente. Lo spengo e la prossima volta che lo riapro ottengo un terminale vuoto, solo il grafico attuale.

Non ho mai visto un bug del genere e non so cosa fare. Per favore, consigliatemi. Non so cosa fare.

Sembra che tu abbia un problema con i permessi di scrittura nella directory dove si trova il terminale. Se stai funzionando come utente limitato, sposta il terminale in una directory dove puoi accedere a file/cartelle.

 
Vadens:

Ciao gente!

Non potevo trovare una "finestra" più adatta per affrontare una domanda su MT4.

Quando si apre il terminale, la "linea di stato", "standard", "grafici","strumenti grafici" e"periodi del grafico" scompaiono improvvisamente. Lo spengo e la prossima volta che lo riapro ottengo un terminale vuoto, solo il grafico attuale.

Non ho mai visto un bug del genere e non so cosa fare. Per favore, consigliatemi. Non so cosa fare.

Avete la modalità a schermo intero (F11)
 
Dmitry Belov:

Lo faccio, ma per qualche motivo non emette ZigD[] e non emette affatto se aggiungo ZigD, se lo commento, emette tutto

Di nuovo, la mia disattenzione...

Spero che ora sarà diverso :)))

Il commento non lampeggia? È meglio scriverlo così

    Comment("Средний размах = ",SredRazmax/nn,",",ZigM[0],",",ZigM[1],"\n" // Это перенос комментария на следующую строку
           , ZigD[0]);
 
Alexey Viktorov:

Ancora una volta, la mia disattenzione...

Spero che ora sarà diverso :)))

Il commento non lampeggia? È meglio scriverlo così.

Grazie, l'ho già capito da solo, avevo solo bisogno di inizializzare l'array come doppio e ha funzionato. Ecco il codice dell'indicatore se volete, ma è ancora grezzo, ho altre idee... Dimmi, sai come puoi visualizzare un sommento nell'angolo in basso a sinistra o al centro in alto?

//+------------------------------------------------------------------+
//|                                                           01.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window

#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_width1 1

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
extern int nn=30;

int  ww=0, kk=0;
int dd=0;
double zz,SredRazmax, zzz, SredDlin;
double HZZ[], ZigM[];
double ZigD[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,HZZ);
   SetIndexBuffer(1,ZigM);
   SetIndexBuffer(2,ZigD);
   SetIndexStyle(0,DRAW_SECTION);
   SetIndexEmptyValue(0,0.0);
   SredRazmax=0.0;
   SredDlin=0.0;
//---
   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 shift,limit;
//--- Первый вызов индикатора или смена таймфрейма или подгрузка данных из истории
   if(prev_calculated==0)
     {
      limit=rates_total-1;
      SredRazmax=0.0;
      ArrayInitialize(HZZ,0.0);
     }
   else limit=rates_total-prev_calculated+1;
   for(shift=limit; shift>=0; shift--)
     {
      zz=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,shift);
      if(zz>0.0)
        {
         HZZ[shift]=zz;
        }
     }
     for(ww = 0; ww <= Bars-1; ww++)
  {
      zzz = iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, ww);
      
           if(zzz > 0.0)   
           {
           ZigM[kk]=zzz;
            kk++; 
           ZigD[dd]=ww;
            dd++;  
            }
   }       
   
   // Расчет средних значений 
     for(kk=0;kk<=nn;kk++)
     {
        if(ZigM[kk]>ZigM[kk+1]){SredRazmax+=(ZigM[kk]-ZigM[kk+1]);}
        if(ZigM[kk]<ZigM[kk+1]){SredRazmax+=(ZigM[kk]-ZigM[kk+1])*(-1);}
   //  if(IsStopped()) 
  //   break; 
     }
     for(dd=0;dd<=nn;dd++)
     {
        if(ZigD[dd]>0.0){SredDlin+=(ZigD[dd+1]-ZigD[dd]);}
        if(IsStopped()) 
     break;
     } 
    Comment("Средний размах = ",SredRazmax/nn,"//","Средняя продолжительность = ",SredDlin/nn,"//",ZigM[0],"//",ZigM[1],"//",ZigD[0],"//",ZigD[1]);
    return(0);
  }
  //+-  
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Машинное обучение в трейдинге: теория и практика...
 
Dmitry Belov:

Grazie, sono riuscito a capirlo da solo, avevo solo bisogno di inizializzare l'array come doppio e tutto ha funzionato. Ecco il codice dell'indicatore se vuoi, ma è ancora grezzo, ci sono altre idee... Dimmi, sai come puoi visualizzare il sommento nell'angolo in basso a sinistra o al centro in alto?

Non è possibile. Solo se si usa l'oggetto grafico OBJ_LABEL