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

 
Andrey Sokolov:

Puoi dirmi cosa si intende nella voce

int i,limit=prev_calculated==0 ? rates_total-1 : rates_total-prev_calculated;

"==" , "?" , ": "

?

Документация по MQL5: Основы языка / Операторы / Условный оператор ?:
Документация по MQL5: Основы языка / Операторы / Условный оператор ?:
  • www.mql5.com
В качестве первого операнда – "выражение1" – может быть использовано любое выражение, результатом которого является значение типа bool. Если результат равен , то выполняется третий операнд – "выражениеЗ". Второй и третий операнды, то есть "выражение2" и "выражениеЗ", должны возвращать значения одного типа и не должны иметь тип void...
 
È semplicemente terribile! Se posso ancora rintracciare la logica negli Expert Advisors, correggere alcune cose, aggiungerne altre... Non capisco per niente il codice degli indicatori (vedi sopra).
 
prom18:

Grazie, Igor. Non l'ho detto correttamente. L'indicatore viene calcolato e disegnato per un numero specificato di barre (50 in questo caso) e in una finestra separata. Non ha bisogno del prezzo aperto ma della prima barra del giorno per indicare la MA. Ma comunque, grazie.

leggi SetIndexDrawBegin() - questa è una restrizione per disegnare il buffer dell'indicatore, mai usato

o nel mio esempio si può fare così:

input int BarCount = 50;
....

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 i,limit;
   static double dayopen=0.0;
   static int lastday=0;
   if(prev_calculated==0)
     {
      limit=rates_total-1;
      dayopen=0.0;
      lastday=0;
     }
   else limit=rates_total-prev_calculated;
   limit = fmin(BarCount,limit);
   for(i=limit; i>=0; i--)
     {
      if(TimeDay(time[i])!=lastday)
        {
         dayopen=open[i];
         lastday= TimeDay(time[i]);
        }
      Label1Buffer[i]=dayopen;
     }
   return(rates_total);
  }

cioè limitare il calcolo dei buffer degli indicatori all'impostazioneBarCount

 
Andrey Sokolov:

Puoi dirmi cosa si intende nella voce

int i,limit=prev_calculated==0 ? rates_total-1 : rates_total-prev_calculated;

"==" , "?" , ": "

?

https://docs.mql4.com/ru/basis/operators/ternary


Ho riscritto il mio esempio, nella prima versione non funzionava correttamente quando si cambiavano i TF, è necessario resettare dayopen e lastday, sono descritti con il modificatore static

Условный оператор ?: - Операторы - Основы языка - Справочник MQL4
Условный оператор ?: - Операторы - Основы языка - Справочник MQL4
  • docs.mql4.com
В качестве первого операнда – "выражение1" – может быть использовано любое выражение, результатом которого является значение типа bool. Если результат равен , то выполняется третий операнд – "выражениеЗ". Второй и третий операнды, то есть "выражение2" и "выражениеЗ", должны возвращать значения одного типа и не должны иметь тип void...
 
Artyom Trishkin:

Restituisce anche l'indice nel parametro della funzione passato per riferimento

Restituito:

doppio GetPatt5barsDN()
{
doppio low3 = 0;
int index = 0;
for(int i=1; i<20; i++)
{
se
((Close[i] > Open[i]) &&
(Close[i+1] > Open[i+1]) &&
(Close[i+2] > Open[i+2]) && //Low[i+2] è necessario su questa candela
(Close[i+3] < Open[i+3]) &&
(Close[i+4] < Open[i+4])

low3 = Low[i+2];
indice = i+2;
}

ritorno(low3);
ritorno(indice);
}


Cosa devo fare dopo?

 
Sfinks35:

Restituito:

doppio GetPatt5barsDN()
{
doppio low3 = 0;
int index = 0;
for(int i=1; i<20; i++)
{
se
((Close[i] > Open[i]) &&
(Close[i+1] > Open[i+1]) &&
(Close[i+2] > Open[i+2]) && //Low[i+2] è necessario su questa candela
(Close[i+3] < Open[i+3]) &&
(Close[i+4] < Open[i+4])

low3 = Low[i+2];
indice = i+2;
}

ritorno(low3);
ritorno(indice);
}


Cosa devo fare dopo?

Non c'è modo di recuperarlo.


Come questo.

int GetPatt5barsDN()
      {
       double low3 = 0;
       int index = 0;
       for(int i=1; i<20; i++)
          {
            if
            ((Close[i] > Open[i]) &&  
            (Close[i+1] > Open[i+1]) &&
            (Close[i+2] > Open[i+2]) && //На этой свече нужен Low[i+2]
            (Close[i+3] < Open[i+3]) &&  
            (Close[i+4] < Open[i+4]))
             
            low3 = Low[i+2];
            index = i+2;
          } 
           
          return(index);
      }


Ulteriori

double min = Low[GetPatt5barsDN()];
 
Sfinks35:

Restituito:

doppio GetPatt5barsDN()
{
doppio low3 = 0;
int index = 0;
for(int i=1; i<20; i++)
{
se
((Close[i] > Open[i]) &&
(Close[i+1] > Open[i+1]) &&
(Close[i+2] > Open[i+2]) && //Low[i+2] è necessario su questa candela
(Close[i+3] < Open[i+3]) &&
(Close[i+4] < Open[i+4])

low3 = Low[i+2];
indice = i+2;
}

ritorno(low3);
ritorno(indice);
}


Cosa devo fare dopo?

Dov'è il ritorno dell'indice tramite un parametro per riferimento?

E per favore inserite il codice correttamente:


 
C'è una funzione in MQL4 che può rilevare se una citazione è un 5 o 4 posti decimali, quanti posti decimali ha un asset per esempio EURJPY ha 2 posti decimali, EURUSD ha 4 posti decimali?
 
Seric29:
C'è una funzione in MQL4 che può identificare le quotazioni da un tipo di conto, come 5 o 4 cifre decimali, quali sono i modi per identificare quanti zeri ha un asset dopo la virgola per esempio EURJPY ha 2 cifre decimali, EURUSD ha 4 cifre decimali?

https://docs.mql4.com/ru/predefined/digitsvar

Digits - Предопределенные переменные - Справочник MQL4
Digits - Предопределенные переменные - Справочник MQL4
  • docs.mql4.com
Digits - Предопределенные переменные - Справочник MQL4
 
Artyom Trishkin:

Dov'è il ritorno dell'indice tramite un parametro per riferimento?

E per favore inserite il codice correttamente:


Buon pomeriggio!
Ora mi sembra di aver capito bene:
double GetPatt5barsDN(int &index)
      {
       double low3 = 0;
       for(int i=1; i<20; i++)
          {
            if
            ((Close[i] > Open[i]) &&  
            (Close[i+1] > Open[i+1]) &&
            (Close[i+2] > Open[i+2]) && //На этой свече нужен Low[i+2]
            (Close[i+3] < Open[i+3]) &&  
            (Close[i+4] < Open[i+4]))
             
            low3 = Low[i+2];
            index = i+2;
          }           
     return(low3);
     }

Ma alla compilazione genera un avvertimento: possibile perdita di dati a causa della conversione di tipo in linea:
indice = GetPatt5barsDN(indice);

double low3 = 0;
   int index = 0;
   low3 = GetPatt5barsDN(index);
   index = GetPatt5barsDN(index);
   Print("low3= ", low3);
   Print("index= ", index);

Non ci sono errori nell'intestazione della funzione (o nella funzione stessa) durante la compilazione.