[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 82

 
wolf05632:

Grazie, ma non funziona per me. Non ho bisogno di un offset. Sopra ho scritto. Supponiamo che per la prima candela buffer[1]=Hight[1], per la terza buffer[3]=Hight[3] e per la seconda dobbiamo calcolare: buffer[2]=MathAbs(Higth[1]-Hight[3])/2 e ottenere ciò che voglio nell'immagine.
E cosa non ti piace della mia variante? :)) È molto più semplice e meno complicato. O avete bisogno che in un buffer siano rimasti dei valori su ogni barra?
 

wolf05632:

SZY: Come posso far funzionare un indicatore, cioè fare dei calcoli (funziona, non è visibile) solo su un certo timeframe (H1)?

Dovete legare il calcolo non al timeframe corrente, ma a H1! :)) Cioè non usate gli array Open[], Close[], High[], Low[], Time[], ma le funzioni iOpen(), iClose(), iHigh(), iLow(), iTime() con parametri rilevanti...
 
MaxZ:
Perché non ti è piaciuta la mia versione? :)) Molto più semplice e meno calcoli. O volete mantenere i valori nel buffer ad ogni barra?

Ho provato, grazie, ma non ha funzionato. Non sono riuscito a farlo apparire sul grafico. Potrei aver frainteso qualcosa. L'unica cosa che ho capito è la cosa principale: gli elementi nel buffer devono andare in sequenza (1,2,3...), cioè senza spazi vuoti (1,3,5...) e OGNI! elemento nel buffer deve avere un valore assegnato! :-)
 

Roman, grazie per la risposta..... Purtroppo non ho ancora capito una cosa. Nel libro di testo, https://book.mql4.com/ru/basics/expressions, sotto "Type Approach. Opzione 4.1. Calcolare il risultato di un tipo intero

e la variante 4.2. Una situazione simile si verifica se cerchiamo un risultato come valore di un tipo reale", la stessa formula è data, ma in un caso, il tipo della variabile F è designato come int

   double A = 2.0;                      // Количество карандашей у Васи
   int    Y = 3;                        // Количество ответов Пети
   int    F = A + Y;                    // Общее количество

e nel secondo esempio, la variabile è doppia

   double A = 2.0;                   // Количество карандашей у Васи
   int    Y = 3;                     // Количество ответов Пети
   double F = A + Y;                 // Общее количество

Purtroppo, continuo a non capire la logica della conversione. Se nella prima variante è chiaro perché int è assegnato alla variabile F (cioè, secondo la regola della conversione implicita dei tipi), allora perché double.... è assegnato nella seconda variante mi confonde totalmente.

Per favore, chiarite cosa posso essermi perso nelle mie spiegazioni qui?

Grazie in anticipo.

 
wolf05632:

Ho provato, grazie, ma non ha funzionato. Non ha mostrato nulla sul grafico. Forse ho capito male qualcosa?

Hai copiato tutto il codice o solo quello che c'era nella funzione start()? È importante!

wolf05632:

L'unica cosa che ho capito la più importante: gli elementi nel buffer devono andare uno dopo l'altro (1,2,3...), cioè senza spazi vuoti (1,3,5...) e OGNI! elemento nel buffer deve avere un valore assegnato! :-)
Ti sei sbagliato! :)) Per esempio, lo zig-zag non ha tutti gli elementi del buffer riempiti. Inoltre, non è necessario riempire tutti gli elementi del buffer per le icone.
 
Geowind64:

Roman, grazie per la risposta..... Purtroppo non ho ancora capito una cosa. Nel libro di testo, https://book.mql4.com/ru/basics/expressions, sotto "Tipo di adduzione". Opzione 4.1. Calcolare il risultato di un tipo intero

e la variante 4.2. Una situazione simile si verifica quando si cerca un risultato come valore di un tipo reale", la stessa formula è data, ma in un caso, il tipo della variabile F è denotato come int

e nel secondo esempio, la variabile è già un doppio

