[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 321

 
hoz:

https://www.mql5.com/ru/forum/144705 Qui, ho iniziato un thread separato. Ha tutti i dettagli di ciò che è necessario.


Sì, è più divertente con la sorgente completa. Immediatamente visibile, cosa da dove e dove passa, cosa diavolo e quante volte. Beh, questo è ciò che ha immediatamente attirato la mia attenzione:

hoz:
int GetStateOfMA()
{
   if (GetMA(1) > GetMA(2))
   {
       pr ("GetStateOfMA() = CROSS_UP");
       return (CROSS_UP);
   }
       
   if (GetMA(1) < GetMA(2))
   {
       pr ("GetStateOfMA() = CROSS_DN");
       return (CROSS_DN);
   }
       
    pr ("GetStateOfMA() = CROSS_NO");
    return (CROSS_NO);
}

Si può semplificare praticamente ad una sola riga:

int GetStateOfMA(){
   if(GetMa(2)==GetMa(1)) return(0); else return(MathAbs(GetMA(2)-GetMA(1))/(GetMA(2)-GetMA(1)));
}

Qui restituiamo zero o il segno della differenza (più o meno). Vedi: il modulo di un numero diviso per il numero stesso è praticamente lo stesso che dividere un numero per un numero, cioè uno, solo che se il numero era negativo, naturalmente viene restituito meno uno.

Capire di più.

 
gyfto:


Sì, è più divertente con la sorgente completa. Immediatamente visibile, cosa da dove e dove passa, cosa diavolo e quante volte. Beh, questo è ciò che ha immediatamente attirato la mia attenzione:

può essere semplificato a quasi una riga:

Qui restituiamo zero o il segno della differenza dei valori (più o meno). Vedi: il modulo di un numero diviso per il numero stesso è quasi lo stesso che dividere un numero per un numero, cioè uno, solo che se il numero era negativo, naturalmente viene restituito meno uno.

Capire di più.


Come si confrontano facilmente due numeri reali
 
gyfto:


Sì, è più divertente con la sorgente completa. Si può vedere a colpo d'occhio cosa è passato da dove e dove, che diavolo e quante volte. Beh, questo è ciò che ha immediatamente attirato la mia attenzione:

può essere semplificato a quasi una riga:

Qui restituiamo zero o il segno della differenza dei valori (più o meno). Vedi: il modulo di un numero diviso per il numero stesso è quasi lo stesso che dividere un numero per un numero, cioè uno, solo che se il numero era negativo, naturalmente viene restituito meno uno.

Indagherò ulteriormente.

Sì, ha senso. Ma perché devo fare tutta questa fatica? :)gyfto, vedo che tu, tra l'altro, come me, tendi a universalizzare tutto. Direi di più. Qui si può aggiungere una variabile per la dimensione della deviazione, e quindi filtrare i piccoli incroci delle medie. È più o meno tutto comprensibile, ma la leggibilità non sarà particolarmente comoda. Dopo tutto, il valore della funzione dovrà essere confrontato con 0. Come <0 o >0.

Vinin:

Come si confrontano facilmente due numeri reali.

Beh, se non siamo interessati alla variante, cosa ci ferma? Dove è stipulato questo?
 
Vinin:

Come si confrontano facilmente due numeri reali

Vuoi dire che il doppio diviso per il doppio sarà ancora doppio, e il ritorno può restituire solo int? Bene, potete definire localmente int temp; e assegnare ad esso, e return(temp);
 
gyfto:

Nel senso che doppio divide per doppio sarà ancora doppio, e return può solo restituire int? Bene, potete definire localmente int temp; e assegnare ad esso, e return(temp);
Due numeri in virgola mobile ottenuti dopo il calcolo non saranno quasi mai uguali. O piuttosto, più spesso non saranno uguali, quando si pensa che dovrebbero essere uguali.
 
gyfto:

e return può restituire solo int?

No. Puoi restituire quello che vuoi. Non necessariamente int. Dopo tutto, se la funzione è di tipo double, come farete a restituire int da essa?
Non fa alcuna differenza in linea di principio, l'importante è tornare da una funzione di un certo tipo, lo stesso ritorno. Questo è il modo in cui lo capisco.

Zhunko:
Due numeri in virgola mobile ottenuti dopo il calcolo non sono quasi mai uguali. O piuttosto, più spesso non saranno uguali, quando si pensa che dovrebbero essere uguali.

Quindi devi impostare costantemente qualche variabile dist per confrontare la differenza tra i mashup che stai confrontando? Intendo come:

extern dist = 0.1 // Расстояние между сравниваемыми машками.
//---------------------------
GetMA(2) - GetMA(1) >= dist;
 
hoz:

una tendenza a rendere tutto universale.


No, secondo la mia psicologia, come mi analizzo, è più un desiderio di fare un programma per le persone, non solo per me stesso.

hoz:

Perché essere così contorti?


Probabilmente non mi crederete, ma è una mancanza di istruzione. Mi dispiace. Il fatto è che quando ho lasciato la scuola (6a elementare), i ragazzi di quell'età hanno ancora una vivida curiosità infantile, una sete di conoscenza. Poi, al liceo, il sistema scolastico uccide tutto questo. Ora ho trent'anni, ma ho ancora quella vivace curiosità e non sono ancora consapevole di quelle restrizioni condizionali, non sono consapevole di ciò che è "magra" e ciò che è "perversa", perché per me è tutto "magra". Scusa...

hoz:
Zhunko:
Due numeri in virgola mobile, ottenuti dopo il calcolo, non saranno quasi mai uguali. O piuttosto, più spesso non saranno uguali, quando si pensa che dovrebbero esserlo.


Quindi è necessario impostare costantemente un qualche tipo di variabiledist per confrontare la differenza tra i mashup confrontati? Intendo come:

extern dist = 0.1 // Расстояние между сравниваемыми машками.
//---------------------------
GetMA(2) - GetMA(1) >= dist;
Sì, è vero, è logico.
 
gyfto:

Probabilmente non mi crederete, ma è la mancanza di istruzione che viene fuori. Mi dispiace. Il fatto è che quando ho lasciato la scuola (6° elementare), i bambini di quell'età hanno ancora una vivida curiosità infantile, una sete di conoscenza. Poi, al liceo, il sistema scolastico uccide tutto questo. Ora ho trent'anni, ma ho ancora quella vivace curiosità e non sono ancora consapevole di quelle restrizioni condizionali, non sono consapevole di ciò che è "magra" e ciò che è "perversa", perché per me è tutto "magra". Scusa...


In effetti, sono abbastanza istruito, ma ho insegnato solo ciò di cui avevo bisogno, ignorando puramente il resto. Si è scoperto che non ero interessato a molte cose e mi sono allontanato da quelle banali (storia, geografia, ecc.). Io non la penso così, non come altri. Ma il suo approccio è davvero particolare. Ho subito pensato che la sua educazione non è carente, ma al contrario, è qualcosa del genere. Perché non ho capito subito tutto dalle analisi di cui sopra.
 
hoz:
L'approccio è particolare.


Mi spiego in altre parole: è autodidatta, io sono stato autodidatta per tutta la vita, quindi NON so quale approccio avete adottato. NON so cosa sia accettato da voi e cosa no.

Ok, torniamo alle candele. Supponiamo di avere i_AnyBarsToHistory = 30, i_ѕеqceptBarsConnt = 3. Se in una finestra di 30 candele cntUp == i_ѕеԛceptBarsCount e cntDn == i_ѕеԛceptBarsCount una volta, allora cosa dovrebbe succedere? O conta sempre un solo contatore per passaggio?

Sì, e perché usciamo prematuramente dal ciclo prima di raggiungere Close[1].

 

Aiuto, non riesco a capire come fare un indicatore che confronti un dato numero di barre recenti e calcoli quante di esse erano in rialzo, quante erano in ribasso e quante erano pinbar e chi aveva quali prezzi di chiusura/apertura, alti/bassi e volumi?

Dobbiamo farlo specificamente nell'indicatore.