Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 441
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
Potete dirmi per favore cosa sto sbagliando?
Ho bisogno di calcolare quante barre sono passate da quando il prezzo ha attraversato l'ultima MA - escludendo la barra zero.
if(Bars>1400)
{
int Stop;
double MATcycle;
for(int i=0;i!=1000 || Stop!=1; i++)
{
MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i+1);
if(MATcycle<High[i+1] && MATcycle>Low[i+1])
{
Stop=1;
Print("MATcycle=",MATcycle," i=",i);
}
else return (0);
}
Potete dirmi per favore cosa sto sbagliando?
Dovete contare quante barre sono passate dall'ultimo attraversamento della MA da parte del prezzo, esclusa la barra zero.
if(Bars>1400)
{
int Stop;
double MATcycle;
for(int i=0;i<1000 || Stop==1; i++)
{
MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i+1);
if(MATcycle<High[i+1] && MATcycle>Low[i+1])
{
Stop=1;
Print("MATcycle=",MATcycle," i=",i);
}
else return (0);
}
Per quanto ho capito, una volta identificato l'incrocio e impostato stop=1, c'è un'uscita immediata dal ciclo. Ok, allora devi andare oltre e ricordare il numero della candela in cui è avvenuto l'incrocio. Cioè
È più facile scriverlo da soli:
Questo è che avete identificato il numero della candela. Se il numero = 2 e non prendere in considerazione quello attuale, allora dal momento dell'incrocio si è formata una candela (o interpretarla come si vuole).
Per quanto ho capito, una volta identificato il crossover e impostato stop=1, c'è un'uscita immediata dal ciclo. Ok, allora devi andare oltre e ricordare il numero della candela in cui è avvenuto il crossover. Cioè
È più facile scriverlo da soli:
Questo è che avete identificato il numero della candela. Se il numero = 2 e ignora quello attuale, allora si è formata una candela dall'incrocio (bene, o interpretalo come vuoi).
Grazie, è così che ha funzionato per me
int Stop=0;
if(Bars>1400)
{
double MATcycle;
for(int i=1;(i!=1000 || Stop==0); i++)
{
MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i);
if(MATcycle<=High[i] && MATcycle>=Low[i])
{
Print("MATcycle=",MATcycle," i=",i);
Stop=i;
break;
}
}
}
Potete dirmi se si tratta di una figura realistica di tester? Ed è un risultato buono o cattivo per un anno con una deposizione di 3.000 dollari?
Grazie, è così che ha funzionato per me
int Stop=0;
if(Bars>1400)
{
double MATcycle;
for(int i=1;(i!=1000 || Stop==0); i++)
{
MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i);
if(MATcycle<=High[i] && MATcycle>=Low[i])
{
Print("MATcycle=",MATcycle," i=",i);
Stop=i;
break;
}
}
}
Non dovresti scriverlo in questo modo, perché se non c'è stato alcun crossover durante le ultime 1000 barre, in primo luogo, il ciclo continuerà, e in secondo luogo, potrebbe andare in loop/errore, perché se la storia finisce e non c'è alcun crossover, non ci sarà alcuna uscita dal ciclo, perché Stop = 0. È meglio scriverlo come ho detto sopra.
Non dovresti scriverlo in questo modo, perché se non c'è stato alcun crossover durante le ultime 1000 barre, in primo luogo, il ciclo continuerà, e in secondo luogo, potrebbe andare in loop/errore, perché se la storia finisce e non si verifica alcun crossover, non ci sarà alcuna uscita dal ciclo, perché Stop = 0. È meglio scriverlo come ho detto sopra.
Il segno "o" non funziona - la condizione dice che o raggiunge 1000 barre o finisce non appena si trova il risultato desiderato. O sarà finita prima di 1000 barre, se il risultato desiderato, cioè l'attraversamento della MA?
|| significa che se almeno una delle condizioni tra parentesi è vera, il ciclo sarà ripetuto, quindi, anche quando i >= 1000, ma stop = 0, il ciclo continuerà, i continuerà ad aumentare, il che causerà un valore MA sbagliato (nel caso ci sia un outlier nella storia). E l'operatore break è responsabile della terminazione del ciclo dopo aver trovato il risultato desiderato;
Ciao 2015.09.19_02:13AM MSC. Nella funzione ArrayResize() il compilatore scrive comunque
di fronte alla dimensione dell'array -- virgola prevista, che si scriva int o no. Se non si scrive int, dice: "-.
L'ho cambiata senza tipo. E ho rimosso il riferimento & e le parentesi quadre - ha funzionato!
Avvertenze: quando è stato scritto normalmente, -- il compilatore ha scritto: nasconde l'identificatore
dichiarazione di livello globale. Ma quando ho rimosso la dichiarazione degli identificatori a livello globale, - ha scritto
scrive: "Errore, identificatore non dichiarato. E ho cambiato gli array High[] e Low[] in HighP[] e LowP[]. Non
aiutato. Il compilatore scrive la stessa cosa. 02:27 MSC. Allego un file di screenshot.
Ciao 2015.09.19_02:13AM MSC. Nella funzione ArrayResize() il compilatore scrive comunque
di fronte alla dimensione dell'array -- virgola prevista, che si scriva int o no. Se non si scrive int, dice: "-.
"senza tipo. E ho rimosso il riferimento & e le parentesi quadre - mi ha aiutato!
Avvertenze: quando è stato scritto normalmente, -- il compilatore ha scritto: nasconde l'identificatore
dichiarazione di livello globale. E quando ho rimosso la dichiarazione degli identificatori a livello globale, - ha scritto
scrive: "Errore, identificatore non dichiarato. E ho cambiato gli array High[] e Low[] in HighP[] e LowP[]. Non
aiutato. Il compilatore scrive la stessa cosa. 02:27 MSC. Sto allegando il file dello screenshot.
Forum sul trading, sistemi di trading automatico e test di strategia
Domande dai principianti
Karputov Vladimir, 2015.09.17 18:46