Erros, bugs, perguntas - página 662

 

Boa tarde!

Verificar a correcção da função que deve determinar se uma posição aberta está "congelada".

Em particular, não o exagerei com o Ask/Bid?

bool IsPositionFrozen(const string Symbol) {
  if (!PositionSelect(Symbol)) return false;
  bool FreezTP = true, FreezSL = true;
  double FreezLevel = SymbolInfoInteger(Symbol, SYMBOL_TRADE_FREEZE_LEVEL) * SymbolInfoDouble(Symbol, SYMBOL_POINT);
  switch (PositionGetInteger(POSITION_TYPE)) {
    case POSITION_TYPE_BUY:
        if ((NormalizeDouble(PositionGetDouble(POSITION_TP), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (PositionGetDouble(POSITION_TP) - SymbolInfoDouble(Symbol, SYMBOL_BID) > FreezLevel))
          FreezTP = false;
        if ((NormalizeDouble(PositionGetDouble(POSITION_SL), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (SymbolInfoDouble(Symbol, SYMBOL_BID) - PositionGetDouble(POSITION_SL) > FreezLevel))
          FreezSL = false;
        break;
      case POSITION_TYPE_SELL:
        if ((NormalizeDouble(PositionGetDouble(POSITION_TP), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (SymbolInfoDouble(Symbol, SYMBOL_ASK) - PositionGetDouble(POSITION_TP) > FreezLevel))
          FreezTP = false;
        if ((NormalizeDouble(PositionGetDouble(POSITION_SL), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (PositionGetDouble(POSITION_SL) - SymbolInfoDouble(Symbol, SYMBOL_ASK) > FreezLevel))
          FreezSL = false;
      break;
    default: return false;
  }
  if (FreezTP || FreezSL) return true;
  else return false;
}
 
tol64:

Não, tudo funcionou correctamente ali no servidor ( conta de demonstração MQ). Ou seja, as paragens foram activadas quando eu não estava ligado. Mas quando me liguei, o mercado já estava fechado. Na janela do Market Watch foi registada a hora do último tick antes da minha ligação ter sido cortada. Ao solicitar o histórico de trocas especificando TimeCurrent() como o segundo valor, não recebi o histórico completo. Embora, a Help for TimeCurrent() diga isso:

Ou seja, entendo que esta função deve devolver o valor da última chegada de cotação de um dos instrumentos na janela do Market Watch do servidor, mesmo que a ligação tenha sido quebrada e a ligação tenha acontecido quando o mercado já estava fechado. No meu caso, isto não aconteceu e eu não fiquei com toda a história. Não sei se o Market Watch deve sincronizar a hora com o servidor quando o mercado está fechado ou não, não é mencionado na Ajuda.

Nesse caso, se for necessário um historial completo, pode simplesmente acrescentar mais número de dias e será uma garantia de que todos os negócios serão escolhidos. :)

No testador, há um bug com a função HistoryDealsTotal(), e aparece no modo Visualização. O tempo é aí correctamente modelado. Apenas uma muleta ajuda em alguns casos.


Sim, lembrou-se da sua essência, que houve uma pausa na comunicação. Parece que o terminal começa a verificar e a descarregar o histórico adicional apenas na recepção de um instrumento e não há nenhuma carraça no fim-de-semana. Naturalmente, pode actualizar os gráficos manualmente, e depois a última hora do servidor será actualizada. E se no modo automático, então deve corrigir a quebra da ligação e, se for restaurada durante o fim-de-semana, então iniciar a função de verificar e descarregar o histórico, CheckLoadHistory(). Utilizar um temporizador.

Em geral, coisas "espantosas" acontecem por vezes ao terminal. Aqui está ontem, o portátil estava a funcionar via telefone como um modem. O Expert Advisor Multicurrency estava a trabalhar em modo de rastreio (autotrading disabled). Desapareceu durante 15 minutos com o telefone, voltou, voltou a ligar novamente. O terminal restabeleceu a ligação com o servidor. Parecia que podia facilmente descarregar as citações perdidas. Mas o terminal começou a descarregar furiosamente a história - que mais há para fazer? Tudo congelado: visão geral do mercado, separador de comércio, gráficos. O telefone não suporta 3G, funciona via EDGE, pelo que o procedimento foi atrasado. Quando atingiu os 20 MB, decidi verificar se podia trocar algo manualmente em tal estado. Tentou fechar a posição, obteve uma recusa devido à falta de ligação e foi aí que o descarregamento parou. Depois de reconectada, tudo correu bem. Aqui está um excerto do registo do terminal:

OK 0 Rede 09:45:09 '709704': autorizado em MetaQuotes-Demo via Access Point Singapore
IR 0 Network 09:45:09 '709704': autorização prévia bem sucedida realizada a partir de 77.35.11.181 em 2012.03.04 06:10:12
KP 0 Network 09:45:12 '709704': terminal sincronizado com MetaQuotes Software Corp.
Peritos GI 0 09:45:12 especialistas Fractals_ (EURUSD,H1) carregados com sucesso
OI 0 Trades 10:43:29 '709704' : negócio #8671794 venda 0.10 GBPJPY a 129.268 feito (com base na encomenda #9494984) // esta transacção foi executada por um consultor especializado a trabalhar noutro computador
RM 0 Trades 10:51:22 '709704' : negócio #8671842 vende 0.10 USDJPY a 81.586 feito (com base na encomenda #9495037)// Similarmente
KL 1 Network 12:00:38 '709704': ligação a MetaQuotes-Demo perdido// Gone
Rede IE 0 12:16:15 '709704': Autorizado em MetaQuotes-Demo via Access Point Hong Kong// Came
IS 0 Rede 12:16:15 '709704': autorização prévia executada com sucesso a partir de 80.83.239.67 em 2012.03.04 23:45:03
Rede OS 0 12:16:18 '709704': terminal sincronizado com MetaQuotes Software Corp.// Comunicação restaurada
IQ 0 Trades 12:18:12 '709704' : negócio #8672388 vende 0.10 GBPCHF a 1.44540 feito (com base na encomenda #9495596) // esta transacção foi executada por um consultor especializado a trabalhar noutro computador
DF 0 Trades 12:35:37 '709704' : compra imediata 0.10 EURGBP a 0.83422 // Tentei fechar a posição manualmente, antes disso a história estava a ser descarregada
IN 2 Trades 12:35:44 '709704' : compra instantânea falhada 0.10 EURGBP a 0.83422 [Pedido recusado por falta de ligação à rede] // Negado
JP 1 Rede 12:35:44 '709704': ligação à MetaQuotes-Demo perdida
Rede EI 0 12:36:00 '709704': autorizado em MetaQuotes-Demo via Access Point Hong Kong
IG 0 Network 12:36:00 '709704': autorização prévia bem sucedida realizada a partir de 80.83.239.67 em 2012.03.05 02:16:12
PG 0 Network 12:36:08 '709704': terminal sincronizado com MetaQuotes Software Corp.// Comunicação restaurada, continuação do funcionamento normal
MS

 
O registo mostra que antes da interrupção o terminal estava a funcionar com um servidor, mas após a interrupção ligou-se a outro servidor e começou a descarregar o histórico. Pode-se concluir que a história entre os diferentes servidores não está sincronizada.
 
Valmars:

Sim, lembrando a sua essência, houve uma pausa na comunicação. Parece que o terminal inicia a reconciliação e o descarregamento do histórico apenas quando é recebido um tique para o instrumento, e não há tiquetaques no fim-de-semana. Naturalmente, pode actualizar os gráficos manualmente, e depois a última hora do servidor será actualizada. E se quiser usar o modo automático, então deve corrigir a quebra na ligação e, se for restaurada durante o fim-de-semana, iniciar a verificação e descarregar o histórico, função CheckLoadHistory(). Utilizar um temporizador.

...

Sim, parece que há uma actualização temporal quando o tick chega, mas a história já lá estava e podia ser visualmente visualizada. Obrigado pelas opções de solução. Vou tentar reproduzir uma situação semelhante novamente antes do fim-de-semana para tentar as opções de solução.
 

Ligado ao servidor AlpariFS-MT5 para testar o Expert Advisor em diferentes condições. O tipo de execução foi inicialmente EXECUTION_MARKET - Execução de ordens por mercado. Abri/fechei posições com sucesso usando os meus painéis de negociação. Depois descobri que a Profundidade do Mercado estava disponível no menu de contexto do gráfico. Abri-a e descobri que era possível realizar operações de Compra/Venda. Como teste, comprei uma posição e fechei-a ali na Profundidade do Mercado. Depois disso, o tipo de execução da conta foi alterado para EXECUTION_EXCHANGE. Isto é esclarecido na MQL5 e existem apenas duas opções na lista pendente da janela de ordem (F9): execução de troca e ordem pendente. Tentar entrar novamente no terminal ou recarregar o terminal não resolveu o problema. E agora o tipo de execução na conta de demonstração ainda permanece EXECUTION_EXCHANGE.

Contactei o apoio da Alpari, descrevi o problema e esclareci-o:

//---

Anatoly | 17:55
Estou correcto em compreender que na demonstração contabiliza o MT5 neste momento, a opção EXECUTION_MARKET deve estar em vigor?

Sergey | 17:56
Sim, correcto.

//---

Parece que se trata de um insecto.

 

Alguns identificadores não são descritos na ajuda:

ORDER_FILLING_FOK, ORDER_FILLING_IOC e ORDER_FILLING_RETURN existem, masORDER_FILLING_AON e ORDER_FILLING_CANCEL não existem, embora todos conduzam à mesma lista com uma descrição.

 
tol64: eORDER_FILLING_AON e ORDER_FILLING_CANCEL não o são, embora todos eles conduzam à mesma lista com descrição.
Já estão abolidos, também os retiraremos dos índices.
 
Rosh:
Já foram abolidos, iremos retirá-los também dos índices.

Obrigado.

//---

Esta questão levantou-se. O servidor do concurso está agora disponível para testes com as mesmas restrições que no concurso(Limite de Volume 15 lote / Volume máximo 5 lote)? Tentei ligar-me à conta antiga, mas não há qualquer ligação ao servidor. Procurei em todos os servidores onde o Metatrader 5 está disponível para negociação, mas não encontrei oLimite de Volume em lado nenhum, e preciso de testar. Ou será suficiente responder à pergunta, usando um exemplo com valores de concurso:

Tenho uma posição aberta e o seu volume é de 14 lotes. Se eu tentar fazer um pedido pendente com um volume de 2 lotes, o pedido será rejeitado? Ou, a encomenda será colocada com o mesmo tamanho, mas será parcialmente executada, ou seja, 1 lote, desde que a posição se mantenha com o mesmo tamanho(14 lotes).

E vice versa. Temos um conjunto de 14 lotes pendentes de encomenda. Se eu tentar abrir uma posição com 2 lotes, o pedido será recusado?

 

Vou tentar a minha sorte aqui, porque há silêncio sobre as chaleiras...

Por favor, esclareça:https://www.mql5.com/ru/forum/3775/page113#comment_160125. Estou também interessado no cálculo do software dos cálculos necessários.

 

Boa tarde.

Como posso aceder ao valor do indicador iADX incorporado ? Nomeadamente, ao seu valor um determinado número de barras atrás ? Em mql4 é feito através da definição do parâmetro de deslocamento.

Obrigado.

Документация по MQL5: Технические индикаторы / iADX
Документация по MQL5: Технические индикаторы / iADX
  • www.mql5.com
Технические индикаторы / iADX - Документация по MQL5
Razão: