Indicar uma nova barra - página 4

 
Donald Gibson:

Enhanced-MQL4 ?

Nunca ouvi falar disso.


Nem eu desde ontem ;) E o nome correto parece ser"Updated MQL4". A MQ escreve:

(...) A partir do build 600, a linguagem de programação MQL4 foi completamente revista atingindo o nível de MQL5- agora você pode desenvolver robôs comerciais em MQL4/5 usando o ambiente de desenvolvimento unificado MetaEditor, estilo único, bibliotecas e ferramentas de depuração.

(...) Portanto, decidimos implementar nele a máxima quantidade possível de funções e recursos da linguagem MQL5, preservando totalmente a funcionalidade MQL4. Em outras palavras, todas as funções poderosas da MQL5, incluindo ООP e o compilador de código nativo, estarão disponíveis na MQL4. (...)

Para conseguir isso, desenvolvemos um compilador unificado que suporta automaticamente tanto a linguagem MQL4 como a MQL5(...)

O problema na definição é a palavra "idiomas". A linguagem é MQL, da mesma forma que C++ é uma linguagem e Basic é uma linguagem. Updated-MQL4/MQL5 é apenas uma plataforma específica de MQL, nem mais nem menos, onde a comparação de MQL4 (nativa) e Updated-MQL4 é praticamente a mesma que com C e C++. E a migração da MQL4.com para a MQL5.com acabou de tornar a confusão perfeita. Como estes lançamentos mostram, a maioria das pessoas não associa OOP com MQL4, como eu fiz. Para mim isto sempre foi a MQL5 que suporta ambas as plataformas, MT4 e MT5.

Mas de qualquer forma, funciona muito bem e a MQLWhatever que for de longe a melhor interface em comparação com todas as outras coisas ruins ao redor.

 

@Lorentzos Roussos

Alain can correct me on this but you may find gaps in instances where on the time horizon of a bar there where no ticks , so no bar will be in place

Upppsss ... Eu não vi tal conversa. (O que não significa nada).

Eu uso meu "NewBar-indicator" para puxar as paradas automaticamente no alto ou no baixo da barra anterior.

(Na verdade, é um pouco mais difícil, pois considero "Innenstaebe e Aussenstaebe" (eng. "movimentos internos e externos" ????). Não faço idéia de qual seja a tradução correta.

Mas vou usá-la apenas em mercados líquidos que tenham pelo menos vinte - até cerca de cem carrapatos por minuto.

Acho que não vou encontrar um período de dez minutos sem qualquer tiquetaque.

De qualquer forma, o programa deve ser capaz de lidar com isso.

Obrigado!

Willbur

 
Willbur:

@Lorentzos Roussos

Upppsss ... Eu não vi tal conversa. (O que não significa nada).

Eu uso meu "NewBar-indicator" para puxar as paradas automaticamente no alto ou no baixo da barra anterior.

(Na verdade, é um pouco mais difícil, pois considero "Innenstaebe e Aussenstaebe" (eng. "movimentos internos e externos" ????). Não faço idéia de qual seja a tradução correta.

Mas vou usá-la apenas em mercados líquidos que tenham pelo menos vinte - até cerca de cem carrapatos por minuto.

Acho que não vou encontrar um período de dez minutos sem qualquer tiquetaque.

De qualquer forma, o programa deve ser capaz de lidar com isso.

Obrigado!

Willbur

você está usando o iTime , se não houver nenhuma barra nova ele não dispara de qualquer maneira.você está seguro
 
você está usando o iTime , se não houver nenhuma barra nova ele não dispara de qualquer maneira.você está seguro <br / translate="no">

O que você quer dizer com "Você está usando o iTime"? Eu entendi que "iTime" é apenas uma variável em seu programa - você pode nomeá-lo "Bert" ou "Clarly" se você quiser ?!?

- - - - -

Hoje eu fiz alguns testes. E encontrei algumas das lacunas que você mencionou.

Por exemplo, S&P500 às 20:34 há uma barra, para 20:35 e 20:36 não tenho carrapatos e não tenho barras do servidor (ActiveTrades). Os próximos tiquetaques chegaram às 20:37.

Posteriormente, não há barras no gráfico para estes períodos (ver gráfico M1 em anexo)

Eu não chequei, mas acho que também não há barras dentro da função CopyRates() para este tempo.



Eu acho que você deve verificar seu código neste momento.

Eu adivinharia, vai indicar as três primeiras marcas da barra 20:37 como novas barras.

(TimeCurrent() salta de 20:34 para 20:37! Você precisa adicionar PeriodeSeconds() três vezes para chegar lá).

void OnTick()  
{
//---   if(TimeCurrent()>=projection)   
    {Print("New Bar "+TimeToString(projection,TIME_DATE|TIME_MINUTES));   
     projection=projection+PeriodSeconds();   
    }

Willbur


 

Olá a todos,

Caso alguém ainda esteja procurando...aqui está um trecho do meu código para garantir que apenas uma profissão seja aberta por barra.

  if (iBars(Symbol(),0) == BarsCurr)DisableTrading = 1;
  
  for(i=0;i<OrdersTotal();i++)
  {
  if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == True && OrderMagicNumber() == MagicNumber) DisableTrading = 1;
  }

  for(i=OrdersTotal();i>0;i--)
  {
  if (OrderSelect (i,SELECT_BY_POS,MODE_HISTORY) == True && OrderMagicNumber() == MagicNumber)
  {
  if ((OrderClosePrice() >= Open[0] && OrderClosePrice() <= Close[0]) && (OrderOpenPrice() >= Open[0] && OrderOpenPrice()<= Close[0]))
  {
  DisableTrading = 1;
  }
   }
      }

As ibars podem ser substituídas por barras e a desativação do comércio = 1 significa que não se faz nada. A parte das barras pode ser melhor compreendida usando o que é afixado normalmente. Coloque BarsCurr = 0 na parte de inicialização e BarsCurr = Bars na parte de compra/venda do seu código.

Mas tenho um problema, estou tentando implementar a ordem de fechamento por inversão de sinal... alguma idéia?

 

Como o debate sobre o reconhecimento da NewBars se tornou um pouco mais longo, resumirei os resultados em breve.

Ambiente técnico:

Se uma mudança (novo comércio ou nova determinação de preço) for detectada pelo servidor, o servidor envia um sinal para o terminal. O programa do terminal aciona a rotina OnTick ().

Com este sinal, obtemos as seguintes informações:

Tempo atual () - o tempo do servidor quando o tick foi enviado.

Informações sobre o último tick - SymbolInfoTick()
- Tempo do servidor quando o tick surgir
- Pergunte
- Licitação
- Último preço (não com todos os fornecedores)
- uma bandeira que indica o que foi mudado.

Informações sobre a barra atual
- CopyRates()
- "nome" para o bar, por exemplo, "10:20:00".
- Aberto-Alto-Baixo-Fechado

Reconhecendo uma nova barra (por exemplo, Período = M1)

Porque o servidor só envia um sinal se algo tiver mudado,
as barras com o nome "hh.mm:00" podem ser apreendidas mais tarde do que "hh:mm:00".

Isto pode causar situações especiais para símbolos com pouca liquidez.

Soluções que lidam com a duração do período não detectam isto:

TimeCurrent() barra "nome".
Último Tick 10:10:07 10.10:00
Próximo Tick 10:11:30 10:11:00

Nether com isso (Zero ticks em um período):

TimeCurrent() barra "nome".
Último Tick 10:10:30 10:10:00
Próximo Tick 10:13:40 10:13:00 O bar 10:12:00 está faltando!

Muito raramente eu vi situações (durante uma carga muito alta no servidor?) nas quais o tempo do servidor já está trocado para o próximo período enquanto as barras não estão.

TimeCurrent() barras "nome".
Último Tick 10:10:00 10:09:00
Próximo Tick 10:10:00 10:10:00

Conclusão:

Não há problema em ir com o TimeCurrent() a fim de suprimir as copyRates() desnecessárias.

Quando o TimeCurent() atinge o novo período, é preciso verificar se a barra também é trocada.

Isto me leva de volta ao código Alain trazido à discussão muito cedo:

https://www.mql5.com/en/forum/22983

Willbur

Improve your time execution by removing Bars function calls
Improve your time execution by removing Bars function calls
  • www.mql5.com
After a basic profiling I get the following results :.
 

@emeka Mbanefo

meu manual não menciona uma função chamada "iBars".

Você tem certeza de que este é o código MQL5?

Willbur

 
Willbur:

@emeka Mbanefo

meu manual não menciona uma função chamada "iBars".

Você tem certeza de que este é o código MQL5?

Willbur

Ah, não é para mql5. é para mql4, eu acho. Ainda assim, o iBars sou eu a brincar. Suas barras como uma função geral, como eu já disse anteriormente.

Ainda à espera de assistência com o código de inversão de sinal.

Obrigado.

 
emeka Mbanefo:

Ah, não é para mql5. é para mql4, eu acho. Ainda assim, o iBars sou eu a brincar. Suas Barras como uma função geral, como eu já disse anteriormente.

Ainda à espera de assistência com o código de inversão de sinal.

Obrigado.

  • Por favor, não se aproprie de outro tópico com conteúdo não relacionado.
  • Este tópico é sobre mql5, como já afirmado.
  • Este tópico é sobre a detecção de nova barra, e não sobre o comércio apenas uma vez por barra.
  • O iBars não é confiável para detectar novas barras.
Indicate a new bar
Indicate a new bar
  • www.mql5.com
Another idea could be the check wether the number of bars has been incremented.
Razão: