Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 740

 

Estou apenas a duplicar a pergunta aqui, ninguém responde nos indicadores...

Comecei a estudar a MQL5. Não tenho experiência em programação e por isso tenho algumas perguntas e dúvidas. Alguns deles podem ser resolvidos por mim, analisando exemplos e, em parte, por "intuição", mas alguns aspectos são difíceis de compreender de imediato. Comecei a estudar uma coisa simples - ter duas linhas de ferramentas afixadas na janela principal do gráfico. Traço o Fecho para o instrumento actual e adicional (relacionado, a nota seguir-se-á) para o período de tempo actual por 1000 barras para trás. O instrumento relacionado é o futuro da próxima série, é ilíquido e tem sempre algumas lacunas nos dados, ou seja, o número de negócios não é tão frequente como nas séries principais de futuros. A tarefa parece estar cumprida, mas há erros. Não posso dizer se o alisamento é útil, por isso utilizei o iMA com período 1, para que se necessário possa ser alisado sem retrabalho.

Aqui estão as perguntas:

Ao compilar, quando copio o buffer iMA para uma matriz, vejo um aviso "possível perda de dados devido à conversão do tipo". O que é isto e porquê, de que tipo de conversão estamos a falar? As linhas são traçadas normalmente e nada parece faltar.

2. Após o indicador ter funcionado e as linhas dos dois instrumentos aparecerem na janela principal do gráfico, vejo que não estão sincronizados. Isto é, o primeiro instrumento é normal e corresponde à tabela de velas da janela principal. O segundo (menos líquido) tem lacunas e por isso é gradualmente "espremido", provocando a dessincronização. Preciso que seja sincronizado a tempo, de alguma forma. Isto está muito para além das minhas capacidades. Tenho de o ver visualmente para compreender o que está a faltar.

Aqui está uma imagem de ecrã de como se parece. A linha amarela é o que precisa de ser sincronizado em relação à linha verde. Para que a linha amarela, onde as lacunas nas datas são apenas "ligações" dos valores anteriores para os próximos, em vez de um aperto com datas em falta. O código está no anexo.

Arquivos anexados:
 
ottenand:

Estou apenas a duplicar a pergunta aqui, ninguém responde nos indicadores...

Comecei a estudar a MQL5. Não tenho experiência em programação e por isso tenho algumas perguntas e dúvidas. Alguns deles podem ser resolvidos por mim, analisando exemplos e, em parte, por "intuição", mas alguns aspectos são difíceis de compreender de imediato. Comecei a estudar uma coisa simples - ter duas linhas de ferramentas afixadas na janela principal do gráfico. Traço o Fecho para o instrumento actual e adicional (relacionado, a nota seguir-se-á) para o período de tempo actual por 1000 barras para trás. O instrumento relacionado é o futuro da próxima série, é ilíquido e tem sempre algumas lacunas nos dados, ou seja, o número de negócios não é tão frequente como nas séries principais de futuros. A tarefa parece estar cumprida, mas há erros. Não posso dizer se o alisamento é útil, por isso utilizei o iMA com período 1, para que, se necessário, possa ser alisado sem retrabalho.

Aqui estão as perguntas:

Ao compilar, quando copio o buffer iMA para uma matriz, vejo um aviso "possível perda de dados devido à conversão do tipo". O que é isto e porquê, de que tipo de conversão estamos a falar? As linhas são traçadas normalmente e nada parece faltar.

2. Após o indicador ter funcionado e as linhas dos dois instrumentos aparecerem na janela principal do gráfico, vejo que não estão sincronizados. Isto é, o primeiro instrumento é normal e corresponde à tabela de velas da janela principal. O segundo (menos líquido) tem lacunas e por isso é gradualmente "espremido", provocando a dessincronização. Preciso que seja sincronizado a tempo, de alguma forma. Isto está muito além das minhas possibilidades. Tenho de o ver visualmente para compreender o que está a faltar.

Aqui está uma imagem de ecrã de como se parece. A linha amarela é o que precisa de ser sincronizado em relação à linha verde. Para que a linha amarela, onde as lacunas nas datas são apenas "ligações" dos valores anteriores para os próximos, em vez de um aperto com datas em falta. O código está no anexo.


O manípulo indicador deve ter tipo int. Exemplo ver aqui:CopyBuffer

int  CopyBuffer( 
   int       indicator_handle,     // handle индикатора 
   int       buffer_num,           // номер буфера индикатора 
   int       start_pos,            // откуда начнем  
   int       count,                // сколько копируем 
   double    buffer[]              // массив, куда будут скопированы данные 
   );
 
Vladimir Karputov:


O manípulo indicador deve ser do tipo int. Exemplo ver aqui:CopyBuffer

Certo, falhei esse ponto, o erro de compilação desapareceu, obrigado!

Mas o principal problema neste momento é a diferença de tempo, ainda é relevante. Sem a sua solução será impossível realizar, por exemplo, operações matemáticas entre as ferramentas, que pretendo testar.

 
ottenand:

Certo, falhei esse ponto, o erro do tempo de compilação desapareceu, obrigado!

Mas o principal problema neste momento, a questão do calendário, continua a ser relevante. Sem a resolver, seria impossível, por exemplo, realizar operações matemáticas entre instrumentos, que tenciono testar.


Se eu fosse a si, começaria pela codificação correcta - a questão é que o seu estilo agora é um "four-way" imprudente - ou seja, não há verificações, tudo é ao acaso.

Comece a fixar OnInit():

  1. depois de obter a pega, tem de verificar se está correcta
  2. se tudo estiver correcto, devolver NÃO "0", mas "INIT_SUCCEED".
Tudo isto está no exemplo doiMA. Só então poderemos seguir em frente.

 
Vladimir Karputov:


Se eu fosse a si, começaria por escrever o código correctamente - a questão é que o seu estilo é agora um "quaternário" imprudente - ou seja, sem cheques, tudo a um capricho.

Comece a corrigir o OnInit():

  1. depois de obter a pega, tem de verificar se está correcta
  2. se ok, devolver NÃO "0" mas "INIT_SUCCEED".
Tudo isto está no exemplo doiMA. Só então se pode avançar.

Então quem lhe disse, amigo, que não se pode agrafar num cinco e escrever lindamente num quatro?

Não se trata da PLATAFORMA, trata-se da cabeça do escriba em particular.

O Professor Preobrazhensky tinha razão quando disse que não está nos armários, está nas cabeças...


 
Vladimir Karputov:


Se eu fosse a si, começaria com uma escrita de código adequada - a questão é que o seu estilo é agora um "quaternário" imprudente - ou seja, não há verificações, tudo está fora de questão.

Comece a corrigir o OnInit():

  1. depois de obter a pega, tem de verificar se está correcta
  2. se ok, devolver NÃO "0" mas "INIT_SUCCEED".
Tudo isto está no exemplo doiMA. Só então poderá seguir em frente.

Bem, agora vou saber como se chama o meu estilo) É verdade, estou a começar da versão 5, do zero)

Obrigado, corrigi os pontos 1 e 2. O problema está todo no bloco de cálculo. Vou pensar como prescrever a localização das barras de dois instrumentos de acordo com o tempo. Caso contrário há um atraso e o mesmo aviso #4806.

Arquivos anexados:
 
ottenand:

Bem, agora vou saber como se chama o meu estilo) Realmente, estou a começar da versão 5, do zero)

Obrigado, fixei os pontos 1 e 2. O problema está todo no bloco de cálculo. Vou pensar em como prescrever a localização das barras de dois instrumentos de acordo com a hora. Caso contrário, um atraso e o mesmo aviso #4806.

Certo! Assim, por exemplo, na M1 sobre os futuros "A" há bares a 13 minutos, 14 minutos e 15 minutos. Mas os futuros "B" têm barras a 13 minutos e 15 minutos apenas - ou seja, um intervalo. Havia artigos algures, procure a palavra "buraco".
 
Vladimir Karputov:
Woohoo! Correcto! Porque, por exemplo, os futuros M1 "A" têm barras a 13 minutos, 14 minutos e 15 minutos. Mas os futuros "B" têm barras a 13 minutos e 15 minutos apenas - isso é um buraco. Havia artigos algures, pesquisar pela palavra "buraco".
É disso que estou a falar) O erro #4806 parece ser a razão pela qual. OK, eu procuro-o).
 

Boa tarde.

Pode dizer-me como encontrar o preço da linha de tendência para a barra actual? Tentado através de ObjectGetDouble, mas não dá o resultado desejado. Exemplo de código:

   ObjectCreate(0,"O_Resistance",OBJ_TREND,0,UpTime_2[0],UpFractal_2,UpTime_1[0],UpFractal_1);
   ObjectMove(0,"O_Resistance",0,UpTime_2[0],UpFractal_2);
   ObjectMove(0,"O_Resistance",1,UpTime_1[0],UpFractal_1);
   ObjectSetInteger(0,"O_Resistance",OBJPROP_RAY_RIGHT,true);
   ObjectSetInteger(0,"O_Resistance",OBJPROP_COLOR,O_Resistance_Color);
   ObjectSetInteger(0,"O_Resistance",OBJPROP_STYLE,O_Resistance_Style);
   ObjectSetInteger(0,"O_Resistance",OBJPROP_WIDTH,O_Resistance_Width);


double O_ResistancePrice = ObjectGetDouble(0,"O_Resistance",OBJPROP_PRICE,0); // при любом баре дает координату изначальной точки луча, а нужна цена
                                                                              // соответствующая текущему бару или первому
 
MaksGroup:

Boa tarde.

Pode dizer-me como encontrar o preço da linha de tendência para a barra actual? Tentado através de ObjectGetDouble, mas não dá o resultado desejado. Exemplo de código:

ObjectGetValueByShift() (MT4 apenas), ObjectGetValueByTime()(MT4, MT5)