Errori, bug, domande - pagina 2101
![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
Ciao, ho iniziato a studiare MQL5 dahttps://www.mql5.com/ru/articles/100. Ho lanciato il codice e ho ottenuto l'errore 4756. Ho guardato la documentazione e non è andata meglio. Ho pensato di iniziare con qualcosa di semplice (Allarme/Stampa...). Una delle funzioni più importanti è OrderSend. Ho iniziato a cercare nel forum/documentazione su come usare OrderSend. Ho trovato questo articolohttps://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions e ho trovato il codice per aprire una posizione Buy. Ho ottenuto l'errore 4756 e il retcode 10030. Ho capito che 10030 - è la proprietà OrderSend, ma non ho capito come dovrebbe essere usata questa proprietà (ho guardato il codice di qualcun altro) e a cosa serve principalmente. Poi ho apertohttps://www.mql5.com/ru/docs/trading/ordersend, ho copiato il codice, l'ho eseguito e ha funzionato bene.
Ma non ho ancora capito perché appare l'errore 4756 e come liberarmene, così come il 10030.
Guardato il codice tra
e questo.
Mi sembrano quasi identici, non vedo dove appaiono questi errori (4756 e 10030). Punta il dito e spiega per favore
Esecuzione istantanea
Un ordine di trading per aprire una posizione nella modalità di esecuzione istantanea (la modalità di trading a prezzi in streaming). 9 campi sono obbligatori:
Puoi anche specificare campi magici e di commento.
Esecuzione del mercato
Un ordine di compravendita per aprire una posizione nella modalità di esecuzione a mercato. Richiede 5 campi da specificare:
Puoi anche specificare campi magici e di commento.
quale aggiornamento è arrivato, 1736, cosa c'è dentro, dove posso leggerlo?
Propongo di dare la possibilità di determinare programmaticamente quale buffer di indicatori sta disegnando sul grafico.
Supponiamo che un trader inizi i suoi propri indicatori, non sappiamo quanti buffer sono usati per il calcolo e quanti sono usati per disegnare l'indicatore sul grafico.
Affrontare gli indicatori personalizzati attraverso
intChartIndicatorGet(
longchart_id,// identificatore del grafico
intsub_window// numero della sottofinestra
const string indicator_shortname // nome breve dell'indicatore
);
Possiamo anche richiedere l'array di buffer di disegno
intChartIndicatorGet(
longchart_id,// identificatore del grafico
intsub_window//numero della finestra
const string indicator_shortname // nome breve dell'indicatore
int & IndicatorVisualBuffer[] // numeri del buffer di disegno... );
Questo estenderà la possibilità di lavorare con indicatori sconosciuti installati sul grafico...
Propongo di dare la possibilità di determinare programmaticamente quale buffer di indicatori sta disegnando sul grafico.
Supponiamo che un trader inizi i suoi indicatori, non sappiamo quanti buffer vengono utilizzati per calcolare e quanti per disegnare l'indicatore sul grafico.
Indirizzamento all'indicatore tramite
intChartIndicatorGet(
longchart_id,// ID del grafico
intsub_window// numero della sottofinestra
const string indicator_shortname // nome breve dell'indicatore
);
Possiamo anche richiedere l'array di buffer di disegno
intChartIndicatorGet(
longchart_id,// identificatore del grafico
intsub_window//numero della finestra
const string indicator_shortname // nome breve dell'indicatore
int & IndicatorVisualBuffer[] // numeri del buffer di disegno... );
Questo aumenterà la possibilità di lavorare con indicatori sconosciuti installati nel grafico...
Che cosa restituisce?
e quale sarà l'utilità di aggiungerlo? Volete aggiungere un parametro di input e ricevere in risposta lo stesso manico di indicatore...
E se non le dispiace, a quale scopo è necessario? Non sono ironico. Dopo tutto, se si suggerisce qualcosa, si dovrebbe, secondo me, dare un argomento convincente della necessità del suggerito.
Cosa restituisce
e a cosa servirebbe aggiungerlo? Tu proponi di aggiungere un parametro di input e di ottenere in risposta lo stesso indicatore...
E se non è difficile, per quali scopi è apparsa una tale necessità? La domanda è senza ironia. Dopotutto, se si offre qualcosa, è necessario, secondo me, dare argomenti convincenti per la necessità dell'offerta.
L'utente mette qualsiasi indicatore.
L'Expert Advisor lo trova automaticamente e usa i dati del buffer per ricevere il segnale.
Ora dobbiamo usare iCustom e se possiamo scrivere la lista dei parametri, ecco il problema con i buffer....
È possibile contare la quantità di buffer attraverso Copy, ma capire quale di essi sta disegnando programmaticamente non è possibile...
L'utente piazza un qualsiasi indicatore.
L'Expert Advisor lo trova automaticamente e usa i dati del buffer per ottenere il segnale.
Ora dobbiamo usare iCustom e se possiamo scrivere la lista dei parametri, ecco il problema con i buffer....
È possibile contare la quantità dei buffer usando Copy programmaticamente, ma è impossibile capire quale di essi sta disegnando...
Perché è impossibile? Si può togliere il buffer INDICATOR_CALCULATIONS attraverso iCustom()?
La domanda è interessante, ma non in questo thread per discuterne. Personalmente dubito che possa in qualche modo migliorare o semplificare il lavoro del programmatore. Gli indicatori sono troppo diversi e le condizioni della loro applicazione sono troppo diverse. Poi dovremo chiedere di essere in grado di determinare il tipo di tracciatura grafica e alcune altre cose, e le nostre richieste interne diventeranno una valanga.
Perché non è possibile? Il buffer INDICATOR_CALCULATIONS può essere raggiunto attraverso iCustom()?
La domanda è interessante, ma non in questo thread per discuterne. Personalmente dubito che possa in qualche modo migliorare o facilitare il lavoro del programmatore. Ci sono indicatori troppo diversi e condizioni troppo diverse per la loro applicazione. Poi dovremo chiedere di essere in grado di determinare il tipo di tracciatura grafica e poi altre cose, e le richieste si moltiplicheranno a valanga.
Teoricamente, ciò che è scritto nell'indicatore di default, non sto parlando del codice del programmatore, dovrebbe essere disponibile dall'esterno... I buffer hanno il loro numero, il tipo di tracciato, il colore, e altri standard ...
Questo è il problema che ho incontrato:
Ho deciso di usare come magia il resto della divisione di ChartID per 1000 o 10000, non ha molta importanza.
Ma per qualche ragione con ChartID() diversi il resto della divisione risulta improvvisamente uguale. Domanda: perché?
Controllo dello script
Risultato
Mi aspettavo di vedere rispettivamente 74907 e 74908, perché il resto della divisione dovrebbe essere lo stesso.
Sto anche aspettando una risposta a questa domanda.
Forum sul trading, sistemi di trading automatico e test di strategia
Bug, bug, domande
Alexey Viktorov, 2018.01.09 14:21
Nel tester di MT5 l'oggetto OBJ_EDIT "Campo di input" non permette di modificare il valore in esso. È il modo in cui è progettato o è un bug?
Nei terminali e nel tester MT4 è modificabile, ma nel tester MT5 non vuole, il valore inserito programmaticamente quando si crea l'oggetto scompare del tutto.
Ma per qualche ragione una diversa ChartID() produce improvvisamente lo stesso residuo della divisione. Domanda: perché?
Perché l'input fmod è doppio. Double non può memorizzare un numero enorme di numeri interi. Per esempio, questo è il tuo caso:
Fate così.
Usando float come esempio, si può capire rapidamente la peculiarità del doppio
Risultato
SZY double non perde l'informazione di tutto l'int-range, non così con long.
Perché l'input fmod è doppio. Double non può memorizzare un numero enorme di numeri interi. Per esempio, il tuo caso:
Fate così.
Naturalmente, controllerò questo campione ora, ma ho anche avuto un codice di controllo come questo
il risultato è
Indica che non ci dovrebbe essere un troncamento del valore.
Ma qui ho controllato questa variante e ho cambiato leggermente la proposta
e ha ottenuto la variante prevista.
Appare un'altra domanda,
Se MathMod così come fmodrestituisce il resto reale dopo la divisione di due numeri. E % secondo la documentazione
Il resto dei minuti = tempo % 60;
perché c'è una differenza?