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

 
Alexey Kozitsyn:
Assumindo que a última encomenda por tempo não é a última encomenda da lista, o seu exemplo não está correcto, porque não tem em conta a primeira encomenda (#0).

O bilhete da última encomenda no tempo é encontrado primeiro, e depois é feito um ciclo com modificações. Quando um bilhete previamente encontrado da última encomenda é encontrado no laço, ele é ignorado.

Para encontrar o bilhete da última encomenda, não precisamos de pesquisar toda a história de todas as encomendas - podemos definir o tamanho da história pesquisada - um dia, dois, três, uma semana... "E saltar todas as encomendas com o tempo, que é mais cedo do que o intervalo de pesquisa. Por exemplo: o tamanho do histórico de pesquisa é definido para 1 dia - todas as encomendas, que foram anteriores à hora actual - um dia, são ignoradas. Mas ainda precisamos do ciclo. Se aceitarmos apenas a última encomenda da lista, esta pode ser Comprar, e precisamos de Vender. É o último mas único. Assim, não iremos obter os seus dados.

 
Artyom Trishkin:

O bilhete da última encomenda no tempo é encontrado primeiro, e depois é feito um ciclo com modificações. Quando um bilhete previamente encontrado da última encomenda é encontrado no laço, ele é ignorado.

Para procurar o bilhete da última encomenda, não precisa de percorrer todo o histórico de todas as encomendas - pode definir o tamanho do histórico procurado - um dia, dois, três, uma semana... "E saltar todas as encomendas com o tempo, que é mais cedo do que o intervalo de pesquisa. Por exemplo: o tamanho do histórico de pesquisa é definido para 1 dia - todas as encomendas, que foram anteriores à hora actual - um dia, são ignoradas. Mas ainda precisamos do ciclo. Se aceitarmos apenas a última encomenda da lista, esta pode ser Comprar, e precisamos de Vender. É o último mas único. Assim, não iremos obter os seus dados.

Artem, obrigado pela explicação, claro, mas sei como encontrar a ordem na lista. E a minha resposta não foi para si, mas para Alexei no seu exemplo (em particular, que a condição "> 0" não vai funcionar).

É melhor escrever da forma correcta (apenas com código). Sou preguiçoso :)

 
Alexey Kozitsyn:
Se supomos que a última encomenda não é a última da lista, o seu exemplo está incorrecto porque não considera a primeira encomenda (encomenda 0).

Como pode não o fazer?

Alexey Viktorov:

Uma variante adicional: Antes do laço, escreva na variável _1 um bilhete, por exemplo, de uma ordem zero, e depois

/********************Script program start function********************/
void OnStart()
{
  int i, t1, t2, modTicket , total = OrdersTotal();
   datetime d1, d2;
    if(OrderSelect(0, SELECT_BY_POS))
     {
      t1 = OrderTicket();
       d1 = OrderOpenTime();
     }    
    for(i = 1; i < total; i++)
     {
      if(OrderSelect(i, SELECT_BY_POS))
       {
        t2 = OrderTicket();
         d2 = OrderOpenTime();
          modOrder((d1 < d2) ? t1 : t2);
         t1 = d1 < d2 ? t2 : t1;
        d1 = d1 < d2 ? t2 : t1;
       }
     }
}/********************************************************************/

void modOrder(int ticket);
{
// здесь код модификации ордера.
}/********************************************************************/
Espero não ter feito asneira em mais nada.
 
Alexey Viktorov:

Como pode não o fazer?

/********************Script program start function********************/
void OnStart()
{
  int i, t1, t2, modTicket , total = OrdersTotal();
   datetime d1, d2;
    if(OrderSelect(0, SELECT_BY_POS))
     {
      t1 = OrderTicket();
       d1 = OrderOpenTime();
     }    
    for(i = 1; i < total; i++)
     {
      if(OrderSelect(i, SELECT_BY_POS))
       {
        t2 = OrderTicket();
         d2 = OrderOpenTime();
          modOrder((d1 < d2) ? t1 : t2);
         t1 = d1 < d2 ? t2 : t1;
        d1 = d1 < d2 ? t2 : t1;
       }
     }
}/********************************************************************/

void modOrder(int ticket);
{
// здесь код модификации ордера.
}/********************************************************************/
Espero não ter percebido mais nada de errado, não voltei a verificar...
Se o tomarmos como um arranque, está bem, mas é melhor fazê-lo a partir do fim... Embora, se não se eliminarem as encomendas, também não há problema.
 
Alexey Kozitsyn:
Se a tomar como variante inicial, serve, mas é melhor fazê-lo a partir do fim... Embora, se não tivermos de eliminar as encomendas, também estaremos bem.

De facto, para modificar várias ordens, é necessário passar por elas em loop. Assim, acontece que os microssegundos adicionais serão gastos apenas na comparação do tempo de abertura da encomenda. Esta será uma variante ideal.

A direcção do ciclo ... Não tem realmente importância porque não se trata de fechar encomendas. Confundi a minha versão anterior e escrevi "fechar", por isso o laço correspondia lá também...

 

Boa tarde!

Estou a tentar escrever um indicador. Quero obter visualmente o que desejei, mas quero que o indicador envie a informação necessária, por exemplo, informação textual, ou tipo int. Como o posso fazer, tendo em conta que tenho 10 amortecedores, segundo os quais as linhas são desenhadas? Obrigado!

 

Boa tarde, não me pontapeies, mas encontrei este cabeçalho e decidi fazer algumas perguntas ... Tenho um terminal ... Descarreguei de um corretor MT4 (1) ... fiz a demonstração ... depois de algum tempo registrado em outro, também

Foi-me oferecido para descarregar o terminal ... descarregado (2) como resultado, 2 terminais não vão ... e 1 apareceu perfil 2 corretor ... em geral, todos confusos ... então do binário vem uma carta que passam para MT5 ... instalado e à primeira vista, tudo muito melhor do que o MT4 . A minha pergunta é se é possível abrir uma conta com diferentes corretores num único terminal? e posso transferi-los todos para o mt5 ? e se os indicadores do fato MT4 a 5 ?

obrigado ...

 

Uma ajuda tão activa, muito obrigado.

Já a debater-se com um novo problema)

Ajude-me por favor a descobrir o facto do novo aparecimento do vértice ZigZag.

Tentei armazenar numa variável o preço do primeiro vértice, depois compará-lo, se o preço mudou levantar uma bandeira, há um novo vértice.
if(newZZH1_PR!=GetExtremumZZPrice(Symbol(),T_F_,1))
{
   newZZH1_PR=GetExtremumZZPrice(Symbol(),T_F_,1);
   newZZH1=true;
}

Mas verificou-se que a função, ao longo do tempo, regressa caótica, depois o preço do primeiro vértice, depois o segundo.

Acontece que o novo topo não é formado e a bandeira é hasteada.
double GetExtremumZZPrice(string sy="", int tf=0, int ne=0)
{

  if (sy=="" || sy=="0") sy=Symbol();
  double zz;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=1; i<k; i++) {
    zz=iCustom(sy, tf, "ZigZag", ExtDepth,ExtDeviation,ExtBackstep, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(zz);
    }
  }
  Print("GetExtremumZZPrice(): Экстремум ЗигЗага номер ",ne," не найден");
  return(0);
}
O ideal seria que a função fosse ajustada de modo a devolver sempre o preço do primeiro vértice, mas eu ficaria feliz com qualquer solução.
 
mila.com:

Uma ajuda tão activa, muito obrigado.

Já a debater-se com um novo problema)

Ajude-me por favor a descobrir o facto do novo aparecimento do vértice ZigZag.

Tentei lembrar numa variável o preço do primeiro vértice, depois comparar, se o preço mudou levantar uma bandeira, há um novo vértice.
if(newZZH1_PR!=GetExtremumZZPrice(Symbol(),T_F_,1))
{
   newZZH1_PR=GetExtremumZZPrice(Symbol(),T_F_,1);
   newZZH1=true;
}

Mas verificou-se que a função, com o tempo, regressa caótica, depois o preço do primeiro vértice, depois o segundo.

Acontece que não se forma um novo vértice, mas a bandeira é hasteada.
double GetExtremumZZPrice(string sy="", int tf=0, int ne=0)
{

  if (sy=="" || sy=="0") sy=Symbol();
  double zz;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=1; i<k; i++) {
    zz=iCustom(sy, tf, "ZigZag", ExtDepth,ExtDeviation,ExtBackstep, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(zz);
    }
  }
  Print("GetExtremumZZPrice(): Экстремум ЗигЗага номер ",ne," не найден");
  return(0);
}
O ideal seria que a função fosse ajustada de modo a devolver sempre o preço do primeiro vértice, mas eu ficaria feliz com qualquer solução.

O ziguezague tem na realidade três amortecedores - 0 total, 1 - o extremo superior, 2 - o extremo inferior.

Na barra zero, há sempre um valor em alguns dos amortecedores - ou no primeiro (se o joelho estiver para cima) ou no segundo (se estiver para baixo). Consequentemente, o tampão zero na vela actual tem sempre um valor - ou do primeiro tampão ou do segundo.

Bem, para encontrar um extremo superior inequívoco, devemos procurar o primeiro valor não vazio do primeiro tampão, a partir da barra 1. Para o extremo inferior, precisamos de encontrar o primeiro valor não em branco do segundo tampão, a partir da barra 1.

A fim de saber se se trata de um novo topo ou fundo, precisamos de recordar o tempo do topo/plano anterior encontrado, e compará-lo com o que encontrámos até agora.

É divagação, mas esperemos que compreenda...

 
Existem dois terminais MT5. Tarefa: posso escrever guiões para permitir apenas negócios longos num terminal e apenas negócios curtos no outro?
Razão: