Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 1051

 
È chiaro che l'offerta è invecchiata, ma speravo che questo design mi permettesse di aprire diverse posizioni sulla barra corrente con diversi prezzi di apertura dell' offerta. E nel tester funziona bene, ma nella demo si apre una posizione e si chiude immediatamente. come evitarlo non è chiaro.
 
rapid_minus:
Non capisco dove sia la risposta. Voglio dire questo: "La funzione integra il controllo dello stato della bandiera di stop dell'Expert Advisor ogni 0,1 secondi"? Se è così, come si può rimuovere questa bandiera?

No, se avessi letto fino alla fine, avresti visto la risposta alla risposta...

Nota

La funzione Sleep() non può essere chiamata da indicatori personalizzati, poiché gli indicatori sono eseguiti nel thread dell'interfaccia e non devono rallentarlo. La funzione ha un controllo incorporato dello stato del flag di arresto dell'esperto ogni 0,1 secondi. La funzione Sleep() nel tester della strategia non causa alcun ritardo.




 
LRA:

Comincia attaccando questo alla fine dell'indicatore. Una volta che vedi il marchio sullo schermo, cerca di capire come metterci quello che vuoi. Qui ti danno dei consigli, ma devi metterlo da solo.

mi dispiace, non so cosa fare dopo(
int Numero=25;

se(H==H1&&H1==H2)
{if(J == true) {ObjectCreate(PatternText[shift],
OBJ_TEXT, 0, Time[shift1], High[shift1] + Range*5);
ObjectSetText(PatternText[shift], "pattern", 10, "Arial", Red);
downArrow[shift1] = High[shift1] + Range*0.5;}if(setalert == 0 && Alert == true) {pattern = "pattern";setalert = 1;}}




if(ObjectFind(0, "Text")<0) // controlla l'etichetta di uscita
{
ObjectCreate("Text", OBJ_LABEL, 0, 0, 0); // creazione
ObjectSet("Text", OBJPROP_CORNER, 1); // Angolo superiore destro
ObjectSet("Text", OBJPROP_XDISTANCE, 10); //X
ObjectSet("Text", OBJPROP_YDISTANCE, 10); //Y
}
ObjectSetText("Text", string(number), 14, "Arial",Black); // Output all'etichetta

}
ritorno(0);
}
 
AlexeyVik:    mi hai sorpreso... mathlog10

Il problema è risolto in modo molto più semplice.

È certamente più facile con lui.... Forse mancava all'epoca, o si è perso... Nel mio amato TurboPascal manca decisamente. Ho usato il logaritmo per farlo.
 
Grazie!
 
LRA:
È certamente più facile con esso.... Forse mancava all'epoca, o si è perso... Manca decisamente nel mio TurboPascal preferito. Facevo la moltiplicazione dei logaritmi.

Per un po' di tempo dopo il passaggio a mql4 aggiornato c'era un bug nella documentazione. Cliccando su MathLog10 si è aperto l'aiuto di MathLog

Ho scritto a servicedesk a questo proposito, ma hanno sistemato la metà e lasciato l'altra metà...

 
Ho un indicatore che ripete completamente le barre della finestra principale con la stessa scala di prezzo e tempo. Domanda: c'è un CHARTSET CHARTGET per la finestra dell'indicatore per scalare come nella finestra principale quando si scorre il grafico?
 
AlexeyVik:

log(10) non è davvero 1, ma il fatto che mql non abbia un logaritmo decimale mi sorprende...

Che cos'è allora? https://docs.mql4.com/ru/math/mathlog10 anche se c'è un errore nel testo.

La questione è molto più facile da risolvere.

Risponderò direttamente dall'ultimo post.

Cosa sono i logaritmi ho capito, non ho capito a cosa serve in quel codice, ma dopo la corrispondenza tua e di quel compagno ho capito che è per i decimali, giusto?

Non si potrebbe fare in un altro modo? Perché questo nel codice(int) ? Perché il tuo modo è migliore della linea che ho fornito?))

grazie mille)

 
Igemon:

Risponderò dall'ultimo messaggio.

Ho capito cosa sono i logaritmi, non ho capito perché in quel codice, ma dopo la corrispondenza tua e di quel compagno ho capito che serve per determinare il numero di cifre decimali, giusto?

Non si potrebbe fare in un altro modo? Perché questo nel codice(int) ? Perché il tuo modo è migliore della linea che ho fornito?))

grazie mille)

Sì, per determinare il numero di cifre decimali. Questo è necessario per normalizzare il valore del lotto se il lotto è definito da qualche formula e il risultato può avere più cifre decimali del consentito. In alcuni casi, si potrebbe semplicemente mettere un deuce, ma poi si potrebbe incontrare un errore, quindi è meglio definirlo programmaticamente.

C'è un altro modo di farlo. Ci sono due modi per risolvere questo problema: uno è convertire il numero in una stringa, definire la lunghezza della stringa, trovare l'indice del carattere punto e la differenza tra la lunghezza della stringa e l'indice del carattere punto sarà valutata come parte frazionaria del numero. E sul forum mql5, si possono trovare diverse varianti, alcune più sottili, altre più facili.

Ecco un'altra variante.

int fun(double ch)
{
 int i = 0;
 double res = 0, ostatok = fmod(ch, 1);
 while(ostatok != 0 && i < 16) // число взято от фонаря для прерывания зацикленности
  {
   res = ostatok * 10;
   ostatok = NormalizeDouble(fmod(res, 1), 8); // Вроде 8 максимально
   i++;
  }
 return(i);
}/*******************************************************************/

Questa funzione definisce il numero di cifre decimali di qualsiasi numero.

L'algoritmo è scandalosamente semplice, dovremmo considerare quante volte il residuo della divisione per 1 sarà maggiore di zero.

Non ho detto che il mio modo è migliore. Ogni programmatore scrive come vede la soluzione del problema.

Un numero di tipo double, anche se non ha cifre significative nella parte frazionaria è come, per esempio, 2.0, che non è del tutto corretto, e per ottenere un intero normale viene convertito implicitamente al tipo int.

 

Nota

La funzione Sleep() non può essere chiamata da indicatori personalizzati, poiché gli indicatori sono eseguiti nel thread dell'interfaccia e non devono rallentarlo. La funzione ha un controllo incorporato dello stato della bandiera di arresto dell'esperto ogni 0,1 secondi. La funzione Sleep() nel tester della strategia non causa alcun ritardo.

Tutti sono così intelligenti che fa paura guardarli. Ho scritto che lo slittamento è stato ignorato nello Strategy Tester (che è chiaro), ma tutte le posizioni sono aperte come ho specificato. Ma sul demo slip non funziona, e la posizione è aperta solo una, e che si chiude immediatamente. Questo è il problema che non posso risolvere.

Motivazione: