Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 1087

 
rabanik:
Boa tarde. Por favor, ajude-me a escrever o seguinte código, para um EA. Eu quero fazer através de uma matriz (se você tiver uma opção melhor, por favor, ajude-me). Em geral, a EA envia mensagens, mas eu quero que ela as envie através de uma matriz (temporária). Isto é, quando o início do envio da mensagem, o Expert Advisor verifica se a mensagem foi enviada mais cedo (verifica se a mensagem está armazenada na matriz), se não, ele envia a mensagem, se a mensagem é encontrada, então o envio é omitido. Espero que seja claro) Muito obrigado!

Você tem certeza sobre a declaração do problema?

Simplesmente, há opções:

- Não repita a última mensagem

- para ignorar o desatualizado (algum tempo de atraso é definido), ou seja, a mensagem deve ser repetida.

P.S. A primeira variante é um caso especial da segunda, mas é muito mais fácil de implementar. Sua definição do problema é também um caso especial da segunda variante com retardo infinito.

Se isso lhe interessa, aqui está a solução de seu problema.

Definimos duas matrizes: uma de texto, que armazena as mensagens, e uma de índice, para a busca de mensagens.

A matriz de índice é do tipo int. Na primeira dimensão, escrevemos o checksum da mensagem de texto. Na segunda - o número da linha da primeira matriz. Uma matriz de índices é classificada por primeira dimensão.

Recebemos uma nova mensagem. Leia seu checksum. Usando a função ArrayBsearch() encontre tal mensagem. Se não for encontrada, então a mensagem é original. Adicione-a à matriz de mensagens e, com referência à matriz de índice, lembrando-se de classificá-la.

Quais são as opções para o checksum? Eu levaria esta: levar em conta o número de caracteres e o checksum do texto. O checksum do texto, por exemplo, é a soma dos códigos de caracteres. Dadas as mudanças recentes, ele não pode exceder 65 536*256. Ou seja, o checksum da mensagem pode parecer como se segue:

o número de caracteres multiplicado por 10 milhões e adicionar o checksum do texto.

 

pro! há um problema com a linha no ângulo.

Eu construí umTRENDBYANGLE usando coordenadas.

ObjectCreate(0,"anglestok",OBJ_TRENDBYANGLE,0,0,0);
ObjectSet("anglestok",OBJPROP_TIME1,X1); ObjectSet("anglestok",OBJPROP_PRICE1,Y1);
ObjectSet("anglestok",OBJPROP_TIME2,X2); ObjectSet("anglestok",OBJPROP_PRICE2,Y2);

- Eu preciso de um ângulo.

anglestok= ObjectGetDouble(0,"anglestok",OBJPROP_ANGLE);

A ajuda diz que a linha criada pelo programa - o ângulo de ZERO está ok.

Eu corri o mesmo código novamente nas mesmas coordenadas sem tocar na linha - parece o número correto de graus, não zero. por quê, como posso fazer isso corretamente na primeira vez?

ou eu dei uma coordenada - peço ângulo - diz 0. depois dou outra - diz ângulo das coordenadas anteriores. besteira

 
Para quais casos eles colocam const const após a descrição da assinatura da função? Não consigo encontrar nenhuma informação sobre isto.
void qwe(int abc) const {...}
 
Não parece encontrar aqui pessoas realmente conhecedoras, apenas se inscreveram para nada =/
 
K_i_r_i_t_o:
Mudei este comentário para o início porque ninguém respondeu, mas eu realmente preciso dele =/
É possível implementar isto:se eu pressionar qualquer tecla, uma parte do código indicador é ligada (responsável por criar um objeto com um clique do mouse), então se um evento ocorre (a segunda parte do código, o evento pode ser, criando o mesmo objeto por exemplo), então a primeira parte do código é desativada (e se não fizer isto, o objeto é criado a cada clique), e também corre quando você pressiona a tecla, e assim por diante ao redor do círculo)
Você pode. Adicionar bloco OnChartEvent. Nele, acompanhe as prensas necessárias, as medidas e descreva a reação a elas de acordo com sua idéia.
 
SunnYtheDreamer:
Você pode. Adicionar bloco OnChartEvent. Nele, acompanhe as prensas necessárias, as medidas e descreva a reação a elas, de acordo com sua idéia.
Para implementar a desativação de parte do código por um período de tempo antes de pressionar a tecla é impossível =/ Existe uma variante mais fácil, mas há um problema,ao pressionar a tecla eudevoretornar seu valor para o início da primeira se a declaração
#define  VK_D 0x44
void OnChartEvent(const int id,         // идентификатор события   
                  const long& lparam,   // параметр события типа long 
                  const double& dparam, // параметр события типа double 
                  const string& sparam) // параметр события типа string 
{ 
 Comment(__FUNCTION__,": id=",id," lparam=",lparam," dparam=",dparam," sparam=",sparam);

int      y     =(int)dparam;
datetime dt    =0;
double   price =0;  
int      window=0;
int i;
int x=(int)lparam;

if (id==CHARTEVENT_CLICK)
{
ChartXYToTimePrice(0,x,y,window,dt,price);
ObjectCreate("Trend Line"+i,OBJ_TREND,0,dt,price,dt,price);
ObjectSetInteger(0,"Trend Line"+i,OBJPROP_SELECTED,true);

if(id==CHARTEVENT_KEYDOWN) 
{ switch(int(lparam)) 
{ case VK_D:
i=rand();
}}}}
 
K_i_r_i_t_o:
Não posso implementar a desativação de parte do código para o período anterior ao pressionamento da tecla =/ Existe uma maneira mais fácil, mas há um problema:eu precisoretornar seu valor ao início da primeira se declaração quando a tecla é pressionada.
if (id==CHARTEVENT_CLICK)
{
   ChartXYToTimePrice(0,x,y,window,dt,price);
   ObjectCreate("Trend Line"+i,OBJ_TREND,0,dt,price,dt,price);
   ObjectSetInteger(0,"Trend Line"+i,OBJPROP_SELECTED,true);

   if(id==CHARTEVENT_KEYDOWN) 
   {
      switch(int(lparam)) 
      {
         case VK_D: i=rand();
      }
   }
}
Este código será executado somente se o mouse for clicado. Neste caso, após 3 linhas de código, o evento de pressionar a tecla é verificado. E estas 3 linhas de código são executadas em alguns milissegundos, e mesmo que a identificação durante a chamada atual OnChartEvent seja capaz de mudar, a chance de que durante a execução de 3 linhas de código, a tecla seja pressionada = 0%. Obviamente, é inútil verificar a id, dentro de um bloco que é acionado a um determinado valor de id, e esperar lá por um valor diferente. Primeiro, verifique a tecla de pressão, em um bloco separado, salve em uma variável o número da tecla ou apenas o fato de pressionar a tecla desejada. E com esta variável, ative ou desative o pedaço de código localizado no bloco para clique do mouse.
char key = -1; //эта переменная должна быть объявлена за пределами блока OnCharEvent
if(id==CHARTEVENT_KEYDOWN)
key = lparam;

if (id==CHARTEVENT_CLICK && key == 'D')
{
   ChartXYToTimePrice(0,x,y,window,dt,price);
   ObjectCreate("Trend Line"+i,OBJ_TREND,0,dt,price,dt,price);
   ObjectSetInteger(0,"Trend Line"+i,OBJPROP_SELECTED,true);
   i=rand();
   key = -1;
}
 
SunnYtheDreamer:
Este código só será executado se o mouse for clicado, com 3 linhas de verificação de código para um evento de toque de tecla. E estas 3 linhas de código são executadas em alguns milissegundos, e mesmo que o id durante a chamada atual OnChartEvent seja capaz de mudar, a chance de que durante o tempo, execução de 3 linhas de código, a tecla será pressionada = 0%. Obviamente, é inútil verificar a id, dentro de um bloco que é acionado a um determinado valor de id, e esperar lá por um valor diferente. Primeiro, verifique a tecla de pressão, em um bloco separado, salve em uma variável o número da tecla ou apenas o fato de pressionar a tecla desejada. E com esta variável, ative ou desative o pedaço de código localizado no bloco para clique do mouse.

Muito obrigado!) Esta é a linha que eu estava procurando se (id===CHARTEVENT_CLICK && key == 'D'), não conseguisse conectar dois eventos, isto não funcionava se (id===CHARTEVENT_CLICK & id===CHARTEVENT_KEYDOWN), não conseguisse conectar dois eventos, isto não funcionava se (id===CHARTEVENT_CLICK & id===CHARTEVENT_KEYDOWN), muito obrigado mais uma vez)

 

Olá, tenho uma função que calcula o tamanho médio de uma vela a partir das últimas n velas. às vezes ela emite os seguintes valores: "5e-05.0". não preciso delas, para minha vergonha não sei quanto elas são e como cortá-las. NormalizeDouble() não ajuda. por favor me diga como calcular tais números de forma programática para cortá-los

 
pycha:

Olá, tenho uma função que calcula o tamanho médio de uma vela a partir das últimas n velas. às vezes ela emite os seguintes valores: "5e-05.0". não preciso delas, para minha vergonha não sei quanto elas são e como cortá-las. NormalizeDouble() não ajuda. por favor me diga como calcular tais números de forma programática para cortá-los


5e-05 (5*10 a -5ª potência) = 0,00005.
O que cortar, então:
if(val >= 0.00001)
Velas tão pequenas, 5 pips, somente em baixa latitude, em uma conta de 5 dígitos, em prazos baixos podem ocorrer. Se você não lida com o escalpe, mas a média às vezes é tão pequena para n velas, então a implementação da função deve ser desconfiada.
Razão: