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
Non è così. Ci sarà un'interruzione della connessione di diverse barre, diverse barre saranno non inizializzate con spazzatura.
O, come ha detto Dmitry sopra, c'è stata un'interruzione di connessione di diverse barre... A proposito, anche prev_calculated restituirà 0 in caso di fallimento della connessione?
A quanto pare c'è stata davvero un'interruzione della comunicazione in questo periodo.
2016.10.19 04:45:37.260 Network '4092672': scanning network for access points
2016.10.19 04:45:36.630 Network '4092672': trading has been enabled - hedging mode
2016.10.19 04:45:36.630 Network '4092672': terminal synchronized with MetaQuotes Software Corp.
2016.10.19 04:45:36.000 Network '4092672': previous successful authorization performed from 31.173.80.3 on 2016.10.18 17:51:14
2016.10.19 04:45:36.000 Network '4092672': authorized on MetaQuotes-Demo through Access Point SG Singapore (ping: 583.86 ms)
2016.10.19 04:42:57.680 Network '4092672': connection to MetaQuotes-Demo lost
Ed è molto probabile che quando c'è un'interruzione, prev_calculato restituisca 0.
OK, è stata una lunga pausa, ma cosa ha causato gli altri nulli prev_calcolati?
Da queste righe.
2016.10.18 23:51:20.865 Network '4092672': scanning network for access points
Fino a quelli di cui sopra non ci sono altri record, se non quelli commerciali come questo.
E potete vedere quanti azzeramenti di prev_calcolato c'erano nel mio post precedente.
Potenzialmente, la colpa potrebbe essere qui:
{
minEquity = 0;
maxEquity = 0;
}
minEquity = NormalizeDouble(fmin((minEquity == 0 ? bal : minEquity), equity), 2);
maxEquity = NormalizeDouble(fmax(maxEquity, equity), 2);
Quando arriva una nuova barra, si resettano i valori a 0 - bene. Ma poi si controlla minEquity e 0 per l'uguaglianza, il che non è raccomandato.
Per provare le mie parole, ecco la sua immagine. Potete vedere che i valori "spazzatura", come avete detto, sono circa zero.
Naturalmente, è meglio aggiungere una finestra di dati nell'immagine con il valore "cestino".Puoi spiegare perché questo metodo non è raccomandato?
Questa parte di codice (minEquity == 0? bal : minEquity), se minEquity == 0, restituirà il valore di bal che è stato ottenuto in precedenza; il valore di minEquity non cambierà fino alla fine della funzione fmin().
Anche se sono d'accordo che tale scrittura è un po' rischiosa... ma non è questo il problema.
Puoi spiegare più dettagliatamente perché questo metodo non è raccomandato?
questa (minEquity == 0? bal : minEquity) parte del codice, se minEquity == 0, restituirà il valore di bal ottenuto in precedenza; il valore di minEquity non cambierà finché la funzione fmin() non termina
Anche se sono d'accordo che questo modo di scrivere il codice è un po' rischioso... ma non è questo il problema.
Parlavo specificamente di questo: minEquity ==0. State confrontando sull'uguaglianza dei numeri solitari. Questo potrebbe spiegare il calo dei valori a 0.
Vedo, la risposta corretta è minEquity ==0,0 ... Non riesco ad abituarmi.
E l'ultima frase non la capisco affatto. Quali valori a 0?
Vedo, la risposta corretta è minEquity ==0,0 ... Non riesco ad abituarmi.
E l'ultima frase non la capisco affatto. Quali valori a 0?
Ma non so se una conversione di tipo implicita può causare un errore. Intendevo il confronto di tipi reali. Cioè qui, per essere sicuri, lo scriverei così:
bool CompareDoubles(double number1,double number2)
{
if(NormalizeDouble(number1-number2,8)==0) return(true);
else return(false);
}
Tuttavia, non so se una conversione implicita di tipo possa causare un errore, stavo parlando, in linea di principio, di confrontare tipi reali. Cioè qui, per affidabilità, lo scriverei così:
bool CompareDoubles(double number1,double number2)
{
if(NormalizeDouble(number1-number2,8)==0) return(true);
else return(false);
}
Sì, la mia versione conta i soldi con due cifre decimali. Questa non è una citazione, quindi non si può essere così precisi.
Non è una questione di meticolosità, è una questione di precisione. Nel vostro caso, potrebbe risultare in un valore zero scritto nel buffer. Se non volete questa precisione, fate così:
{
minEquity = -1.0;
maxEquity = 0.0;
}
minEquity = NormalizeDouble(fmin((minEquity < 0 ? bal : minEquity), equity), 2);
maxEquity = NormalizeDouble(fmax(maxEquity, equity), 2);
Allora non ci sarà nessun errore.
Non è una questione di meticolosità, è una questione di precisione. Nel vostro caso, potrebbe risultare in un valore zero scritto nel buffer. Se non volete questa precisione, fate così:
{
minEquity = -1.0;
maxEquity = 0.0;
}
minEquity = NormalizeDouble(fmin((minEquity < 0 ? bal : minEquity), equity), 2);
maxEquity = NormalizeDouble(fmax(maxEquity, equity), 2);
Non ci sarà nessun errore in questo caso.
Perché sono così stupido? Come ho fatto a non capire che è meglio inizializzare minEquity con un valore diverso da zero? Allora tutto sarà più facile...
{
minEquity = DBL_MAX;
maxEquity = 0.0;
}
minEquity = NormalizeDouble(fmin(minEquity, equity), 2);
maxEquity = NormalizeDouble(fmax(maxEquity, equity), 2);
Potete anche usare maxEquity = DBL_MIN;
Perché sono così stupido? Come ho fatto a non capire che è meglio inizializzare minEquity con un valore diverso da zero? Allora tutto sarebbe più facile...
{
minEquity = DBL_MAX;
maxEquity = 0.0;
}
minEquity = NormalizeDouble(fmin(minEquity, equity), 2);
maxEquity = NormalizeDouble(fmax(maxEquity, equity), 2);
Bene... O così...