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

 
artmedia70:

Non funziona ancora... ed esattamente AC

cattura nel registro, forse il ricalcolo non è corretto e la condizione non funzionerà mai, come AC1 = 0 e AC2 = 0 e non ci sarà mai 0 > 0

print(AC1,AC2) ;
if (BB>0 && OsMA>0 && AC1>AC2) return(1);

 
IgorM:

cattura nel log, forse il ricalcolo è sbagliato e la condizione non sarà mai soddisfatta, come AC1 = 0 e AC2 = 0 e mai 0 > 0

stampa(AC1,AC2) ;
se (BB>0 && OsMA>0 && AC1>AC2) return(1);

sotto:

altrimenti return(0);

 

Grazie, Igor. Credo che il cane sia sepolto lì... :)

Ho Comment() che produce lo stesso AC1 e AC2 = 0,01, anche se nella finestra dei dati hanno AC1=0,001008, AC2=0,001020.
Come posso aumentare la capacità delle cifre? Beh, a parte una banale moltiplicazione per 1000, o proprio così?

 
IgorM:

Sì, quindi proverò fino al primo picco e poi ........ - Non riesco a capirlo.


Fatto. Ecco il risultato del suo lavoro.

Il codice non è troppo complicato, quindi non dovreste avere problemi a riorganizzarlo secondo le vostre esigenze.

Lo script è allegato al post.

File:
0.mq4  4 kb
 

Una tale voce è corretta:

double AC1=NormalizeDouble(iAC(sy,tf,1),8);
 
artmedia70:

Finora non funziona... ed è l'AC.

L'unica via d'uscita è scoprire esattamente quali valori sono nelle variabili - questo ci mostrerà perché la condizione programmata non funziona.

Se l'arrotondamento è automatico fino a 0,01, allora molto probabilmente il test passa su uno strumento come UsdJpy. Poi c'è un'opzione per lavorare attraverso variabili stringa (se avete davvero bisogno di un decimale così lontano)

 
drknn:
L'unica via d'uscita è scoprire esattamente quali valori sono nelle variabili - questo ci mostrerà perché la condizione programmata non funziona.
Grazie Vladimir, ho trovato la ragione. La domanda sopra due post...
 
drknn:


Fatto. Ecco il risultato del suo lavoro.


Grazie, è ok - funziona, solo che non riuscivo a capire come inserire il flag di tendenza - pensavo fosse come ordinare un array
 
artmedia70:

Una tale voce è corretta:


Corretto, perché il primo parametro restituisce un numero e il secondo parametro è un valore intero entro limiti accettabili. L'intera questione è cosa esattamente andrà nella variabile. Prova a stampare così com'è e prova questa costruzione:

double AC1=NormalizeDouble(iAC(sy,tf,1),8);
string str=AC1;
Print("str = ",str);
 
IgorM:

Grazie, è ok - funziona, solo che non riuscivo a capire come inserire il flag di tendenza - pensavo di dover ordinare l'array


Il problema di lavorare con gli array è che non appena la funzione incontra un valore che le viene dato, restituisce il numero della cella in cui questo valore è memorizzato. E il fatto che questo valore possa essere trovato in altre celle dell'array è proprio la parte difficile. Quindi dobbiamo continuare a iterare, continuare a passare attraverso i valori fino a quando non abbiamo attraversato tutto l'array. E non appena troviamo il valore giusto, mettiamo l'indice della cella in una matrice creata in precedenza, o cuciamo insieme le righe.

La complessità del tuo problema è che devi cercare i picchi e le depressioni. Per trovarlo, è necessario saltare l'estremo e solo allora il codice si renderà conto di averlo effettivamente saltato. Ecco perché dobbiamo tornare indietro di un passo per ricordare il punto di estremo e la cella in cui si trova.

Motivazione: