Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 441
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Pode por favor dizer-me o que estou a fazer mal?
Preciso de calcular quantas barras passaram desde a última vez que o preço atravessou o MA - excluindo a 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);
}
Pode por favor dizer-me o que estou a fazer mal?
É necessário - contar quantas barras passaram desde a última vez que o preço atravessou o MA - não incluindo a 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);
}
Tanto quanto sei, uma vez identificada a travessia e estabelecida a paragem=1, há uma saída imediata do ciclo. Ok, então é preciso ir mais longe e lembrar o número da vela onde ocorreu a travessia. Isto é
É mais fácil escrevê-lo você mesmo:
Este é o número da vela que identificou. Se o número = 2 e não tiver em conta o actual, então desde que a vela de cruzamento foi formada (ou interprete-a como quiser).
Tanto quanto sei, uma vez identificado o cruzamento e estabelecida a paragem=1, há uma saída imediata do ciclo. OK, então é preciso ir mais longe e lembrar o número da vela onde ocorreu o cruzamento. Isto é
É mais fácil escrevê-lo você mesmo:
Este é o número da vela que identificou. Se o número = 2 e ignorar o actual, então uma vela formou-se desde a travessia (bem, ou interprete-a como quiser).
Obrigado, foi assim que funcionou para mim
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;
}
}
}
Pode dizer-me se esta é uma figura de teste realista? E é um resultado bom ou mau durante um ano com um depoimento de 3.000 dólares?
Obrigado, foi assim que funcionou para mim
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;
}
}
}
Não se deve escrever assim, porque se não houve crossover durante os últimos 1000 compassos, primeiro, o laço continuará, e segundo, pode fazer loop/erro, porque se a história terminar e não houver crossover, não haverá saída do laço, porque Stop = 0. É melhor escrevê-lo da forma que mencionei acima.
Não se deve escrever assim, porque se não houve cruzamento durante as últimas 1000 barras, em primeiro lugar, o ciclo continuará, e em segundo lugar, pode fazer loop/erro, porque se a história terminar e não houver cruzamento, não haverá saída do ciclo, porque Stop = 0. É melhor escrevê-lo da forma que mencionei acima.
O sinal "ou" não funciona - a condição diz que ou atinge 1000 barras ou termina assim que o resultado desejado é encontrado. Ou será mais antes de 1000 barras, se o resultado desejado, ou seja, a travessia do MA?
|| significa que se pelo menos uma das condições entre parênteses for verdadeira, o laço será repetido, portanto, mesmo quando i >= 1000, mas stop = 0, o laço continuará, i continuará a aumentar, o que causará o valor errado de MA (no caso de haver um outlier na história). E o operador de break é responsável pela terminação do loop ao encontrar o resultado desejado;
Olá 2015.09.19_02:13AM MSC. Na função ArrayResize() de qualquer forma o compilador escreve
oposto ao tamanho da matriz -- vírgula esperada, quer escreva int ou não. Se não escrever int, diz: "-.
Mudei-o sem tipo. E eu removi & referências e parênteses rectos - funcionou!
Avisos: quando foi escrito normalmente, -- o compilador escreveu: esconde o identificador
declaração a nível mundial. E quando removi a declaração de identificador a nível global, - escrevi
escreve: "Erro, identificador não declarado. E mudei as arrays High[] e Low[] para HighP[] e LowP[]. Não
ajudou. O compilador escreve a mesma coisa. 02:27 MSC. Estou a anexar um ficheiro de captura de ecrã.
Olá 2015.09.19_02:13AM MSC. Na função ArrayResize() de qualquer forma o compilador escreve
oposto ao tamanho da matriz -- vírgula esperada, quer escreva int ou não. Se não escrever int, diz: "-.
"sem tipo. E eu removi & referências e parênteses rectos - ajudou!
Avisos: quando foi escrito normalmente, -- o compilador escreveu: esconde o identificador
declaração a nível mundial. E quando removi a declaração de identificador a nível global, - escrevi
escreve: "Erro, identificador não declarado. E mudei as arrays High[] e Low[] para HighP[] e LowP[]. Não
ajudou. O compilador escreve a mesma coisa. 02:27 MSC. Estou a anexar o ficheiro de captura de ecrã.
Fórum sobre comércio, sistemas de comércio automatizados e testes estratégicos
Perguntas de principiantes
Karputov Vladimir, 2015.09.17 18:46