[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 522

 

Salve di nuovo. Grazie per la risposta precedente - molto utile. Per favore, aiutatemi ancora. Ho la funzione di cui ho bisogno da un Expert Advisor che conta i profitti (perdite) del conto per oggi (se f0_5(0)), ieri (se f0_5(1)), ecc:

double f0_5(int ai_0) {
   double ld_ret_4 = 0;
   for (int pos_12 = 0; pos_12 < OrdersHistoryTotal(); pos_12++) {
      if (!(OrderSelect(pos_12, SELECT_BY_POS, MODE_HISTORY))) break;
               if (OrderCloseTime() >= iTime(OrderSymbol(), PERIOD_D1, ai_0) && OrderCloseTime() < iTime(OrderSymbol(), PERIOD_D1, ai_0) + 86400) ld_ret_4 = ld_ret_4 + OrderProfit() + OrderCommission() + OrderSwap();
   }
   return (ld_ret_4);
}

Il risultato dovrebbe essere una frazione decimale (presumibilmente), ma la funzione restituisce un intero per qualche motivo. In generale, per favore aiutatemi a cambiare la funzione in modo che sia una frazione con due decimali.

Anche se potrei aver fatto un casino qui: controllato usando Print(), ma la funzione in realtà conta normalmente? In generale, per favore aiutatemi a capire.

 
MaxZ:

Ecco il famoso idnikator.

Si può avere una foto come questa? :))))))



Ecco qui.

 
Ecco la pagina del libro di testohttps://docs.mql4.com/ru/array/ArrayCopy
Dice che:
ArrayCopy(array2,array1,0,Bars*6-60,60);
// теперь array2 содержит 10 последних баров из истории (имеется в виду, что последний бар - это текущий бар, бар с индексом [0])

Perché l'array2 dovrebbe contenere le ultime 10 barre?
Perché Bars*6 - 60 non restituirà il valore 10. Non noto alcuna logica.
Per esempio, ci sono 1000 barre nella storia. Allora Bars*6 - 60 = 1000*6 - 60 = 6000 - 60 = 5940. Dove sono le ultime 10 barre?
 
hoz:
Ecco la pagina del libro di testohttps://docs.mql4.com/ru/array/ArrayCopy
Dice che:

Perché l'array2 dovrebbe contenere le ultime 10 barre?
Perché Bars*6 - 60 non restituirà il valore 10. Non noto alcuna logica.
Per esempio, ci sono 1000 barre nella storia. Allora Bars*6 - 60 = 1000*6 - 60 = 6000 - 60 = 5940. Dove sono le ultime 10 barre?

Mi sorprendi di nuovo! I cosiddetti ultimi 10, da 0 alla decima barra che abbiamo sul grafico in contatto con il prezzo! Dimenticate la trentesima e la cinquemillesima battuta della storia! Li abbiamo già passati, e ci servono solo per il tester. E abbiamo bisogno degli ultimi, partendo da zero, e naturalmente dei nuovi in futuro - è lì che stiamo andando! ;))
 
borilunad:

Mi sorprendi di nuovo! I cosiddetti ultimi 10, da 0 alla decima barra che abbiamo sul grafico in contatto con il prezzo! Dimenticate la trentesima e la cinquemillesima battuta della storia! Li abbiamo già passati, e ci servono solo per il tester. E abbiamo bisogno di quelli più recenti, partendo da zero, e naturalmente di quelli nuovi in futuro - è lì che stiamo andando! ;))

Quest'ultimo cioè più vicino al prezzo attuale l'ho già capito. Ma questo pezzo di codiceBars*6 - 60 non lo capisco. Che cosa restituirà? Voglio capire come può essere calcolato logicamente. Posso chiederle di spiegare? Forse è facile per qualcuno, ma io non sono un programmatore di formazione, quindi faccio fatica a capire questo flusso di informazioni. Sto leggendo il tutorial e sto gradualmente ponendo le domande che mi vengono in mente. Spero vivamente che le domande siano presto più rilevanti di quanto lo siano ora.
 
hoz:
Ecco la pagina del libro di testohttps://docs.mql4.com/ru/array/ArrayCopy
Dice che:
Perché l'array2 dovrebbe contenere le ultime 10 barre?
Perché Bars*6 - 60 non restituirà il valore 10. Non noto alcuna logica.
Per esempio, ci sono 1000 barre nella storia. Allora Bars*6 - 60 = 1000*6 - 60 = 6000 - 60 = 5940. Dove sono le ultime 10 barre?
5940 -Indice iniziale dell'array originale per copiare le ultime 10 barre (bar - 6 indici).
 

Roll:
5940 -L'indice iniziale dell'array iniziale per copiare le ultime 10 barre (bar - 6 indici).

Cari esperti, non c'è un errore nel libro di testo?

Ecco il mio ragionamento:

All'inizio del codice viene chiamata la funzioneint ArrayCopyRates che copia i dati delle barre del grafico corrente in un array bidimensionale di tipo RateInfo[][6] e restituisce il numero di barre copiate o -1 in caso di fallimento secondo l'esempio di questa funzione:

double array1[][6];
ArrayCopyRates(array1,"EURUSD", PERIOD_H1);
Print("Текущий бар ",TimeToStr(array1[0][0]),"цена открытия ", array1[0][1]);

la barra corrente è la barra con indice 0-0 , quindi, tornando al codice originale, copiamo l'elemento con indice 0-0 (la barra corrente) dell'array1, a array2 con indice 0-0, otteniamo le ultime 10 barre (dove l'ultima barra è quella corrente, quella con indice [0]), il che è contrario a quanto abbiamo scritto nel tutorial... quindi copiando l'elemento con indice Bars*6-60,60 dell'array1 nell'array2 con indice 0 otteniamo informazioni sulle barre dalla storia.

 

Salve.

Ho un indicatore personalizzato.

Sto scrivendo un EA... e ho una domanda... come accedere al mio indicatore? In particolare, prendere i dati dalla barra specificata (nel mio caso, ho bisogno di prendere la 2a barra). Ho windowsPriceMax, ma per quanto ho capito, visualizza solo l'ultimo valore del grafico della sottofinestra e non è chiaro, se per esempio ho 3 linee sull'indicatore, cosa visualizzerà?

 
Tragedy:

Salve.

Ho un indicatore personalizzato.

Sto scrivendo un EA... e ho una domanda... come accedere al mio indicatore? In particolare, prendere i dati dalla barra specificata (nel mio caso, ho bisogno di prendere la 2a barra). Ho ricevuto windowsPriceMax, ma per quanto ho capito, emette solo l'ultimo valore del grafico e non capisco se ho 3 linee sull'indicatore, cosa emette?



double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)

Calcolo dell'indicatore personalizzato specificato. L'indicatore personalizzato deve essere compilato (un file con estensione EX4) e situato in terminal_directory\experts\indicators.
Parametri:

symbol - nome del simbolo dello strumento, sui cui dati verrà calcolato l'indicatore. NULL significa il simbolo corrente.
timeframe - Periodo. Può essere uno dei periodi del grafico. 0 significa periodo del grafico corrente.
name - Nome dell'indicatore personalizzato.
... - Elenco dei parametri (se necessario). I parametri passati dovrebbero corrispondere all'ordine di dichiarazione e al tipo di variabili esterne (extern) dell'indicatore personalizzato.
mode - Indice della linea dell'indicatore. Può essere da 0 a 7 e deve corrispondere all'indice utilizzato da una delle funzioni SetIndexBuffer.
shift - Indice del valore ricevuto dal buffer dell'indicatore (spostamento relativo alla barra corrente del numero specificato di periodi indietro).

 

Grazie. Questo ha aiutato. Pensavo che fossero solo gli indicatori iMac*** iStoch*** ad essere preinstallati.

Motivazione: