Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 589
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
Controllando l'indicatore passo dopo passo, ho trovato un rimbalzo nella subroutine dietro il if {} e in cui non c'è W. Ecco un codice semplificato per chiarire il punto:
//--- parametri di ingresso
input int w=10;
//---
{
int i;
//---
int co=0;
for(i=0;i<=w;i++)if(w==10){co++; Alert(co);}
//--- restituire il valore di prev_calculato per la prossima chiamata
return(rates_total);
}
Risultato (arlet):
2016.05.30 00:45:14.064 1 (EURUSD,H1) 11
2016.05.30 01:10:35.972 1 (EURUSD,H1) 10
........... ecc. a 1.
2016.05.30 00:45:14.064 1 (EURUSD,H1) 1
Regola: se l'espressione tra parentesi è vera, allora l'operatore1 viene eseguito.
Nel codice: l'operatore1 viene eseguito SEMPRE.
Penso che if() dovrebbe funzionare solo una volta quando la condizione tra parentesi è vera. Ma in realtà avviene ad ogni controllo, quindi tutte le espressioni in {} vengono eseguite ad ogni passo e masticano il tempo della macchina.
Domande: PERCHE' la variabile CO è cresciuta da 0 a 11 durante il ciclo? Perché Alert si attiva ad ogni passo?
Quante volte ve lo devo dire?
Guarda: hai w uguale a 10,
Tu controlli w per 10: "if(w==10){co++; Alert(co);}" Pensi che questa espressione sia vera?
Allora perché hai questa domanda?
Controllando l'indicatore passo dopo passo, ho rilevato un rimbalzo nella subroutine dietro il if {} e in cui non c'è W. Ecco un codice semplificato per chiarire la questione:
//--- parametri di ingresso
input int w=10;
//---
{
int i;
//---
int co=0;
for(i=0;i<=w;i++)if(w==10){co++; Alert(co);}
//--- restituire il valore di prev_calculato per la prossima chiamata
return(rates_total);
}
Risultato (arlet):
2016.05.30 00:45:14.064 1 (EURUSD,H1) 11
2016.05.30 01:10:35.972 1 (EURUSD,H1) 10
........... ecc. a 1.
2016.05.30 00:45:14.064 1 (EURUSD,H1) 1
Regola: se l'espressione tra parentesi è vera, allora l'operatore1 viene eseguito.
Nel codice: l'operatore1 viene eseguito SEMPRE.
Penso che if() dovrebbe funzionare solo una volta quando la condizione tra parentesi è vera. Ma in realtà avviene ad ogni controllo, quindi tutte le espressioni in {} sono eseguite ad ogni passo e masticano il tempo della macchina.
Domande: PERCHE' la variabile CO è cresciuta da 0 a 11 durante il ciclo? Perché l'allarme viene attivato ad ogni passo?
Forum sul trading, sistemi di trading automatico e test di strategie di trading
Bug, bug, domande
Andrey Barinov, 2016.05.30 10:38
A quanto pare hai un errore di battitura nel codice, e volevi scrivere così:
Salve signori! Ho un piccolo problema quando scrivo un EA(( L'EA apre gli ordini pendenti per lo più bene, ma a volte ho bisogno di aprire ordini molto vicini al prezzo corrente, quindi come prescrivere che aprirebbe gli ordini pendenti il più vicino possibile?
Quante volte ve lo devo dire?
Guardate: avete w uguale a 10,
Controllate w per uguale a 10: "if(w==10){co++; Alert(co);}" Pensate che questa espressione sia vera?
Allora perché hai questa domanda?
Le mie scuse per la domanda stupida e grazie per la vostra pazienza e comprensione. Sono stato deluso dallo spostamento meccanico della sonda if(w==10){ Alert(I,"/",F); attraverso il programma alla ricerca di un errore nei passi. Succede a volte quando ci si scontra con un muro della propria ignoranza della ragione, ma una volta che ci si allontana dal problema per un po', la questione si risolve da sola. Quello che voi percepite come "stridente" si rivela in realtà una richiesta non giustificata di un'altra parte del programma. Grazie, Vladimir.
Ciao, puoi aiutarmi con la matematica per favore?
Come sapere quale sarà il lotto della quinta posizione, se si conosce il lotto della prima e che il lotto di ogni nuova posizione aumenta in progressione aritmetica.
La seconda opzione è che il lotto aumenta con la progressione geometrica.
Ciao, puoi aiutarmi con la matematica per favore?
Come sapere quale sarà il lotto della quinta posizione, se si conosce il lotto della prima e che il lotto di ogni nuova posizione aumenta in progressione aritmetica.
La seconda opzione è che il lotto aumenta con la progressione geometrica.
Sei stato bandito da Google? Scusa, perché sei così crudele? ))
La progressione aritmetica è definita da una formula.
laprogressione geometrica è data dalla formula
Non capisco, in teoria per la prima variante basta moltiplicare il primo lotto per 5, se aumenta del lotto di partenza
Per la seconda opzione: moltiplicatore del lotto* della prima posizione*5 ...ma
Non capisco, in teoria per la prima opzione basta moltiplicare il primo lotto per 5
Per la seconda opzione, il lotto della prima posizione * coefficiente * 5 ...ma
Va bene, anch'io ho dimenticato la matematica dai tempi della scuola )) Ho tirato fuori un libro di matematica, ho riscritto la definizione di progressione aritmetica.
-------------
Una sequenza di numeri, ognuno dei quali, a partire dal secondo, si ottiene dal precedente aggiungendo un numero costante d, chiamato differenza di una progressione aritmetica.
Se il primo termine è a1, allora il progresso aritmetico di lunghezza n ha la forma:
a1, a1+d, a1+2*d, ...., a1 + n*d
Il codice in MQL è così, ho creato un semplice esempio
Va tutto bene, anch'io ho dimenticato la matematica dai tempi della scuola ))