Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1139

 
ascerdfg:
Onde eu clico com o botão direito?

Ctrl T para trazer o menu ao fundo, Trading, Assets, ..... por último, Log. Clique no livro de registro e clique com o botão direito do mouse em uma das entradas para ver

 
Alexey Viktorov:

É possível que o preço e o tempo para as coordenadas do objeto sejam iguais a zero. Verifique desta forma: Pressione Ctrl+B, pressione o botão "Todos" no diálogo exibido e veja a lista de objetos existentes. Se houver uma, abrir propriedades e ver coordenadas.

depurado, tudo está bem quando se cria todos os objetos

 
ascerdfg:
Onde você deve clicar com o botão direito do mouse?

especialmente, rzewski: um mouse para cutucar no lugar certo

 
Maxim Kuznetsov:

Especialmente para Rzewski: um mouse para clicar no lugar certo

Para ser honesto, o método de apalpação para encontrar onde o tronco é chamado, e gostou da palavra view, pressionado. e há o log))))) E a propósito, não há como chamar o registro via contra-ataque ou o quê?

 

Boa tarde.

É possível colocar um objeto sempre acima dos outros, inclusive objetos recém colocados. Para que quando os objetos se sobrepõem, o objeto desejado nunca se sobreponha ao topo?

Inicialmente pensei que a propriedade OBJPROP_ZORDER poderia ajudar, se o objeto requerido fosse sempre ajustado ao valor mais alto. Mas, na prática, é apenas uma prioridade para a captura por clique. Visualmente, o objeto não fica mais alto do que todos eles.

Também na prática, descobri que se um objeto for desenhado por último, ele será definitivamente mais alto visualmente do que os outros. Portanto, eu tenho que criar alguma propriedade que desconheço, ou redesenhar o objeto, que não deve sobrepor o topo toda vez que o número de objetos no gráfico mudar. Mas ao redesenhar, deparei com um problema - a cintilação de um objeto que foi removido e desenhado novamente. Existe alguma maneira de redesenhar o objeto de maneira agradável, sem cintilar, ou de torná-lo não sobreposto de cima?


 
Oleg Remizov:

Boa tarde.

É possível colocar um objeto sempre acima dos outros, inclusive objetos recém colocados. Para que quando os objetos se sobrepõem, o objeto desejado nunca se sobreponha ao topo?

Inicialmente pensei que a propriedade OBJPROP_ZORDER poderia ajudar, se o objeto requerido fosse sempre ajustado ao valor mais alto. Mas, na prática, é apenas uma prioridade para a captura por clique. Visualmente, o objeto não fica mais alto do que todos eles.

Também na prática, descobri que se um objeto for desenhado por último, ele será definitivamente mais alto visualmente do que os outros. Portanto, eu tenho que criar alguma propriedade que desconheço, ou redesenhar o objeto, que não deve sobrepor o topo toda vez que o número de objetos no gráfico mudar. Mas ao redesenhar, deparei com um problema - a cintilação de um objeto que foi removido e desenhado novamente. Existe alguma maneira de redesenhar o objeto de maneira agradável, sem cintilar, ou torná-lo não sobreposto de cima?


OBJPROP_TIMEFRAMES:

OBJ_NO_PERIODS - invisível em todos os períodos,

OBJ_ALL_PERIODS - visível em todos os períodos

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
  • www.mql5.com
Комбинация флагов видимости объекта определяет таймфреймы графика, на которых объект отображаем. Для установки/получения значения свойства OBJPROP_TIMEFRAMES можно использовать функции ObjectSetInteger()/ObjectGetInteger...
 
Oleg Remizov:

Boa tarde.

É possível colocar um objeto sempre acima dos outros, inclusive objetos recém colocados. Para que quando os objetos se sobrepõem, o objeto desejado nunca se sobreponha ao topo?

Inicialmente pensei que a propriedade OBJPROP_ZORDER poderia ajudar, se o objeto requerido fosse sempre ajustado ao valor mais alto. Mas, na prática, é apenas uma prioridade para a captura por clique. Visualmente, o objeto não fica mais alto do que todos eles.

Também na prática, descobri que se um objeto for desenhado por último, ele será definitivamente mais alto visualmente do que os outros. Portanto, eu tenho que criar alguma propriedade que desconheço, ou redesenhar o objeto, que não deve sobrepor o topo toda vez que o número de objetos no gráfico mudar. Mas ao redesenhar, deparei com um problema - a cintilação de um objeto que foi removido e desenhado novamente. Existe uma maneira de redesenhar o objeto de maneira agradável, sem cintilar, ou torná-lo não sobreposto de cima?


Os objetos são exibidos de acordo com o índice:

string  ObjectName( 
   int    object_index   // номер в списке объектов
   );

Segue-se que, visualmente, o objeto com o índice mais alto estará em primeiro plano.

Eu saio desta situação da seguinte maneira:

string pref="own"; //префикс в именах своих объектов
bool CheckOtherObj(string &arrObjOther[]){
   CheckOtherObjDelete(&arrObjOther);
   for(int i=ObjectsTotal(0,-1,-1)-1; i>=0; i--){
      string name=ObjectName(0,i,-1,-1);
      if(StringFind(name,pref)>=0)continue;
      bool add=true;
      for(int k=ArraySize(arrObjOther)-1; k>=0; k--){
         if(arrObjOther[k]==name){
            add=false;
            break;
         }
      }
      if(add){
         AddToArr(name,arrObjOther);
         return(true);
      }
   }
   return(false);
}
void CheckOtherObjDelete(string &arrObjOther[]){
   string arrdel[];
   ArrayFree(arrdel);
   for(int k=0; k<ArraySize(arrObjOther); k++){
      bool add=true;
      for(int i=0; i<ObjectsTotal(0,-1,-1); i++){
         string n=ObjectName(0,i,-1,-1);
         if(StringFind(n,pref)>=0)continue;
         if(n==arrObjOther[k]){
            add=false;
            break;  
         }
      }
      if(add) AddToArr(arrObjOther[k],arrdel);
   }
   if(ArraySize(arrdel)>0){
      string temp[];
      ArrayCopy(temp,arrObjOther);
      ArrayFree(arrObjOther);
      for(int i=0; i<ArraySize(temp); i++){
         bool add=true;
         for(int k=0; k<ArraySize(arrdel); k++){
            if(arrdel[k]==temp[i]){
               add=false;
               break;
            }
         }
         if(add)AddToArr(temp[i],arrObjOther);
      }
   }
}
void AddToArr(string value, string &arr[]){
   int s=ArraySize(arr);
   ArrayResize(arr,s+1);
   arr[s]=value;
}


neste caso, tenho um conjunto de nomes de objetos em meu código que não foram criados pelo programa (outros). Assim que um novo objeto aparece, eu apago todos os objetos criados pelo programa (o meu próprio) e os crio novamente. Neste caso, os objetos próprios terão sempre o índice mais alto na lista de objetos e, portanto, visualmente estarão em primeiro plano. Mas também é necessário sempre limpar a matriz de outros objetos, no caso de sua remoção da tabela, para que a matriz não cresça incontrolavelmente.

Se você quiser controlar seus objetos, é mais fácil. Você só precisa controlar os índices de objetos.

 
Maksym Mudrakov:
Os objetos são exibidos de acordo com o índice:

segue-se que visualmente o objeto com o índice mais alto estará em primeiro plano.

É assim que eu saio desta situação:


Neste caso, meu código tem um conjunto de nomes de objetos não criados no programa (outros). Assim que aparecer outro objeto novo, eu excluo todos os objetos criados pelo programa (meu próprio) e os recrio. Neste caso, os objetos próprios sempre terão o índice mais alto na lista de objetos e, portanto, visualmente estarão em primeiro plano. Mas também é necessário sempre limpar a matriz de outros objetos, caso eles sejam excluídos da tabela, para que a matriz não cresça incontrolavelmente.

Se você quiser controlar seus objetos, é mais fácil. Você só precisa controlar os índices de objetos.

Eu mostrei acima o que fazer. Por que ir tão longe quando existe um método recomendado pelo desenvolvedor?

 
Olá.

Quero transferir o indicador ATP para a tabela de preços. Mas eu não sei como fazer isso. Quero que mostre o movimento máximo de volatilidade a partir da linha média do mesmo período. Se alguém tem o código, obrigado por compartilhá-lo.
 
Olá! não sei por onde começar, pois após um mês de busca sem sucesso, minha cabeça estava em uma terrível confusão. Decidi escrever uma mensagem neste tópico. Se estou indo para o lugar errado aqui, sinto muito. Talvez alguém diga que ramo é melhor levantar este tópico? O coração da minha pergunta é: Qual é a melhor e mais fácil maneira de obter dados no MT4 a partir de um site de terceiros para exibição posterior destas informações em um gráfico de símbolos usando o Expert Advisor, indicador ou um script? No momento estou usando meu próprio script que abre o arquivo Book1.csv no endereço "MT4 Data Directory"\MQL4\Files. Antes de executar o script tenho que iniciar o navegador Chrome, ir para a página de recursos, selecionar um símbolo nesta página, depois selecionar o tipo de dados exibidos para este símbolo (o endereço da página não muda), depois de exibir os dados para este símbolo como uma tabela com os valores dos parâmetros a uma faixa limitada de níveis de preços uso a extensão Table Capture para o navegador Chrome, copiar os dados da tabela na página de recursos para a área de transferência, depois abrir o Excel e colar os dados da área de transferência na planilha Exel. Depois converto dados numéricos em Exel (substituo vírgulas em números por pontos) e salvo o arquivo em formato csv no diretório de dados do terminal. E já depois de realizar este conjunto de ações, eu dirijo o roteiro. Obviamente, a função WebRequest não se adequa a esta tarefa, pois não há dados no endereço de página especificado no início (aparece após a seleção do instrumento e do tipo de dados). Eu ficaria grato a qualquer um que possa me dizer a direção certa (obviamente, pode haver várias direções).