Ajuda na codificação - página 557

 
mntiwana:
Caríssimos MLADEN,

Pode ser que meu pedido anterior tenha sido acidentalmente excluído, pois a maioria das coisas correm aqui e ali, olhando e ajustando seu lugar exato, mas somos fáceis e confortáveis em fazer nosso trabalho, como um lembrete eu solicito que você faça uma simples parada com o código BE que eu quero adicionar/fusão na EA anexada que eu alterei com sua gentil ajuda e orientação, mas não estou com pressa, quando é possível para você, eu sei o quanto as coisas se espalham e esperam por você, obrigado.

cumprimentos

simples_ma_cross_eamod-hp.mq4

OK. Será feito

 
 

Olá a todos,

Obrigado por ter tomado tempo para ler meu post. Eu sou um novato absoluto quando se trata de código. Tentei algumas coisas para que este EA funcionasse, mas elas não foram a resposta. Estou estudando variáveis globais, pois acho que é preciso lembrar o que ocorreu em vez de reiniciar quando uma atualização/carga etc. ocorreu. Funciona perfeitamente em um backtest, mas por alguma razão, quando estiver funcionando ao vivo, ele simplesmente deixará de fazer negócios ou fechá-los e eu simplesmente não consigo descobrir. Também estou tentando aprender a fazer estas coisas, mas só estou começando a me perdoar se fizer as coisas da maneira errada. A EA tem um tempo de partida e parada e nesse tempo pode abrir x negócios e quando isso fecha, então um ciclo se completa. Ele está configurado para permitir apenas 1 ciclo por período de tempo.

Alguém pode olhar para este código para ver qual é o problema, por favor. Muito obrigado por qualquer ajuda.

maa1

quantum_shaolin_1.3.2.mq4

quantum.mq4

Arquivos anexados:
 

Olá Mladen,

Tenho um indicador de scanner que informa quantos indicadores indicam uma oportunidade de compra ou venda em um determinado símbolo, e ele escaneia o símbolo em vários períodos de tempo.

O problema é que o indicador diz que sempre há indicadores indicando, mesmo quando na verdade não há. Quando este é o caso, a quantidade do indicador é sempre o mesmo número.

Por favor, olhe o código abaixo:

double BufferALL[22];

int Timeframe[7][3]={15,,, 60,,, 240,,, 1440,,, 10080,,, 43200,, ,,};

for(x=0; x<=5; x++) {

if ((SymbolBars[y][x]==iBars(symbol[y],Timeframe[x][0]))&&(SymbolBars[y][x+1]==iBars(symbol[y],Timeframe[x+1][0]))) continue;

BufferALL[0]=indi1(symbol[y],Timeframe[x][0]);

//BufferALL[1]=ind2i(symbol[y],Timeframe[x][0]);

BufferALL[2]=ind3i(symbol[y],Timeframe[x][0]);

BufferALL[3]=ind4i(symbol[y],Timeframe[x][0]);

BufferALL[4]=ind5i(symbol[y],Timeframe[x][0]);

BufferALL[5]=indi(symbol[y],Timeframe[x][0]);

BufferALL[6]=indi(symbol[y],Timeframe[x][0]);

BufferALL[7]=indi(symbol[y],Timeframe[x][0]);

BufferALL[8]=indi(symbol[y],Timeframe[x][0]);

BufferALL[9]=indi(symbol[y],Timeframe[x][0]);

BufferALL[10]=indi(symbol[y],Timeframe[x][0]);

BufferALL[11]=indi(symbol[y],Timeframe[x][0]);

BufferALL[12]=indi(symbol[y],Timeframe[x][0]);

BufferALL[13]=indi(symbol[y],Timeframe[x][0]);

BufferALL[14]=indi(symbol[y],Timeframe[x][0]);

BufferALL[15]=indi(symbol[y],Timeframe[x][0]);

BufferALL[16]=indi(symbol[y],Timeframe[x][0]);

BufferALL[17]=indi(symbol[y],Timeframe[x][0]);

BufferALL[18]=indi(symbol[y],Timeframe[x][0]);

BufferALL[19]=indi(symbol[y],Timeframe[x][0]);

BufferALL[20]=indi(symbol[y],Timeframe[x][0]);

BufferALL[21]=indi(symbol[y],Timeframe[x][0]);

for(z=0; z<=14; z++){

if (BufferALL[z] >=534653647457) Timeframe[x][1]=Timeframe[x][1]+1;

if (BufferALL[z] <=543456346463) Timeframe[x][2]=Timeframe[x][2]+1;

}

for(z=15; z<=21; z++){

if (BufferALL[z] >= 22345654) Timeframe[x][2]=Timeframe[x][2]+1; //>

if (BufferALL[z] <= 11111111111) Timeframe[x][1]=Timeframe[x][1]+1; //<

}

} // end of timeframe loop 6 iterations

Quando tudo é exibido em uma mensagem de alerta eu recebo algo como EURUSD: 15m/60m/4u/1d/1w/1mo está indicando uma oportunidade de compra 7/7/7/7/7/7/7/7/7/.

Isto significa que ele somou 7 indicadores para cada período de tempo, o que claramente está errado. Ele até afirma isto quando eu retiro todas as chamadas de função. Quando faço isto, todos os elementos de BufferALL[] estão vazios.

Mas, aparentemente, o valor VAZIO ainda é um valor que pode ser comparado com outro valor como 534653647457, por exemplo. Quando eu uso a comparação >= ou = 534653647457 a == 534653647457 as mensagens /7/7/7/7/7/7/7/7/7 param. Como posso remediar isto?

 
mrcodix:
Olá Mladen,

Tenho um indicador de scanner que informa quantos indicadores indicam uma oportunidade de compra ou venda em um determinado símbolo, e ele escaneia o símbolo em vários períodos de tempo.

O problema é que o indicador diz que sempre há indicadores indicando, mesmo quando na verdade não há. Quando este é o caso, a quantidade do indicador é sempre o mesmo número.

Por favor, olhe o código abaixo:

double BufferALL[22];

int Timeframe[7][3]={15,,, 60,,, 240,,, 1440,,, 10080,,, 43200,, ,,};

for(x=0; x<=5; x++) {

if ((SymbolBars[y][x]==iBars(symbol[y],Timeframe[x][0]))&&(SymbolBars[y][x+1]==iBars(symbol[y],Timeframe[x+1][0]))) continue;

BufferALL[0]=indi1(symbol[y],Timeframe[x][0]);

//BufferALL[1]=ind2i(symbol[y],Timeframe[x][0]);

BufferALL[2]=ind3i(symbol[y],Timeframe[x][0]);

BufferALL[3]=ind4i(symbol[y],Timeframe[x][0]);

BufferALL[4]=ind5i(symbol[y],Timeframe[x][0]);

BufferALL[5]=indi(symbol[y],Timeframe[x][0]);

BufferALL[6]=indi(symbol[y],Timeframe[x][0]);

BufferALL[7]=indi(symbol[y],Timeframe[x][0]);

BufferALL[8]=indi(symbol[y],Timeframe[x][0]);

BufferALL[9]=indi(symbol[y],Timeframe[x][0]);

BufferALL[10]=indi(symbol[y],Timeframe[x][0]);

BufferALL[11]=indi(symbol[y],Timeframe[x][0]);

BufferALL[12]=indi(symbol[y],Timeframe[x][0]);

BufferALL[13]=indi(symbol[y],Timeframe[x][0]);

BufferALL[14]=indi(symbol[y],Timeframe[x][0]);

BufferALL[15]=indi(symbol[y],Timeframe[x][0]);

BufferALL[16]=indi(symbol[y],Timeframe[x][0]);

BufferALL[17]=indi(symbol[y],Timeframe[x][0]);

BufferALL[18]=indi(symbol[y],Timeframe[x][0]);

BufferALL[19]=indi(symbol[y],Timeframe[x][0]);

BufferALL[20]=indi(symbol[y],Timeframe[x][0]);

BufferALL[21]=indi(symbol[y],Timeframe[x][0]);

for(z=0; z<=14; z++){

if (BufferALL[z] >=534653647457) Timeframe[x][1]=Timeframe[x][1]+1;

if (BufferALL[z] <=543456346463) Timeframe[x][2]=Timeframe[x][2]+1;

}

for(z=15; z<=21; z++){

if (BufferALL[z] >= 22345654) Timeframe[x][2]=Timeframe[x][2]+1; //>

if (BufferALL[z] <= 11111111111) Timeframe[x][1]=Timeframe[x][1]+1; //<

}

} // end of timeframe loop 6 iterations

Quando tudo é exibido em uma mensagem de alerta eu recebo algo como EURUSD: 15m/60m/4u/1d/1w/1mo está indicando uma oportunidade de compra 7/7/7/7/7/7/7/7/7/.

Isto significa que ele somou 7 indicadores para cada período de tempo, o que claramente está errado. Ele até afirma isto quando eu retiro todas as chamadas de função. Quando faço isto, todos os elementos de BufferALL[] estão vazios.

Mas, aparentemente, o valor VAZIO ainda é um valor que pode ser comparado com outro valor como 534653647457, por exemplo. Quando eu uso a comparação >= ou = 534653647457 a == 534653647457 as mensagens /7/7/7/7/7/7/7/7/7 param. Como posso remediar isto?

mrcodix

Sem saber exatamente o que os indicadores fazem (quais são seus valores de retorno) tudo o que posso fazer são palpites selvagens, e isso não ajudaria em nada

 
mladen:

mrcodix

Sem saber exatamente o que os indicadores fazem (quais são seus valores de retorno) tudo o que posso fazer são palpites selvagens, e isso não ajudaria em nada

Prezado Mladen,

Não é preciso conhecer os valores de retorno porque não são os indicadores que são os culpados. Você vê, o mesmo problema surge quando eu desabilito todas as funções de chamada adicionando um "//" na frente de cada linha de código (transformando-as em linhas de comentário). O mesmo vale para os valores por trás do = nesta parte:

for(z=0; z<=14; z++){

if (BufferALL[z] >=534653647457) Timeframe[x][1]=Timeframe[x][1]+1;

if (BufferALL[z] <=543456346463) Timeframe[x][2]=Timeframe[x][2]+1;

}

for(z=15; z<=21; z++){

if (BufferALL[z] >= 22345654) Timeframe[x][2]=Timeframe[x][2]+1; //>

if (BufferALL[z] <= 11111111111) Timeframe[x][1]=Timeframe[x][1]+1; //<

}[/CODE]

it might aswell be something like

for(z=0; z<=14; z++){

if (BufferALL[z] >=1111111111111) Timeframe[x][1]=Timeframe[x][1]+1;

if (BufferALL[z] <=2222222222222) Timeframe[x][2]=Timeframe[x][2]+1;

}

for(z=15; z<=21; z++){

if (BufferALL[z] >= 333333333333) Timeframe[x][2]=Timeframe[x][2]+1; //>

if (BufferALL[z] <= 444444444444) Timeframe[x][1]=Timeframe[x][1]+1; //<

}

it will give the same exact alert message that says /15m/60m/4u/1d/1w/1mo/ is indicating a buying opportunity /7/7/7/7/7/7/. I disabled all the function call lines with // so the BufferALL[22] elements should be EMPTY, they shoulden't contain any value whatsoever. Yet, when the computer comes at the if condition parts BufferALL[z] >=1111111111111 etc it ALWAYS states that the "value" thats inside BufferALL[z] is larger then 11111111111 (or any value you wish to put behind it). The only way to make these additions stop is by changing the if condition = into ==. When the computer asks whether the empty value of BufferALL[z] is exactly the same as 11111111 or 22222 or whatever value you wish to compare, it doesen't return a true and Timeframe is not added with +1. Please try it for youself. I will add the message construction code below:

[CODE]

int SymbolBars[216][7];

if (((Timeframe[0][1] > 0) && (Timeframe[1][1] > 0) && (SymbolBars[y][0]!=iBars(symbol[y],Timeframe[0][0]))&&(SymbolBars[y][1]!=iBars(symbol[y],Timeframe[1][0]))) || ((Timeframe[1][1] > 0) && (Timeframe[2][1] > 0)&& (SymbolBars[y][1]!=iBars(symbol[y],Timeframe[1][0]))&&(SymbolBars[y][2]!=iBars(symbol[y],Timeframe[2][0]))) || ((Timeframe[2][1] > 0) && (Timeframe[3][1] > 0)

&& (SymbolBars[y][2]!=iBars(symbol[y],Timeframe[2][0]))&&(SymbolBars[y][3]!=iBars(symbol[y],Timeframe[3][0]))) || ((Timeframe[3][1] > 0) && (Timeframe[4][1] > 0) && (SymbolBars[y][3]!=iBars(symbol[y],Timeframe[3][0]))&&(SymbolBars[y][4]!=iBars(symbol[y],Timeframe[4][0]))) || ((Timeframe[4][1] > 0) && (Timeframe[5][1] > 0)&& (SymbolBars[y][4]!=iBars(symbol[y],Timeframe[4][0])) &&(SymbolBars[y][5]!=iBars(symbol[y],Timeframe[5][0]))))

{

if (Timeframe[0][1]>0)

{

StringAdd(alarmbericht,"15m/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[0][1],"/"));

SymbolBars[y][0]=iBars(symbol[y],15);

}

if (Timeframe[1][1]>0)

{

StringAdd(alarmbericht,"60m/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[1][1],"/"));

SymbolBars[y][1]=iBars(symbol[y],60);

}

if (Timeframe[2][1]>0)

{

StringAdd(alarmbericht,"4u/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[2][1],"/"));

SymbolBars[y][2]=iBars(symbol[y],240);

}

if (Timeframe[3][1]>0)

{

StringAdd(alarmbericht,"1d/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[3][1],"/"));

SymbolBars[y][3]=iBars(symbol[y],1440);

}

if (Timeframe[4][1]>0)

{

StringAdd(alarmbericht,"1w/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[4][1],"/"));

SymbolBars[y][4]=iBars(symbol[y],10080);

}

if (Timeframe[5][1]>0)

{

StringAdd(alarmbericht,"1mo/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[5][1],"/"));

SymbolBars[y][5]=iBars(symbol[y],43200);

}

Alert(+symbol[y]+" "+alarmbericht+" are indicating a selling opportunity. " +indicatoraantal+".");

alarmbericht = "";

indicatoraantal = "";

}

if (((Timeframe[0][2] > 0) && (Timeframe[1][2] > 0) && (SymbolBars[y][0]!=iBars(symbol[y],Timeframe[0][0]))&&(SymbolBars[y][1]!=iBars(symbol[y],Timeframe[1][0]))) || ((Timeframe[1][2] > 0) && (Timeframe[2][2] > 0)&& (SymbolBars[y][1]!=iBars(symbol[y],Timeframe[1][0]))&&(SymbolBars[y][2]!=iBars(symbol[y],Timeframe[2][0]))) || ((Timeframe[2][2] > 0) && (Timeframe[3][2] > 0)

&& (SymbolBars[y][2]!=iBars(symbol[y],Timeframe[2][0]))&&(SymbolBars[y][3]!=iBars(symbol[y],Timeframe[3][0]))) || ((Timeframe[3][2] > 0) && (Timeframe[4][2] > 0) && (SymbolBars[y][3]!=iBars(symbol[y],Timeframe[3][0]))&&(SymbolBars[y][4]!=iBars(symbol[y],Timeframe[4][0]))) || ((Timeframe[4][2] > 0) && (Timeframe[5][2] > 0)&& (SymbolBars[y][4]!=iBars(symbol[y],Timeframe[4][0])) &&(SymbolBars[y][5]!=iBars(symbol[y],Timeframe[5][0]))))

{

if (Timeframe[0][2]>0)

{

StringAdd(alarmbericht,"15m/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[0][2],"/"));

SymbolBars[y][0]=Bars(symbol[y],15);

}

if (Timeframe[1][2]>0)

{

StringAdd(alarmbericht,"60m/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[1][2],"/"));

SymbolBars[y][1]=Bars(symbol[y],60);

}

if (Timeframe[2][2]>0)

{

StringAdd(alarmbericht,"4u/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[2][2],"/"));

SymbolBars[y][2]=Bars(symbol[y],240);

}

if (Timeframe[3][2]>0)

{

StringAdd(alarmbericht,"1d/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[3][2],"/"));

SymbolBars[y][3]=Bars(symbol[y],1440);

}

if (Timeframe[4][2]>0)

{

StringAdd(alarmbericht,"1w/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[4][2],"/"));

SymbolBars[y][4]=Bars(symbol[y],10080);

}

if (Timeframe[5][2]>0)

{

StringAdd(alarmbericht,"1mo/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[5][2],"/"));

SymbolBars[y][5]=Bars(symbol[y],43200);

}

Alert(+symbol[y]+" "+alarmbericht+" are indicating a buying oppertunity. " +indicatoraantal+".");

alarmbericht = "";

indicatoraantal = "";

}
 

Mladen,

Aqui está um exemplo das mensagens de alerta contínuo quando eu removo todas as chamadas do indicador transformando-as em linhas de comentário.

Quando se trata de uma oportunidade de compra, todas as somas dos indicadores em todos os períodos de tempo possíveis são 15. Quando se trata de uma oportunidade de venda é 7. O BufferALL[] é VAZIO, portanto isto não faz sentido algum.

Finalmente, eu gostaria de mencionar algo fora do tópico. No passado, eu perguntei algo sobre o indicador de varredura de múltiplos símbolos sucessivamente. Estava me perguntando se ele não receberia todos os ticks nos símbolos que mudam com mais freqüência quando o indicador é anexado a um gráfico do qual o símbolo atual não é atualizado com tanta freqüência (menos ticks por segundo). Isso significaria que, em teoria, o indicador ainda está na barra de 5 minutos de 20:05, enquanto que os símbolos de atualização mais rápida que também se supõe que seja escaneado já estão às 20:10. Simplesmente porque uma nova barra começa no primeiro tique depois das 20:04:59, e não quando o relógio chega às 20:05:00. Você respondeu a isto dizendo que todos os símbolos serão verificados com uma velocidade de verificação fixa porque na nova versão do metatrader o procedimento de início {retorno} não é mais ativado em cada novo tick. Ao invés disso, é ativado em uma velocidade fixa. Isto acabou não sendo verdade. Depois de transformar todos os meus indicadores em funções que estão incluídas no próprio código do meu indicador do scanner, o indicador inteiro ainda congelou o mt4 quando eu o executei. Portanto, usar iCustom() para chamar o código ou inserindo o código e transformando-o em uma função interna não faz diferença alguma, ele ainda congela. Mas eu encontrei uma solução para isso, abandonando a 215 iteração longa mestre para loop (cada iteração um símbolo diferente fora de símbolo[y] está sendo tratada) e substituindo-a por uma variável que recebe uma adição após cada tick. Eu uso isto para dizer ao computador qual símbolo ele deve usar agora em vez de tentar analisar todos os 216 símbolos em cada tique-taque (o que faz tudo congelar), apenas um símbolo está sendo analisado em cada tique-taque. Quando a variável de adição atinge 215, ela é zerada novamente para 0 e todo o ciclo 216 recomeça. Agora todos os símbolos estão sendo analisados embora um pouco mais lentamente do que quando eles teriam sido analisados todos os 216 em cada tick (se não tivesse congelado fora do curso).... De qualquer forma. A questão é que o Start{} só é ativado quando o símbolo atual no gráfico está sendo atualizado. Isto significa que leva mais tempo para percorrer todos os 216 símbolos quando o indicador é um símbolo menos ativo (como uma ação) em oposição a um símbolo muito ativo (como EURUSD). Portanto, Start{} ainda é ativado a cada novo tick.

Arquivos anexados:
 

Olá Mladen e Mrtools, peço um grande prazer.

Seria gentil resolver o problema de dois erros ao compilar o indicador anexo.

Agradecemos antecipadamente

Moreno

PS: Sinto muito pelo meu inglês :-)

Arquivos anexados:
 
morenokosta:
Olá Mladen e Mrtools, peço um grande prazer.

Seria gentil resolver o problema de dois erros ao compilar o indicador anexado.

Agradecemos antecipadamente

Moreno

PS: Sinto muito pelo meu inglês :-)

morenokosta

Esse indicador nos indica OK como está

Não há necessidade de fazer qualquer mudança de código

 

Olá Mladen

Você pode, por favor, acrescentar alerta a este indicador, sou um novato.

Thanx

Arquivos anexados:
cross.mq4  2 kb
Razão: