Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1151

 
Maksym Mudrakov:

L'errore potrebbe essere nel numero di cifre dopo il punto decimale:


Non è questo l'errore, i dati non vengono calcolati sulla storia, ma dal momento in cui il simbolo viene creato tutto viene calcolato correttamente, sospetto che la funzione di calcolo della storia non funzioni correttamente, cioè è un bug.
 
Buon pomeriggio, signori.

Ho un problema simile, ho appena iniziato con MT5, sto trasferendo i miei indicatori da MT4 e ho incontrato alcuni problemi. Ho bisogno di usare iMA in una linea e ottenere il valore di un indice specifico. Ho visto dei messaggi sul forum e usare la funzione iMAGet (così come la simile iATRGet ecc.). Come vedo, le funzioni non funzionano più, quindi questa domanda: come ottenere con grazia un solo valore iMA? Ho provato ad usare le funzioni di cui sopra per fare questo:

NormalizeDouble(iMAGet(iMA(Symbol(), timeframe, signal_period, 0, MODE_LWMA, PRICE_LOW), shift), Digits())

So che è brutto senza controllare, ma devo fare il porting del vecchio codice MT4, non riuscivo a pensare a nessun altro modo per renderlo più semplice (ho decine di wizard, e tutti lavorano su diversi timeframe). Non posso inizializzare le procedure guidate in oninit, perché il codice ha tre passi di annidamento e non posso chiamare la procedura guidata necessaria senza problemi. Quindi, in breve, il mio obiettivo è quello di trasformare

Questo :

NormalizeDouble(iMA(Symbol(), timeframe, signal_period, 0, MODE_LWMA, PRICE_LOW, shift), Digits())

In qualcosa che funziona su MT5 senza gesti drastici.

 
Olga Miakhovich:
Buon pomeriggio, signori.

Ho un problema, ho appena iniziato MT5 e ho problemi quando trasferisco i miei indicatori da MT4. Ho bisogno di usare iMA in una linea e ottenere il valore di un indice specifico. Ho visto dei messaggi sul forum e usare la funzione iMAGet (così come la simile iATRGet ecc.). Come vedo, le funzioni non funzionano più, quindi questa domanda: come ottenere con grazia un solo valore iMA? Ho provato ad usare le funzioni di cui sopra per fare questo:


So che è brutto senza controllare, ma devo fare il porting del vecchio codice MT4, non riuscivo a pensare a nessun altro modo per renderlo più semplice (ho decine di wizard, e tutti lavorano su diversi timeframe). Non posso inizializzare le procedure guidate in oninit, perché il codice ha tre passi di annidamento e non posso chiamare la procedura guidata necessaria senza problemi. Quindi, in breve, il mio obiettivo è quello di trasformare

Questo :

In qualcosa che funziona su MT5 senza gesti drastici.

Guardate gli esempi in kodobase, come questo:https://www.mql5.com/ru/code/27161

Fondamentalmente: creare un handle dell'indicatore in OnInit()

handle_iMA_High=iMA(Symbol(),Period(),Inp_MA_ma_period,Inp_MA_ma_shift,
                       Inp_MA_ma_method,PRICE_HIGH);
//--- if the handle is not created
   if(handle_iMA_High==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code
      PrintFormat("Failed to create handle of the iMA indicator (\"Price High\") for the symbol %s/%s, error code %d",
                  Symbol(),
                  EnumToString(Period()),
                  GetLastError());
      //--- the indicator is stopped early
      return(INIT_FAILED);
     }

Poi copiate l'elemento o gli elementi necessari negli appunti e lavorate con esso

if(CopyBuffer(ind_handle,0,-shift,amount,values)<0)
     {
      //--- if the copying fails, tell the error code
      PrintFormat("Failed to copy data from the iMA indicator, error code %d",GetLastError());

https://www.mql5.com/ru/docs/series/copybuffer

 
Vitaly Muzichenko:

Cercate esempi nel kodobase, per esempio questo:https://www.mql5.com/ru/code/27161

Fondamentalmente: creare un handle dell'indicatore in OnInit()

Poi si copia l'elemento o gli elementi necessari nel buffer e si lavora con esso

https://www.mql5.com/ru/docs/series/copybuffer

Come ho già scritto, l'inizializzazione in OnInit non è adatta a me. Devo lavorare con tutti i timeframes simultaneamente, devo inizializzare tutte le maschere in ogni TF, e poi nel codice, dove uso qualche valore, fare qualcosa del genere:

if(timeframe = PERIOD_M5)
        CopyBuffer(handle_ma_m5, ...)
if(timeframe = PERIOD_M15)
        CopyBuffer(handle_ma_m15, ...)
...

E così con ogni chiamata di ogni braccialetto. Il codice si trasformerà in una diarrea confusa.

E ogni nuovo bar dovrà aggiornarlo in qualche modo?

C'è una funzione come CopyBuffer, ma che copia non un array, ma un valore per indice richiesto?

 
Olga Miakhovich:

Come ho già scritto, l'inizializzazione in OnInit non è adatta a me. Devo lavorare con tutti i timeframes simultaneamente, devo inizializzare tutte le maschere in ogni TF, e poi nel codice, dove uso qualche valore, fare qualcosa del genere:

E così con ogni chiamata di ogni braccialetto. Il codice si trasformerà solo in una diarrea aggrovigliata.

E ogni nuova barra avrà bisogno di un modo per aggiornarla?

C'è una funzione come CopyBuffer, ma che copi non un array, ma un singolo valore per l'indice giusto?

Creare un array di maniglie inOnInit() e lavorare con esse.

CopyBuffer(...) nella funzione per l'usabilità, la alimenta con l'handle dell'indicatore e l'indice richiesto dall'array, e la funzione restituirà il prezzo

 
Vitaly Muzichenko:

Creare un array di maniglie inOnInit() e lavorare con esse.

CopyBuffer(...) in una funzione per facilità d'uso, passare l'handle dell'indicatore e l'indice richiesto dall'array, e la funzione restituirà il prezzo

molto scomodo, però)

 
Olga Miakhovich:

(è imbarazzante, però))

Più che altro è scomodo ))))

 
Vitaly Muzichenko:

Creare un array di maniglie inOnInit() e lavorare con esse.

CopyBuffer(...) nella funzione per l'usabilità, lì si inserisce la maniglia dell'indicatore e l'indice richiesto dall'array, e la funzione restituirà il prezzo

L'altro problema di CopyBuffer è che richiede un buffer indicatore per se stesso. Ho un centinaio di indicatori in totale e sono utilizzati nei calcoli per ottenere un unico indicatore. Devo creare un centinaio di buffer per memorizzare questi valori?

 
Olga Miakhovich:

Un altro problema di CopyBuffer è che richiede necessariamente un buffer indicatore per se stesso. Ho meno di cento indicatori in totale e sono utilizzati nei calcoli per ottenere un unico indicatore. Devo creare un centinaio di buffer per memorizzare questi valori?

Cercate esempi di codice nel CodeBase di scriptor - è tutto lì.
In realtà, è possibile calcolare la MA per qualsiasi barra.
 
Ho bisogno di un esempio per risolvere il seguente problema: c'è un indicatore ¹1 nel grafico con una dozzina di buffer grafici (non wavecaps e altre cose) e l'indicatore seminterrato ¹2 dovrebbe prendere alcuni buffer dall'indicatore ¹1 e visualizzarli come hixogrammi (non importa come) già nel seminterrato. Grazie in anticipo, per MT5.
Motivazione: