Novo MetaTrader 4 Client Terminal build 402 - página 6

 
dmmikl86:
Isto porque o valor da tubulação é diferente para pares diferentes.

Acho que o valor do pip é redundante no modo de exibição "lucro em pips

 
olyakish:

Acho que o valor do ponto é redundante no modo de exibição "lucro em pips

é outra eterna falha do MT )
 

Glitches....

1) Se você remover instrumentos desnecessários do Market Watch e depois adicionar alguns novamente, você obtém uma coisa interessante.

Clique com o botão direito do mouse em um instrumento, selecione "Janela de Gráfico" para abrir um gráfico.

Isto abrirá um gráfico de um instrumento diferente daquele que você selecionou!!!

Para que este erro aconteça, você tem que selecionar uma ferramenta a partir daquela que acabou de acrescentar. (ver screenshots pic1, pic2, pic3)

2) em minha captura de tela você pode ver que o instrumento USDCHF está marcado como selecionado na janela "Symbols", embora não esteja na realidade na "Market Watch". (pic4)

Talvez a primeira falha seja uma conseqüência da segunda, porque a numeração dos instrumentos no Market Watch está errada.

Eu tenho uma Internet muito ruim, por isso todas as capturas de tela estão em arquivo.

Aqui está o linkhttp://www.sendspace.com/file/tbav73

 
dimonsky:

Glitches....

1) Se você remover instrumentos desnecessários do Market Watch e depois adicionar alguns novamente, você obtém uma coisa interessante.

Clique com o botão direito do mouse em um instrumento, selecione "Janela de Gráfico" para abrir um gráfico.

Isto abrirá um gráfico de uma ferramenta diferente daquela que você selecionou!!!

Isto também foi notado na construção 401.
 

Hoje (ou melhor, ontem) de manhã tive uma estranha falha no MT4 - OrderSelect não encontrou um pedido por número de bilhete em um Expert Advisor.

Dois pedidos pendentes são colocados no EA - BUY_STOP e SELL_STOP, em lados opostos do preço atual. Os números dos bilhetes destes pedidos são armazenados em t1 e t2. O código onde o erro ocorreu, como mostrado abaixo, faz o seguinte: quando uma dessas ordens pendentes é aberta, a segunda é apagada e a próxima ordem pendente com o número t3 é colocada em seu lugar. Se houvesse um erro quando t1 e t2 foram colocados originalmente, o bilhete errado não deveria estar na lista de pedidos. Isto é o que é verificado com (OrderSelect ...) e, em caso de erro, escrevemos uma mensagem no log e saímos da série usando restart().

Hoje a t1 abriu às 6:30. O pedido t2 foi imediatamente eliminado pelo Consultor Especialista (foi eliminado do mercado, mas ficou na história - "cancelado", eu verifiquei). Depois disso, foi colocado o t3. Estes eventos estão todos nos registros da MT e da EA. Então a verificação "OrderSelect(t2, SELECT_BY_TICKET)" retorna FALSE e a série aborta com o erro "Unknown order t2". É estranho, porque o t2 foi definido e apagado sem erros e ficou na história. O modo de histórico em MT é "Todo o histórico". Como a OrderSelect poderia não encontrá-la?

O computador é autônomo, usado apenas para comércio, nada mais. Ninguém toca nele, a não ser eu. A carga da CPU tem uma média de 10%. Memória, espaço em disco, etc. é grande o suficiente.
A versão do MT4 é 402. Há vários meses o Expert Advisor vem trabalhando em diferentes variações em tempo real em uma conta demo em uma MT paralela a três pares diferentes (em três gráficos). Não houve problemas com esta parte do código até esta manhã. Depois disso, tudo correu bem à tarde e à noite para outros pares no mesmo EA. Ou seja, o erro não pode ser reproduzido à vontade.

Pergunta: como isso poderia acontecer? É uma falha na MT ou algo que eu não levei em conta no código?

Este código utiliza as funções OrderDeleteX e OrderSendX - invólucros para OrderDelete e OrderSendX padrão, que adicionam cheques de um tópico de comércio por não estar ocupado e registram eventos como "Deleting order ..." e "Sending order ..." no log do EA.
Eu removi os cálculos de preço para tornar o código mais simples e claro.

if (OrderSelect(t1, SELECT_BY_TICKET)) {
  if (OrderType() == OP_BUY) {
    Print("--------------------------------------------------");
    if (t2 > 0) OrderDeleteX(t2);
    // Расчёты цены, стоплосса и тейкпрофита
    // .....
    t3 = OrderSendX(Symbol(), OP_SELLSTOP, 0.02, Price1, slip, StopLoss, TakeProfit, "step 2", Magic, 0, ColorOrderSendSell);
  }   
} else {
  Print("ERROR: Unknown order t1 in step 1");
  restart(3);
}
 

if (OrderSelect(t2, SELECT_BY_TICKET)) {     
  if (OrderType() == OP_SELL) {
    Print("--------------------------------------------------");
    if (t1 > 0) OrderDeleteX(t1);
    // Расчёты цены, стоплосса и тейкпрофита
    // .....
    t3 = OrderSendX(Symbol(), OP_BUYSTOP, 0.02, Price1, slip, StopLoss, TakeProfit, "step 2", Magic, 0, ColorOrderSendBuy);
  }
} else {
  Print("ERROR: Unknown order t2 in step 1");
  restart(4);
}


Números de ordem em variáveis:
t2 = 119732180
t3 = 119733656

Лог эксперта:
06:30:43 CheMurom v3.4.real EURUSD,H1: --------------------------------------------------
06:30:43 CheMurom v3.4.real EURUSD,H1: Deleting order #119732180; attempt number: 1
06:30:43 CheMurom v3.4.real EURUSD,H1: delete #119732180 sell stop 0.01 EURUSD at 1.46432 sl: 1.47032 tp: 1.43432 ok
06:30:43 CheMurom v3.4.real EURUSD,H1: Sending order cmd=SELL_STOP, lot=0.02, price=1.46032, slip=3, sl=1.46932, tp=1.44082; attempt number: 1
06:30:44 CheMurom v3.4.real EURUSD,H1: open #119733656 sell stop 0.02 EURUSD at 1.46032 sl: 1.46932 tp: 1.44082 ok
06:30:44 CheMurom v3.4.real EURUSD,H1: ERROR: Unknown t2 in step 1

Лог терминала:
06:30:43 '2871084': delete pending order #119732180 sell stop 0.01 EURUSD at 1.46432 sl: 1.47032 tp: 1.43432
06:30:44 '2871084': request was accepted by server
06:30:44 '2871084': request in process
06:30:44 '2871084': pending order #119732180 was deleted
06:30:44 '2871084': pending order sell stop 0.02 EURUSD at 1.46032 sl: 1.46932 tp: 1.44082
06:30:44 '2871084': request was accepted by server
06:30:45 '2871084': request in process
06:30:45 '2871084': order was opened : #119733656 sell stop 0.02 EURUSD at 1.46032 sl: 1.46932 tp: 1.44082
 

Não consigo encontrar nenhum pedido. Podemos ver pelo relatório DC que a encomenda 67930924 estava aberta.

Estes são negócios fechados na história da conta desde 08.06.11. Como podemos ver, esta ordem não está aqui.

Portanto, deve estar em comércio aberto. A figura abaixo, comércios abertos.

Mas também não está aqui. Pergunto-me que relatório será enviado amanhã pela DC, mas eu quero ouvir a versão dos desenvolvedores de software, como ela pode ser.

E mais uma coisa, talvez não seja importante, mas meu par não está salvo e eu não tenho nenhuma informação sobre isso.


 
voinG:

Não consigo encontrar nenhum pedido. Podemos ver pelo relatório DC que a encomenda 67930924 estava aberta.

Estes são negócios fechados no histórico da conta a partir de 08.06.11. Como podemos ver, esta ordem não está aqui.

Portanto, deve estar em comércio aberto. A figura abaixo, comércios abertos.

Mas também não está aqui. Pergunto-me que relatório será enviado amanhã pela DC, mas eu quero ouvir a versão dos desenvolvedores de software, como ela pode ser.

E mais uma coisa, talvez não seja importante, mas meu encontro não é salvo, eu não o salvo e escolho o período sempre pode ser mês.



Está lá. Eu abri "toda a história" e é visível nesta versão.
 

Como uma continuação do tema "OrderSelect não encontrou um pedido por número de bilhete".

Esta manhã, o mesmo erro ocorreu no mesmo Expert Advisor em outro par. A ordem pendente t2=#119899844 foi colocada com sucesso, depois foi apagada com sucesso também, após o que a ordem pendente t3=#119903758 foi colocada, e depois disso t2 não foi encontrada pela função OrderSelect.

Entre o erro de ontem e o de hoje, o código dado em minha mensagem anterior no Expert Advisor funcionou com sucesso várias vezes sem erros e as ordens eliminadas foram encontradas sem problemas.

Durante vários meses antes disso, o Expert Advisor vinha trabalhando na versão MT4 229. Nada como isto foi observado antes. No fim de semana de 4 dias atrás eu mudei para a versão 402. Não sei se os erros estão relacionados com a nova versão. Não posso voltar à versão antiga, porque a Alpari, onde este Expert Advisor está negociando, mudou o fuso horário das citações, e somente a versão 402 reflete corretamente estas mudanças (assim a Alpari alega).

As questões permaneceram em aberto:
Como isso pôde acontecer, por que a OrderSelect não encontrou a ordem na história, enquanto a história é exibida em sua totalidade, a ordem perdida é visível nela? Isto é uma falha da MT ou estou perdendo algo no código?

Лог эксперта:
10:15:33 CheMurom v3.4.real EURCHF,H1: --------------------------------------------------
10:15:33 CheMurom v3.4.real EURCHF,H1: Deleting order #119899844; attempt number: 1
10:15:34 CheMurom v3.4.real EURCHF,H1: delete #119899844 sell stop 0.01 EURCHF at 1.22245 sl: 1.22945 tp: 1.19735 ok
10:15:34 CheMurom v3.4.real EURCHF,H1: Sending order cmd=SELL_STOP, lot=0.02, price=1.21745, slip=3, sl=1.22845, tp=1.20015; attempt number: 1
10:15:36 CheMurom v3.4.real EURCHF,H1: open #119903758 sell stop 0.02 EURCHF at 1.21745 sl: 1.22845 tp: 1.20015 ok
10:15:36 CheMurom v3.4.real EURCHF,H1: ERROR: Unknown t2 in step 1

Лог терминала:
10:15:35 '2871084': delete pending order #119899844 sell stop 0.01 EURCHF at 1.22245 sl: 1.22945 tp: 1.19735
10:15:35 '2871084': request was accepted by server
10:15:35 '2871084': request in process
10:15:36 '2871084': pending order #119899844 was deleted
10:15:36 '2871084': pending order sell stop 0.02 EURCHF at 1.21745 sl: 1.22845 tp: 1.20015
10:15:36 '2871084': request was accepted by server
10:15:36 '2871084': request in process
10:15:37 '2871084': order was opened : #119903758 sell stop 0.02 EURCHF at 1.21745 sl: 1.22845 tp: 1.20015
 
Descrevi o problema a Renate com uma captura de tela, em 399 build eles o removeram, mas em 401 e 402 esta falha apareceu novamente, eu tive que voltar a 399 build
 

Existe uma DLL escrita em Delphi7. Ele tem apenas uma função - verificar se o arquivo existe no caminho especificado.

Aqui está seu código.

library FileGDV;

uses
  SysUtils,
  Classes;

//{$R *.res}

function FileExists(s:pchar):boolean; StdCall;
begin
   result:=sysutils.fileexists(s);
end;

exports FileExists;

begin
end.

Nada de complicado, nada de especial, apenas uma função.

Aqui está o código do Expert Advisor que usa esta função:

if (FileExists(s))
      {
         handleM=FileOpen(fn,FILE_BIN|FILE_WRITE|FILE_READ);
         
      }
      else
      {
         Alert("File not found   "+s);         
         handleM=FileOpen(fn,FILE_BIN|FILE_WRITE);
         s="Time;;M1;M5;M15;M30;H1;H4;D1\n";
         FileWriteString(handleM,s,StringLen(s));
      } 

e aqui está o código do arquivo de cabeçalho

#import "FileGDV.dll"


bool FileExists(string s);

 
#import


Aqui está o código do arquivo de cabeçalho. Se houver apenas um Expert Advisor no terminal, tudo funcionará como um relógio.

Se eu tenho dois deles no terminal em janelas diferentes e eles chamam essa função, então a cada poucas horas, tanto os EAs param de funcionar como as mensagens aparecem no diário

2011.06.09 14:33:57     gdv_e_MultiMACD_a_KSP_GBP_v082 GBPCHF,M5: expert stopped
2011.06.09 14:33:57     gdv_e_MultiMACD_a_KSP_GBP_v082 GBPCHF,M5: function 'FileExists' call from dll 'FileGDV.dll' critical error