[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 175

 
alsu:

No, da quella variabile che avevo prima del ciclo. Scrivere

è identico a

   int cnt,i;
for (cnt = 0, i = index + g_center - 1; i >= 0 && cnt < g_center; i--) 

Ora ho capito. Grazie. Stavo cercando... non c'era nessun punto di riferimento. Ora è 0.


Beh, per esempio, l'indice è passato come 1. Guardiamo questo pezzo di codice:

 int cnt = 0, i = index + g_center - 1;
   for (; i >= 0 && cnt < g_center; i--)           // Справа от центрального бара должно
   {                                               // ..быть g_center-1 баров с большим..
      if (centerLow >= Low[i])                     // ..минимумом. Не позволяется..
         return (false);                           // ..наличие баров с меньшим или..
      cnt++;                                       // .. равным минимумом
   }
   

immediatamente all'arrivo sarà:cnt = 0, i = indice + g_center - 1 = 1(valore indice) +2(valoreg_center) - 1 = 2

Ma secondo la condizione del ciclo, continuerà fino a quando i sarà uguale a 0. Come accadrà questo?

La condizione dice che se i ha un valore da 2 (se indice = 1), a i >= 0 ecnt ha da 0, acnt < g_center, allora le condizioni annidate sono soddisfatte.

Risulta che se la variabile qui è 1, allora avremo solo 1 iterazione nel ciclo, giusto?

 
alsu:

Spiegare il concetto di "limitato a 0 bar".
In altre parole ho bisogno di disegnare una linea (non un raggio) attraverso 2 frattali, ma deve finire su 0 bar
 
beginner:
In altre parole ho bisogno di disegnare una linea (non un raggio) attraverso 2 frattali, ma dovrebbe finire su 0 bar


L'algoritmo è il seguente:

1. Che le coordinate frattali siano (i1; p1) e (i2; p2), dove i1<i2 (cioè il 1° frattale è più vicino a 0 bar del 2°)

2. Equazione della linea che passa attraverso questi frattali p = (p1-p2)/(i1-i2) * i + (p2*i1 - p1*i2)/(i1-i2)

3. Quindi, dobbiamo disegnare un segmento con le seguenti coordinate finali: (0; (p2*i1 - p1*i2)/(i1-i2)) e (i2;p2)

4. ObjectCreate(...)

5. ???

6. Profitto!!!

 
Vinin:

Dovrebbe funzionare al primo tick del nuovo giorno.

Grazie per la risposta! Vero, non ha mai funzionato fino a quando ho inserito all'inizio dell'inizio dell'indicatore

if(Hour() == 0 && Minute() == 0 && Seconds() == 0) { DeleteObject() ecc.

}

if(Hour() >= 0 && Minute() >= 0 && Seconds() >= 1) { codice indicatore ...

Recentemente non funziona neanche con questo! Non so cosa fare. Cosa può consigliare? Grazie!

Sono riuscito a scriverlo solo ora, sabato lavoro per vivere.

 
hoz:


Boris, è molto buono, comunque! Grazie mille. Questo è quello che volevo. Ho contorto... ho contorto... Non ho capito bene. Non ho ancora molta esperienza e il mio cervello non pensa come un professionista. È un po' un vicolo cieco, vero? :(

Non volevo chiedere subito, ma dovevo farlo. Perché non sono riuscito a fare il taglio da solo.

Sono contento che ti sia stato utile! Io stesso, come te, ho iniziato 2 anni fa, ma fin dall'infanzia sono abituato a venire sempre a tutto da solo, perché la conoscenza da suggerimenti non può formare un sistema. E lo chiedo solo quando è assolutamente necessario, quando ho già fatto tutto, cercato ovunque e non l'ho ottenuto. Molti nuovi arrivati qui vogliono saldare e pompare rapidamente la pasta. L'esperienza insegnerà loro. Ti ho già detto che è meglio fare qualcosa di semplice, che ti è chiaro, che qualcosa di complicato, che non capisci, ed è meglio evitare queste situazioni finché non ne vieni a capo. Il codice può essere fatto in diversi modi, ma la logica deve essere chiara come due per voi. Ecco perché evito di usare ciò che non capisco ancora. Il codice è il tuo strumento, che dovresti conoscere e padroneggiare perfettamente, in modo da poterlo modificare facilmente nel tempo. Vi auguro di avere successo!
 
hoz:

Ora ho capito. Grazie. Stavo cercando... non c'era nessun punto di riferimento. Ora è 0.


Beh, per esempio, l'indice è passato come 1. Guardiamo questo pezzo di codice:

immediatamente all'arrivo sarà:cnt = 0, i = indice + g_center - 1 = 1(valore indice) +2(valoreg_center) - 1 = 2

Ma secondo la condizione del ciclo, continuerà fino a quando i sarà uguale a 0. Come accadrà questo?

La condizione dice che se i ha un valore da 2 (se indice = 1), a i >= 0 ecnt ha un valore da 0, acnt < g_center, allora le condizioni annidate sono soddisfatte.

Risulta che se la variabile qui è 1, avremo solo 1 iterazione nel ciclo, giusto?


Il ciclo termina quando la condizione scritta nel secondo posto dell'operatore for() non è più soddisfatta, cioè in questo caso, quando i diventa minore di 0, o quando cnt diventa maggiore o uguale a g_center. Entrambe le variabili hanno valori iniziali assegnati prima del ciclo e cambiano durante la sua esecuzione: la variabile i come risultato di i-- (la terza parte dell'istruzione for, viene eseguita ogni volta che il ciclo raggiunge la parentesi di chiusura }) e la variabile cnt come risultato di cnt++.
 

Ciao.

Cerco di esportare in html il mio commercio dal mio conto demo. (Alpari, ultima build). Premo save as report, si apre una finestra di selezione della cartella, premo save, non succede niente. È lo stesso per i conti demo? Un'altra cosa, il mio MT4 è installato sul mio desktop. Ha importanza?

 
borilunad:
Chissà se è possibile, rendendo le variabili globali Hour(), Minute() e Seconds(), controllare il cambiamento dell'indicatore DailyPivotPoints ai nuovi livelli di PP e altre linee dell'EA a mezzanotte (0.00)? Io lo facevo direttamente nell'indicatore con Hour(), Minute(), Seconds(), e funzionava senza dover compilare ogni notte. Ma recentemente ha smesso di cambiare da solo, forse per aver cambiato la bild? Grazie!


:) Perché non implementare questo come una nuova funzione bar? È necessario che ricalcoli una volta al giorno, cioè a partire dalle ore 0.00. Quindi lo facciamo semplicemente. All'inizio, naturalmente:

if (lastBarTime == время с ТФ Д1)
    return(0);
// что-то тут ещё
// что-то тут ещё
// что-то тут ещё
if (lastBarTime != время с ТФ Д1)
{
    пересчитывает уровни пивотов...
    lastBarTime = время с ТФ Д1;
}
Penso che questo sia il modo più corretto, anche se è primitivo!
 
alsu:

Il ciclo termina quando la condizione scritta nel secondo posto dell'operatore for() non è più soddisfatta, cioè in questo caso, quando i diventa minore di 0 o quando cnt diventa maggiore o uguale a g_center.


Ma non è né l'uno né l'altro, è AND. C'è un segno &&

Capisco tutto questo. Ma il punto qui è questo:

bool IsUpFractal(int index)
{
   double centerHigh = High[index + g_center];     // За точку отсчета берется средний..
                                                   // ..бар на участке из i_fractalPeriod
                                                   // ..баров
// - 1 - == Поиск максимумов справа от центрального бара ================================
   int cnt = 0, i = index + g_center - 1;
   for (; i >= 0 && cnt < g_center; i--)           // Справа от центрального бара должно
   {                                               // ..быть g_center-1 баров с низшим..
      if (centerHigh <= High[i])                   // ..максимумом. Не позволяется..
         return (false);                           // ..наличие баров с большим или..
      cnt++;                                       // ..равным максимумом.
   }
   
   if (i < 0)                                      // g_center-1 низших максимумов не..
      return (false);                              // ..найдено. Фрактала нет
// - 1 - == Окончание блока =============================================================

L'indice della variabile in generale per codice ha valore Bar - IndicatorCounted()

Cioè è 1 sulla barra attuale e 2 su quella nuova.

Entra nella funzione IsUpFractal() con il valore 1 o 1 se la barra non è ancora nuova, giusto?

Quindi, la variabile i avrà un valore fisso poiché anche l'indice del parametro di ingresso è fisso. Quindi il ciclo si interromperà sempre dopo la prima iterazione. Qual è il senso del ciclo allora?

 

Potete per favore dirmi perché non si vede...

double IN[111];
double PERI=33;
double KRIT;
int z;      
ArraySetAsSeries(IN,true);

   for(z=0; z<=PERI; z++)  {
IN[z]=     iClose(Symbol1.Name,0,iBarShift(Symbol1.Name,0,Time[z],false)); }

   for(z=0; z<=PERI; z++)  {
KRIT=IN[z]-iMAOnArray(IN,0,PERI,0,MODE_SMA,iBarShift(IN,0,Time[z],false)); }

Print(KRIT);
return;
Motivazione: