Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1279

 
leonerd:

Ficca il naso in un semplice codice che calcola l'angolo di movimento del prezzo. L'immagine qui sotto lo mostra.


Dipende in che cosa si misurano x (pixel, barre o tempo) e y (pixel o prezzo).
E dipende da quale compito: misurare l'angolo sul grafico corrente con la scala corrente (larghezza delle barre in pixel) e il timeframe? O per misurare l'angolo in modo che rimanga lo stesso per qualsiasi TF e scala?
Compiti e sistemi di coordinate diversi - soluzioni diverse.
 
leonerd:

Ficca il naso in un semplice codice che calcola l'angolo di movimento del prezzo. L'immagine qui sotto lo mostra.


Beh, si può calcolare con una tangente. E non avete bisogno dell'angolo in sé, basta conoscere la tangente.

 
Alexey Viktorov:

E non c'è bisogno di un angolo in sé, ma solo di una tangente.

Esattamente! E la nostra tangente si chiama: velocità.

In questo esempio, il prezzo è passato attraverso 1884 punti in 39 candele di 1 ora. La velocità totale di quest'onda è: 1884/(39/24) = 1159 pips al giorno.

double interval=double(iBarShift(symbol,frame,start_time)-iBarShift(symbol,frame,finish_time)*PeriodSeconds(frame)/86400;
int distance=MathAbs(finish_price-start_price);
int speed=interval>0?(distance/interval):0;
E non abbiamo bisogno di un angolo, perché abbiamo bisogno di un angolo? Quando cominciamo ad allungare o appiattire il grafico, come sarà l'angolo? Gli angoli possono essere misurati quando gli assi x e y hanno le stesse unità. Per esempio, se prendete un quaderno con dei quadrati, tracciate una linea lungo le diagonali di questi quadrati, otterrete 45 gradi. E ciò che è in alto e ciò che è a destra sono centimetri. E qui, a cosa equivale un punto di prezzo? Un'ora, un giorno? Non sono valori comparabili.
 
Aleksei Stepanenko:

Esattamente! E la nostra tangente si chiama: velocità.

In questo esempio, il prezzo ha superato 1.884 punti in 39 candele di un'ora. La velocità totale di quest'onda è: 1884/(39/24) = 1159 pips al giorno.

E non abbiamo bisogno di un angolo, perché abbiamo bisogno di un angolo? Quando cominciamo ad allungare o appiattire il grafico, come sarà l'angolo? Gli angoli possono essere misurati quando gli assi x e y hanno le stesse unità. Per esempio, se prendete un quaderno con dei quadrati, tracciate una linea lungo le diagonali di questi quadrati, otterrete 45 gradi. E ciò che è in alto e ciò che è a destra sono centimetri. E qui, a cosa equivale un punto di prezzo? Un'ora, un giorno?Sono valori incomparabili.

Perché abbiamo bisogno di confrontarli? Anche i chilometri e il tempo non sono paragonabili, ma questo non ci impedisce di contare la velocità in km/h.

Se la vostra tangente è la velocità, sarà quella velocità per unità di tempo del periodo del grafico. Se il prezzo si è mosso di 1884 pip in 39 ore, saranno 48 pip all'ora. Non c'è bisogno di convertirlo in giorni.

Ma si può anche calcolare "l'accelerazione" come rapporto tra la velocità attuale e la velocità sulla barra precedente. E raccogliendo diversi di questi valori, si può determinare l'accelerazione media.

 
Aleksei Stepanenko:

E qui, a cosa corrisponde un punto di prezzo? Un'ora, un giorno? I valori non sono comparabili.

Beh, la distanza si misura anche in anni luce. Quindi non è un problema.
Introduciamo una velocità costante. Per esempio, 1 _Point per una barra di 1 minuto e porta il sistema di coordinate a un prezzo su entrambi gli assi .

Allora gli angoli saranno gli stessi su qualsiasi orizzonte temporale.

Lacosa principale è calcolare correttamente il numero di barre di minuti trax1e x2.

In questo sistema un angolo di 45 gradi significherebbe che il prezzo cambia di N*tg(45) =N pips in N barre di minuti e un angolo di 30 gradi significherebbe che il prezzo cambia di N*tg(30)=N*0.57735 pips in N barre di minuti.
È meglio usare barre di minuti piuttosto che di tempo, poiché ci sono buchi di tempo sotto forma di fine settimana, bassa volatilità, ecc.
 

Sono d'accordo al 100%, perché la candela può essere allungata sia orizzontalmente che verticalmente. E ci dovrebbe essere qualche standard per determinare l'angolo (larghezza della candela in pixel e il numero di punti in un pixel).

Posso fare una domanda fuori tema?

Come faccio a convertire correttamente datatime in double in modo che il compilatore non imprechi (la perdita di dati dovuta alla conversione errata è possibile)?

doppio A = Tempo[1];

Grazie in anticipo!

 
Alexey Viktorov:

Se hai 1884 pip in 39 ore, la velocità è di 48 pip all'ora. E non c'è affatto bisogno di convertirlo in giorni.

Sì, questa è la mia ipotesi. Dato che ho reso la velocità int (cioè pip interi), ho pensato di usare un periodo più grande, in modo che le frazioni di pip nella velocità non contassero troppo e potessero essere scartate. Così ho ottenuto dei punti al giorno. Bene, questo concorda con l'orologio biologico umano. Stanco, ha dormito, si è alzato la mattina: "Che velocità c'era ieri? Sembra coerente, quindi questo è lo standard che mi sono prefissato. E poi, naturalmente, è una questione di preferenze personali.


Nikolai Semko:

Beh, la distanza si misura anche in anni luce. Quindi non è un problema.
Introduciamo una velocità costante. Per esempio, 1 _Point per una barra di 1 minuto e porta il sistema di coordinate a un prezzo su entrambi gli assi .

Sì, di nuovo si ottiene la velocità, solo in unità: punti al minuto. Per quanto riguarda i fine settimana e i buchi, ho preso il seguente modo: ciò che le candele sono sul grafico è l'intervallo di tempo, e ciò che è assente (giorni/ore) non c'è. Perché se prendiamo in considerazione i fine settimana, e il prezzo sta fermo in quel momento, la velocità diminuirà notevolmente senza alcuna ragione. Ma poi di nuovo, questo è a ciascuno il suo:)


Roni Iron:

Come convertire correttamente datatime in double, in modo che il compilatore non imprechi (la perdita di dati a causa di una conversione errata è possibile).

double A = (double)Time[1];

Perché dovreste memorizzare i dati in doppio? Se memorizzate diversi tipi di variabili nello stesso array, e li portate qui e là, considerate la possibilità di sostituire il solito array con un array di strutture:


struct My
   {
   datetime time;
   double price;  
   } my[];

int finish=0;
ArrayResize(my,finish+1);
my[finish].time=Time[1];
my[finish].price=Close[1];
 

Grazie mille!

Le strutture funzionano solo in mql 5 o già in mql 4?

 
Sì, lavorano in quattro, è molto comodo scrivere con loro, chiaramente.
 
Roni Iron:

Grazie mille!

Le strutture funzionano solo in mql 5 o già in mql 4?

Non solo le strutture funzionano, ma anche l'unione.