Minha abordagem. O núcleo é o motor. - página 97

 
Vasiliy Sokolov:

Peter, que diabos são cordas?! Você tem um monte de parâmetros como duplo, int, cor, você os converte em um fio para escrevê-los no objeto no gráfico. Mas você não precisa de nenhum fio quando trabalha com o sindicato. Veja o exemplo novamente, lá você está trabalhando diretamente com o dobro, sem qualquer compromisso, e os dados são bem passados.

Vasiliy, além dos dados numéricos, os EAs personalizados definem uma série de dados em cadeia no motor. Nomes, mensagens, etc. Portanto, é impossível fazer apenas com números.

Por exemplo, o Conselheiro Especialista de Oleg Papkov passará textos como "A tendência subiu, a tendência desceu..." em suas janelas. Outros quererão passar textos nas células da tabela. Para os campos de entrada.

Não há como fazer só com números... ((

 

Se você precisar passar um texto, então traduza a seqüência em um conjunto de bytes:

StringToCharArray("text", u.char);

onde u é union e u.char array char[] respectivamente. A matriz da união terá um tamanho fixo, portanto, se a corda não couber, então aumente o u.char ou passe a corda em partes.

 
Vasiliy Sokolov:

Se você precisar passar um texto, então traduza a seqüência em um conjunto de bytes:

onde u é union e u.char array char[] respectivamente. A matriz sindical terá um tamanho fixo, portanto, se a corda não se encaixar, ou expandir u.char ou passar a corda em partes.

Estou vendo. Obrigado. Vou tentar agora. (Embora, eu pudesse fazer tudo através da descrição do objeto ). Mas quero compreender plenamente os recursos. Pode vir a ser útil também.

Características adicionais são sempre úteis. E alguns novos conhecimentos também não vão fazer mal...

Em resumo, muito obrigado por sua ajuda pessoal e a todos os demais.

 
Реter Konow:

Estou vendo. Obrigado. Vou tentar. (Embora, você poderia simplesmente fazer tudo através da descrição dos objetos ), mas eu quero chegar ao fundo dos recursos. Pode vir a ser útil também.

Características adicionais são sempre úteis. E alguns novos conhecimentos também não vão fazer mal...

Em resumo, muito obrigado por sua ajuda pessoal e a todos os demais.

Se você quer uma comunicação rápida, não pode fazer nada mais rápido. O fio com parâmetros você passará através dos objetos muito rapidamente, talvez até mais rápido que ResourceCreate, mas a análise deste fio matará toda a sua velocidade. Mas a MQL é uma linguagem muito rápida, e até mesmo a análise lenta é relativamente rápida aqui.

 
Vasiliy Sokolov:

Se você quer uma comunicação rápida, não pode fazer nada mais rápido do que o sindicato. Você pode passar uma corda com parâmetros através de objetos muito rápido, talvez até mais rápido que ResourceCreate, mas a análise desta corda vai matar sua velocidade. Mas a MQL é uma linguagem muito rápida, e até mesmo a análise lenta é relativamente rápida aqui.

O problema é que a análise será necessária em qualquer caso. Afinal, mesmo depois de escrever o fio no recurso, ele deve então ser extraído de lá, coletado e depois dividido em partes"número de parâmetro/valor de parâmetro".

Ou seja, dificilmente se pode obter as cordas quebradas do recurso de uma só vez. E, portanto, ainda é necessário analisar...((

 
Реter Konow:

O problema é que a análise será necessária em qualquer caso. Afinal, mesmo depois de escrever um cordel no recurso, ele deve então ser extraído de lá, coletado e depois dividido em partes"número do parâmetro / valor do parâmetro".

Ou seja, dificilmente se pode obter as cordas quebradas do recurso de uma só vez. Portanto, ainda precisamos de análise...((

Peter, você está fazendo isso de novo. Quantas vezes já aconteceu? Já foi dito muitas vezes: você passa valores e números de parâmetros sem usar strings. Em seu exemplo, você passou e conseguiu o dobro sem nenhuma análise de cordas. Então por que você está tentando colocar este duplo em uma corda novamente? Se você precisar passar uma mensagem a um usuário - você a passa como texto sem qualquer análise. É isso aí.

 
Vasiliy Sokolov:

Peter, você está nisso de novo. Quantas vezes já foi dito? Já foi dito muitas vezes: você passa e recebe valores e números de parâmetros SEM utilizar strings. Em seu exemplo, você passou e conseguiu o dobro sem nenhuma análise de cordas. Então por que você está tentando colocar este duplo em uma corda novamente? Se você precisar passar uma mensagem a um usuário - você a passa como texto sem qualquer análise. É isso aí.

Vasily, deixe-me tentar explicar.

Os valores dos parâmetros não são apenas números. Um valor de parâmetro pode ser um texto. Por exemplo, um usuário entrou com um texto no campo de entrada. Este texto é transferido do motor para o Expert Advisor. Ou, o consultor especializado envia um texto ao GUI em um evento específico, com a mensagem "Uma sessão de negociação foi iniciada!

Como em cada evento, o Expert Advisor ou o motor precisa passar dados de TODOS os tipos (int, double, long, string...), é mais conveniente passar tudo de uma só maneira, através de um string, e depois lançar para o tipo desejado.

Caso contrário, uma maneira de passar alguns dados, e outra de passar outros dados.

Ninguém sabe quais dados o usuário irá transferir ou receber mais. Talvez sejam os textos que serão os principais dados. De todos os lados, acontece que a corda, é um meio universal para transmitir e receber informações.

 
Vasiliy Sokolov:


A propósito, veja que passo em frente dei graças às nossas soluções de ontem (e à sua ajuda):

Neste exemplo particular, tudo é passado através de um recurso.



E tudo isso é feito através deste código na EA:

void OnTimer()
  { 
   static int q1,q2,q3,a,b,c,d; 
   //------------------------------------
   LOAD_CANVAS_Last_10_bars();
   //---------------------------------
   if(!a) { q1++;}
   if(q1 == 200)a = 1;
   if(a)q1--;
   if(!q1)a = 0;
   //------------------------------------  
   CIRCLE(q1,q2,q3,clrGreen);  
   TRIANGLE(q1,q1,q1 + 100,q1 + 10,q1 + 50,q1 + 200,clrRed);  
   ELLIPSE(q1,q1,q1 + q1*2,q1 +  q1,clrBlue);  
   FILLED_CIRCLE(q1,20,20,clrBlue); 
   TRIANGLE(q1 + 10,q1,q1 + 10,q1 + 100,q1 + 50,q1 + 200,clrAqua);  
   ELLIPSE(q1 + 50,q1,q1 + q1*2,q1 * q1-30,clrBlack);  
   ELLIPSE(q1 + 52,q1,q1 + q1*3,q1 * q1-32,clrMagenta); 
   ELLIPSE(q1 + 54,q1,q1 + q1*4,q1 * q1-34,clrOrange); 
   FILLED_CIRCLE(q1 + 70,q1+20,20,clrDarkCyan);        
   FILLED_CIRCLE(q3,q2,40,clrGreen); 
   //------------------------------------
   REDRAW_CANVAS();
  }
 
Реter Konow:

A propósito, veja que passo em frente dei graças às nossas soluções de ontem (e à sua ajuda):

Neste exemplo em particular, tudo é transferido através de um recurso.

Sim, parece espetacular.

 
Реter Konow:

De todos os lados, parece que o fio é um meio universal para transmitir e receber informações.

Não estou de acordo com você aqui. O cavalo de batalha universal para a transferência de informações é a matriz de bytes.

Concordo que o texto também deve ser transferido. E também concordo que é melhor passar texto como um fio. Mas, na verdade, uma cadeia é apenas uma abstração. Quando você passou textos através de objetos no gráfico, o comprimento deste texto foi limitado a 64 caracteres. Isto significa que nos bastidores você estava realmente passando um array de 64 bytes (a MQL fez todo o trabalho de converter um string em um array e de volta para você, não explicitamente). Se você está fazendo um projeto onde a troca de informações entre programas MQL é um ponto crítico e fundamental do projeto, está fora de questão deixar esta função para uma solução generalizada. Se eu fosse você, desenvolveria um sistema de transferência generalizado para tipos arbitrários, incluindo cordas, com rigoroso controle de conversão. Isto poderia ser feito com base em recursos de análise e leitura. Mas na análise de cadeia é problemático, porque não há garantia de que a cadeia analisada será válida.

Razão: