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

 
Alexey Kozitsyn:

O evento do movimento do rato não é definitivamente gerado. Com os outros, penso que é a mesma coisa.

E na EA?
 
Artyom Trishkin:
E no conselheiro?

A mesma coisa...

 
Alexey Viktorov:

A resposta foi dada antes...

Mas é melhor não a partir de uma quantidade leve, mas sobre o máximo para tentar sobreviver com uma cópia.

Não vou escrever um código de exemplo. Um programador normal só precisa de uma dica. Aqui está um algoritmo aproximado:

  1. Determinamos o número aproximado de barras em que o canal é atravessado. Que seja 15.
  2. Copiar ambos os amortecedores do indicador.
  3. Copiar os valores das barras usando CopyRates()
  4. No laço, começamos a comparar os valores do limite superior do canal e as barras altas simultaneamente com a comparação das barras baixas com o limite inferior do canal. Se uma destas passagens for encontrada, o índice de barras é armazenado numa variável, e continuamos a procurar a segunda passagem. Saímos do laço quando ambas as variáveis das barras de intersecção têm valores.

Assim, é possível encontrar duas intersecções numa cópia e um ciclo, se necessário. Não há sequer necessidade no ArraySetAsSeries() porque ao encontrar a travessia é possível e, na minha opinião, é melhor lembrar a hora do bar e não o seu número. Embora, conhecendo a hora do bar, não haja dificuldade em determinar o seu número.

Pergunta: O que será mais rápido, um ciclo com cópia do buffer do indicador por 1 valor e cópia da barra alta por 1 e comparação desses valores, ou uma única cópia de um determinado montante e comparação dos valores das duas matrizes um com o outro?

Sugiro que não se desvie do conceito, que, tal como o entendi, era copiar uma certa quantidade de dados de barras no início do código, e depois trabalhar com esses dados - ou sugere uma excepção?

E, o que o faz pensar que sou um programador?

Não creio que seja necessário adivinhar - o que será mais rápido, por vezes a resposta pode não ser óbvia - só a experiência pode dar uma resposta a tais perguntas.


 
Vladimir Karputov:

Escrevi isto ontem mesmo:

Tarefa:

em cada tick obter elementos "InpCountCopy" abertos, altos, baixos, fechados e tempo.

Implementação:

  1. loop de "0" a "InpCountCopy-1" - o loop recebe um aberto, alto, baixo, fechado e de cada vez.
  2. De uma vez, obtemos elementos "InpCountCopy" na estrutura MqlRates e depois fazemos um loop através da estrutura.

Características:

é possível escolher como verificar: em OnTick ou em OnTimer (1 segundo).

Obrigado, vou tentar dar sentido ao código.
 

Diga-me porque é que este código encontra um bilhete que ainda não está na história

  HistorySelect(0,TimeCurrent()); 
  for(int i=HistoryOrdersTotal()-1; i>=0; i--) {
   string OrdTick=IntegerToString(HistoryOrderGetTicket(i));
   if(OrdTick=="63425010") Print(OrdTick);
  }
2017.07.24 23:58:33.514 RE (EURGBP.m,H1)      63425010


 
Vitaly Muzichenko:

Diga-me porque é que este código encontra um bilhete que ainda não está na história


Já tentou procurar um comércio fechado (OUT)? Havia uma ordem - pode vê-la.

 
Vitaly Muzichenko:

Diga-me porque é que este código encontra um bilhete que ainda não está na história


É isso mesmo :

Está à procura de uma Ordem , e a Ordem para abrir Posição = 63425010 já fez a sua própria, e está na História.

E penso que o pedido de bilhetes e a posição dos bilhetes são os mesmos, o que o induziu em erro.

Se quiser analisar uma Posição, utilize PositionSelect(), depois analise as suas propriedades.

 

O que é necessário:

Enviamos uma ordem, em resposta recebemos um bilhete de posição, depois um objecto com o nome "bilhete de posição" é sorteado no gráfico (não é especificado nenhum substituto). Se abrirmos várias posições, respectivamente, há vários objectos com nomes de bilhetes no gráfico, e se depois fecharmos um deles, todos os objectos são apagados, e só precisamos de apagar o objecto com o bilhete fechado do histórico. A função de apagar funciona no OnTrade

 
Vitaly Muzichenko:

O que é necessário:

Enviamos uma ordem, em resposta recebemos um bilhete de posição, depois um objecto chamado "bilhete de posição" é sorteado no gráfico (não é especificado nenhum substituto). Se abrirmos várias posições, respectivamente, há vários objectos com nomes de bilhetes no gráfico, e se depois fecharmos um deles, todos os objectos são apagados, e só precisamos de apagar o objecto com o bilhete fechado do histórico. A função de apagar funciona no OnTrade


Do que precisa, então, de um bilhete de uma encomenda ou de um bilhete de uma posição?

 
prostotrader:

De que precisa então, um bilhete de encomenda ou um bilhete de posição?

É necessário eliminar objectos com um bilhete que já estão na história, mas não os que ainda se encontram no mercado

Duplicado:

  HistorySelect(0,TimeCurrent()); 
  for(int i=HistoryOrdersTotal()-1; i>=0; i--) {
   string OrdTick=IntegerToString(HistoryOrderGetTicket(i));
   if(OrdTick=="63425010") Print(OrdTick);
  }
2017.07.24 23:58:33.514 RE (EURGBP.m,H1)      63425010