[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 82
![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
Grazie per l'aiuto. Ho capito la logica di impostare il flag e la funzione di restituire il numero di ordini. Ma mi interessa anche il momento in cui l'ordine viene chiuso. Sembra che la condizione di bandiera provi a piazzare di nuovo un ordine ma la funzione che restituisce il numero d'ordine dice che è diminuito di 1 e inizializza anche l'apertura di una posizione. Correggetemi se mi sono perso qualcosa.
Nel codice che hai fornito, la condizione è in un posto (BUY=true) e finché la bandiera non cambia, la riapertura non avverrà... perché la chiamata alla funzione per aprire una posizione proviene da questo blocco di condizioni... E la bandiera in questo codice può cambiare solo dopo che l'EA viene riavviato, quando la variabile con il valore true sarà inizializzata.
O forse non capisco la domanda:)
Il flag in questo codice può cambiare solo dopo aver riavviato l'Expert Advisor, quando la variabile con il valore true viene inizializzata.
o non capisco la domanda:)
Grazie, hai capito bene. Lo implementerò ora.
Questa è la versione che ha funzionato. Molte grazie a te e a IgorM:
string Val="";
Val = iBands(NULL,0,50,2,0,PRICE_CLOSE,MODE_LOWER,0);
string substr=StringSubstr(Val,0,1);
point_low=StrToDouble(substr);
substr=StringSubstr(Val,2,1);
point_low+=StrToDouble(substr)/10;
substr=StringSubstr(Val,3,1);
point_low+=StrToDouble(substr)/100;
substr=StringSubstr(Val,4,1);
point_low+=StrToDouble(substr)/1000;
substr=StringSubstr(Val,5,1);
point_low+=StrToDouble(substr)/10000;
substr=StringSubstr(Val,6,1);
point_low+=StrToDouble(substr)/100000;
substr=StringSubstr(Val,7,1);
point_low+=StrToDouble(substr)/1000000; //тут плюсуем 6-ю цифру после запятой.
Gente, niente aiuta! Non riesco a ottenere un valore con 5 cifre decimali. ho provato tutte le opzioni possibili, ho tradotto una stringa in un numero, ho tradotto una sottostringa in un numero, ho tolto delle cifre (esempio sopra) e le ho stupidamente aggiunte una ad una, oltre le 4 cifre decimali non si aggiunge e comincia ad arrotondare a 4 cifre decimali. anche ho aggiunto la sesta cifra decimale. ancora, non va bene(
Può essere che Alert non visualizzi le variabili doppie oltre il quarto segno? Non so cosa pensare... una specie di mistero(
Ho scritto due EAs collegati tra loro (non fanno trading, creano solo gobals) e penso di poterli usare per fare un indicatore grafico di volume equi simile al normale grafico dei prezzi in mt4. O se qualcuno ha già usato qualcosa di simile, si prega di condividere il codice:)
Può essere che Alert non visualizzi le variabili doppie oltre la quarta cifra (mostra l'intera stringa) Non so cosa pensare... una specie di mistero(
Sì. Esso (come Print) visualizza le 4 cifre standard se viene emesso solo un numero.
Usa DoubleToStr per essere più preciso.
Rrrrrrrrrrrrrrrrrrr. giusto, il terminale in Alert non visualizza più di 4 caratteri. ho commutato il doppio sulla linea e l'ho tirato fuori per guardare lo schermo - tutto è corretto.
ha ucciso mezza giornata per questa sciocchezza. tinny, e tutto funzionava inizialmente(
Gente, niente aiuta! Non riesco a ottenere un valore con 5 cifre decimali. ho provato tutte le opzioni possibili, ho tradotto una stringa in un numero, ho tradotto una sottostringa in un numero, ho tolto delle cifre (esempio sopra) e le ho stupidamente aggiunte una ad una, oltre le 4 cifre decimali non si aggiunge e comincia ad arrotondare a 4 cifre decimali. anche ho aggiunto la sesta cifra decimale. ancora, non va bene(
Può essere che Alert non visualizzi più della 4a cifra della variabile double? (La stringa mostra tutto) Non so cosa pensare.
Bene, come sempre tutto sta nell'esperimento. Noi scriviamo la sceneggiatura:
Come possiamo vedere, c'è una scheda dll collegata allo script. Ha solo una funzione che elimina la parte frazionaria del numero. Il file dll è allegato a questo post. Ora dovremmo applicare sequenzialmente lo script a 2 coppie di valute. L'ho messo sulla sterlina e sull'euro-giapponese. Nella sterlina, ho 4 cifre decimali. Sulla coppia di valute euro-giapponese - due. Ecco il risultato dell'operazione di script:
Nella sterlina, puoi vedere come la virgola si muove in modo coerente. E si può anche vedere che l'ultima divisione lascia 4 cifre nella parte frazionaria. Possiamo supporre che, poiché il mio Digits = 4, la quinta cifra dopo il punto decimale è tagliata. Quindi l'eurogiapponese dovrebbe anche risultare in solo 2 cifre dopo il punto decimale, poiché le cifre su di esso = 2. Tuttavia, l'esperimento mostra che anch'esso risulta in 4 cifre dopo la virgola. Quindi la nostra ipotesi non è corretta e potrebbe esserci un arrotondamento. Proviamo a sostituire gli ultimi 4 con 7. Il risultato:
Cosa vediamo? Il cinque risultante diventa ora un sei. Di conseguenza, l'arrotondamento automatico ha luogo.
Non so come si comporterà lo script sul carattere a cinque cifre, ma non sono stato soddisfatto del lavoro sui caratteri a quattro e due cifre - il terminale interferiva e arrotondava senza che gli venisse chiesto di farlo. Quindi devo fare domande agli sviluppatori. Oppure - opzione 2 - prendere le letture dell'indicatore, metterle in una stringa, inviare la stringa a una dll, elaborare i dati lì come abbiamo bisogno e restituire l'ordine di trading dalla dll.
Informazioni dall'aiuto (secondo l'allarme):
Данные типа double выводятся с 4 десятичными цифрами после точки. Для вывода чисел с большей точностью используйте функцию DoubleToStr().
Vai a capire perché gli sviluppatori hanno fatto questo...
Grazie, ho studiato il codice, molto interessante. Tutto, come ho descritto sopra, si è rivelato più semplice: il terminale semplicemente non visualizza oltre la quarta cifra nella finestra. e tutte le idee hanno funzionato, solo risolto il problema della conversione in modi diversi :)
zy. Ancora una volta sono convinto che tutti i problemi si risolvono logicamente, e qui la situazione era originariamente illogica, quindi cercavamo un intoppo nel posto sbagliato :)