Purtroppo, continuo a non capire la logica della conversione. Se nella prima variante è chiaro perché int è assegnato alla variabile F (cioè, secondo la regola della conversione implicita del tipo), allora perché nella seconda variante hanno assegnato double.... mi ha completamente confuso.

Per favore, spiegatemi cosa potrei aver tralasciato nella mia spiegazione.

Grazie in anticipo.



n


Il tipo interanger è un tipo duble, il tipo variabile duble ha una gamma più ampia, quindi non è possibile che le variabili in un'espressione "abbiano la possibilità" di essere di tipi diversi, e il risultato è una variabile che ha una gamma più stretta di valori accettati, in questo caso, il tipo interanger. Cioè, se almeno una variabile in un'espressione è di tipo duble, il risultato deve e può anche essere nell'intervallo di duble, altrimenti ci sarà un errore di compilazione - type mismatch.

Si prega di vedere qui per i dettagli.

 
Roman.:


Integer è un tipo duble, e le variabili duble hanno una portata più ampia, quindi non è possibile che le variabili in un'espressione "abbiano la possibilità" di essere di tipi diversi, e il risultato è una variabile che ha una gamma più stretta di valori accettati, in questo caso, il tipo intero. Cioè, se almeno una variabile in un'espressione è di tipo duble, il risultato deve e può anche essere nell'intervallo di duble, altrimenti ci sarà un errore di compilazione - type mismatch.

Per maggiori dettagli, vedere qui.


Uso spesso la conversione implicita dei tipi. Ma devo usare parentesi non necessarie.
 

Ragazzi, cosa significa #INF - è fuori dall'intervallo consentito del doppio? vedere la seconda linea dall'alto (conta il prodotto del doppio TWR, cioè il suo valore precedente è moltiplicato per quello successivo). Qual è il modo corretto di contare quei valori presi dalla variabile TWR?

 
Geowind64:

Se leggete attentamente questa sezione del libro di testo, vedrete che dovete prima guardare l'espressione a sinistra dell'assegnazione "=":

   A + Y

Secondo la regola:

  • se il tipo dell'espressione a destra del segno di assegnazione non è lo stesso del tipo della variabile a sinistra del segno di assegnazione, allora il valore dell'espressione viene castato al tipo della variabile a sinistra del segno di assegnazione; questa è chiamata una conversione di tipo target;

A è una variabile di tipo doppio a sinistra, e quindi il valore di A+Y è un numero di tipo doppio.

Poi, fate attenzione al tipo di variabile a cui viene assegnata l'espressione.

Nel primo caso: "prima il tipo dell'espressione A+Y sarà convertito al tipo int (secondo la regola del calcolo degli interi), e poi questo risultato diventerà il valore della variabile intera F".

Nel secondo caso: "il tipo di destinazione della variabile F (a sinistra del segno dell'operazione di assegnazione), in questo caso il tipo double, è lo stesso del tipo double dell'espressione A+Y, quindi non si verifica alcuna conversione del tipo di destinazione".

Verstehen? :)))

 
Roman.:

Ragazzi, cosa significa #INF - è fuori dall'intervallo consentito del doppio? vedere la seconda linea dall'alto (conta il prodotto del doppio TWR, cioè il suo valore precedente è moltiplicato per quello successivo). Come contare correttamente quei valori presi dalla variabile TWR?

Generalmente INFINITY (INF in breve ) è l'infinito! :)) Sì, si scopre che il doppio manca di potenza (memoria) per memorizzare un numero così grande.

E come calcolare correttamente, posso solo immaginare... Creare un tipo proprio, in modo condizionale: memorizzare in una variabile aggiuntiva la capacità delle cifre e moltiplicare due volte per 10^n, dove n è la capacità delle cifre. Ma in questo caso, la precisione è persa, e vedo che la tua precisione sta diventando sempre peggio...

Ma potrebbe essere più semplice cambiare la logica dei calcoli? :))) O forse c'è un errore da qualche parte.

Motivazione: