Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 144

 
Ihor Herasko:

Sim, é claro. A função é universalmente escrita. Se o abordarmos a cada tick, o loop percorre todo o histórico da conta. E o histórico da conta pode ser bastante profundo (já encontrei casos em que havia mais de 100 000 pedidos). Para acelerar a execução, não é necessário fazer o loop em toda a história toda vez. É suficiente fazê-lo apenas uma vez no início e lembrar o índice do último pedido processado. A próxima vez que você precisar passar pelo loop somente para os pedidos que têm um índice maior do que o índice armazenado. Depois disso, lembre-se novamente do índice da última encomenda, e assim por diante.

Obrigado pela explicação detalhada. Agora eu sei qual o caminho a seguir, por assim dizer. A propósito, a conta demo funcionou bem com 5 EAs, no sentido de que nenhuma negociação foi aberta mais de uma vez durante a data atual e não houve atraso na abertura das 5 posições EA.
 
Vitaly Muzichenko:

A culpa é da propagação flutuante.

Também pensei que no início, mas também é verdade para pares com spread fixo (como DAX30) e para redes que consistem de pedidos em uma direção (incluindo um pedido) - neste caso o spread é irrelevante (um preço determina o lucro - ou apenas Bid ou apenas Ask).

Vitaly, eu entendi de sua resposta que não há erro óbvio nas fórmulas?

 
Igor Zakharov:

Também pensei que no início, mas também é verdade para pares com spread fixo (como DAX30) e para redes que consistem de pedidos em uma direção (incluindo um pedido) - neste caso o spread é irrelevante (um preço define o lucro - ou apenas Bid ou apenas Ask).

Vitaliy, eu entendi de sua resposta que não há erro óbvio nas fórmulas?

Aqui está a fórmula do trabalhador:

 double poi=SymbolInfoDouble(mSymbol,SYMBOL_POINT);
 int dig=(int)SymbolInfoInteger(mSymbol,SYMBOL_DIGITS);
 double TickValue=SymbolInfoDouble(mSymbol,SYMBOL_TRADE_TICK_VALUE);

 double BuyAwerage=0,SellAwerage=0;
  if(_GetP.Buy._Lots>0)  BuyAwerage= NormalizeDouble(bid-(_GetP.Buy._AllProfit/( TickValue*_GetP.Buy._Lots ))*poi,dig);
  if(_GetP.Sell._Lots>0) SellAwerage=NormalizeDouble(ask+(_GetP.Sell._AllProfit/(TickValue*_GetP.Sell._Lots))*poi,dig);
 
Vitaly Muzichenko:

Aqui está a fórmula do trabalhador:

Ou seja, o análogo completo. Minha fórmula é ainda um pouco mais universal - em geral o tamanho do tick pode não ser igual a um ponto (muitas vezes encontrado em índices).

Obrigado.

 

Olá.

Talvez alguém também tenha encontrado a seguinte falha no MT4.

Estou testando um sistema comercial que consiste de vários robôs para uma conta demo.

Mas periodicamente, 1-2 vezes ao dia, há uma situação em que o robô estabelece uma ordem de parada de compra ou de venda que não funciona. Esta ordem é destacada em amarelo e se você tentar apagá-la, verá um aviso sobre os parâmetros desativados.

O robô que o definiu de acordo com o algoritmo deve continuar seu trabalho, mas só o faz por um preço melhor do que aquele definido em uma ordem incorreta, ou seja, um Sell Stop para ordens acima e um Buy Stop somente para ordens abaixo.

Se eu apagar todas as outras ordens (graças à minha conta demo) e desligar o terminal por um tempo, esta ordem é ativada conforme necessário e é fechada ao comando do programa ou manualmente.

Favor informar se isto tem a ver com a conta demo ou porque há vários robôs presos a diferentes janelas.

Este tipo de ligação aumenta a qualidade de todo o sistema, porque o terminal reage muito melhor aos comandos de robôs individuais do que quando todos os comandos são combinados em um único Expert Advisor. O ganho no tempo de reação do terminal é muito significativo e a pontualidade de execução dos comandos é muito melhor e ótima, se toda a lógica do sistema comercial for espalhada entre vários robôs.

Entretanto, enfrento o problema do congelamento de uma ou duas encomendas.

Talvez alguém tenha enfrentado este problema ou sugerido uma causa de operação incorreta, bem como uma maneira de resolvê-lo.

Obrigado de antemão.

 

na foto é verde, o que não está nos ajustes do terminal.

onde posso ver as cores que são definidas pelos números?

ssb

 
Pavel Ipatov:

Mas de vez em quando, uma ou duas vezes por dia, o robô estabelece uma ordem de compra ou venda que não funciona. Ela é destacada em amarelo e quando você tenta apagá-la, a janela mostra uma inscrição sobre parâmetros desativados.

Isto já aconteceu, e mais de uma vez. No meu caso, sempre foi culpa do corretor, não do robô - se você entrar em contato com o suporte, eles o removerão à força. Se for uma demonstração, eu abriria uma nova com um corretor diferente.

 
Artsem:

na foto é verde, o que não está nos ajustes do terminal.

onde posso ver as cores que são definidas pelos números?

ssb

Uh... photoshop.

 
Artsem:

na foto é verde, o que não está nos ajustes do terminal.

onde posso ver as cores que são definidas pelos números?

ssb

  1. Clique na seta da lista suspensa.
  2. Selecione Personalizado.
  3. Você verá uma janela como esta.

Na paleta você seleciona a cor desejada, ou pode até mesmo especificar manualmente os valores numéricos: vermelho, verde, azul.

 
Ihor Herasko:

  1. Clique na seta da lista suspensa.
  2. Selecione Personalizado.
  3. Uma janela como esta aparecerá.

Na paleta, selecione a cor desejada ou você pode até mesmo especificar manualmente os valores numéricos: vermelho, verde, azul.

Sim, eu não notei o botão personalizado.

Não posso mudar a cor para "numérica" em seu painel.


Razão: