Errori, bug, domande - pagina 2930
![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Tradurre un indicatore da mt4 a mt5
Il problema è nella dimensioneDRAW_HISTOGRAM
Quando imposto "1" o "2" la dimensione cambia, ma "3" o "4" = la dimensione è ancora "2".
Perché tutto funziona in MT4, ma c'è un tale problema con MT5?
Risultato in mt4
Risultato in mt5, mostra solo "2" spessore, anche se ho "3" nelle impostazioni
Inoltre, impostare la proprietà in OnInit() non aiuta
PlotIndexSetInteger(0,PLOT_LINE_WIDTH, 3);
Errore critico durante il debug:
Risultato:
L'ultima versione beta al momentoQualcuno ha trovato un modo per far sì che la maniglia dell'indicatore visualizzi la proprietà nella finestra principale o nella sottofinestra? Sto parlando di indicatori personalizzati che vengono creati usando IndicatorCreate e poi possono essere aggiunti al grafico usando ChartIndicatorAdd.
Potresti probabilmente infilare l'indicatore in OBJ_CHART e vedere dove si trova.
Qualcuno ha trovato un modo per ottenere una proprietà di visualizzazione da una maniglia dell'indicatore nella finestra principale o nella sottofinestra? Sto parlando di indicatori personalizzati che vengono creati usando IndicatorCreate e poi possono essere aggiunti al grafico da ChartIndicatorAdd su richiesta dell'utente.
ha fatto qualcosa di simile.
Il codice cerca tutti i grafici aperti per un indicatore in base al suo handle. Restituisce simbolo, timeframe, id del grafico, sottofinestra e nome dell'indicatore.Ecco uno che ho trovato. Non ricordo se funziona o no. Si prega di controllare.
Immagino che potresti mettere l'indicatore in OBJ_CHART e vedere dove si trova.
Farò una prova, per ora ho dovuto fare l'opzione per specificarlo dall'utente.
ha fatto qualcosa di simile.
A giudicare dal codice, cerca tutti i grafici aperti per un indicatore in base al suo handle. Restituisce simbolo, timeframe, id del grafico, sottofinestra e nome dell'indicatore.Ecco uno che ho trovato. Non ricordo se funziona o no. Si prega di controllare.
Non corrisponde alla tua domanda: gli indicatori creati da IndicatorCreate non sono collocati in nessuna finestra - si "siedono" al suo interno, e il compito è quello di collocare tale indicatore tramite il suo manico nella finestra. Ora, MQL5 permette di aggiungere un handle arbitrario alla finestra principale o sottofinestra usando la funzione ChartIndicatorAdd, indipendentemente dalle "proprietà" dell'indicatore (senza errori!), e il risultato appare molto strano quando l'aggiunta non viene eseguita come previsto.
C'è un problema più grande con gli indicatori.
Alcuni di loro implementano il gestore OnCalculate secondo la versione semplificata con una matrice di input, e per loro è possibile selezionare il tipo di prezzo per il calcolo. Come fai a sapere dal programma MQL5 di terze parti che l'indicatore si aspetta questo tipo di prezzo, che deve essere passato dopo tutti i parametri durante la creazione dell'indicatore? Sembra che non ci sia modo. E se non lo fai, l'indicatore è disegnato dalla #proprietà indicator_applied_price che non è accessibile dall'esterno. Ecco un semplice Expert Advisor che aggiunge l'indicatore/AMA al grafico programmaticamente:
Se poi cambiamo il timeframe del grafico, otteniamo 2 indicatori AMA: uno a prezzo di chiusura (creato programmaticamente) e uno a prezzo aperto (generato a causa del cambio di timeframe e della #proprietà indicator_applied_price PRICE_OPEN; non è chiaro perché questa proprietà non sia catturata anche da iCustom).
Per continuare il tema degli indicatori, allego l'Expert Advisor che ho usato per scoprire ed evitare il problema con i parametri MqlParam.
Il compito dell'Expert Advisor è quello di aggiungere l'indicatore "Examples/Price_Channel" al grafico, se non è ancora presente, con gli stessi parametri.
Per fare questo, creiamo un'istanza usando iCustom/IndicatorCreate, otteniamo un array dei suoi parametri attraverso IndicatorParameters, e poi chiamiamo nel ciclo IndicatorParameters per gli indicatori che già esistono nel grafico: se non c'è corrispondenza dei parametri dell'array, l'indicatore viene aggiunto al grafico, se c'è una corrispondenza, il nuovo handle viene semplicemente distrutto.
Il problema è che l'uguaglianza dei parametri non funziona sempre come previsto. In particolare, c'è un tale caso di test a prova di errore. Posizioniamo l'Expert Advisor su qualsiasi grafico vuoto e clicchiamo - si crea la prima istanza dell'indicatore. Poi passiamo a qualsiasi altro timeframe del grafico (il vecchio indicatore rimane) e clicchiamo di nuovo. Stranamente, viene creata la seconda istanza dell'indicatore.
Dall'analisi dell'esecuzione e del log è chiaro che questo è dovuto all'equalizzazione errata delle stringhe del nome dell'indicatore nei parametri. Le stringhe lì sono lunghe 260 caratteri, ma il terminale 0 si trova molto prima. Dopo c'è qualche informazione di servizio o spazzatura. Quindi il confronto delle stringhe "==" o StringCompare tiene conto di questa "spazzatura" e si ottiene l'ineguaglianza delle stringhe.
Se convertiamo le stringhe in un array di char, gli array ottengono una corrispondenza completa. Se si converte in un array corto, si ottiene una schifezza. Tutto sommato, alcuni comportamenti non coerenti non descritti nella documentazione.
Non sono sicuro di quale sia esattamente il bug, se è nel principio di elaborazione delle stringhe in MQL o qualcos'altro.
Se qualcuno conosce le sfumature, per favore mi dia un suggerimento.
Se qualcuno è a conoscenza delle sfumature, per favore mi dia un consiglio.
Questo è il tipo di caratteristica che, anche se la conoscete, dovete riportare tutto il livello nella vostra testa da capo.
Qui ha fatto la definizione di disponibilità di sé. Sembrava funzionare quando si cambiavano i TF.