Erros, bugs, perguntas - página 74

 

Ao testar o Expert Advisor, deparei-me acidentalmente com a função Sleep() no testador que penso que não funciona correctamente. O ponto é o seguinte:

o Expert Advisor fecha todas as posições às 23:00 se o lucro total for superior ao especificado (a função CloseAll()). Após a próxima posição ser fechada, é introduzido um atraso de 10 segundos por Sleep(10000).

Aqui está o que temos no diário de bordo:

FP 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 CloseAll Profit: 3030.66
JD 0 Comércio 04:31:04 venda instantânea 0,80 EURAUD a 1,56474 (1,56474 / 1,56558 / 1,56474)
JH 0 Negócios 04:31:04 negócio #85 vender 0,80 EURAUD a 1,56474 feito (com base no pedido #85)
HL 0 Comércio 04:31:04 negócio realizado [#85 vender 0,80 EURAUD a 1,56474]
HI 0 Comércio 04:31:04 encomenda executada vender 0,80 a 1,56474 [#85 vender 0,80 EURAUD a 1,56474]
QE 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 posição por EURAUD a ser encerrado
PN 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 23:0:0
FG 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 Sleep 10 cek.
RO 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 23:0:0
QD 0 Comércio 04:31:04 comprar 1,00 USDJPY a 90.444 (90.417 / 90.444 / 90.417)
NS 0 Negociações 04:31:04 negócio #86 comprar 1,00 USDJPY a 90,444 feito (com base na encomenda #86)
MJ 0 Comércio 04:31:04 negócio realizado [#86 comprar 1,00 USDJPY a 90,444]
JS 0 Comércio 04:31:04 ordem executada comprar 1,00 a 90.444 [#86 comprar 1,00 USDJPY a 90.444]
JL 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 posição por USDJPY para ser fechado
JI 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 23:0:0
PN 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 Sleep 10 cek.
DF 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 23:0:0
QN 0 Comércio 04:31:04 comprar 0,80 AUDUSD a 0,90001 (0,89967 / 0,90001 / 0,89967)
IH 0 Comércios 04:31:04 negócio #87 compra 0,80 AUDUSD a 0,90001 feito (com base na encomenda #87)
KQ 0 Comércio 04:31:04 negócio realizado [#87 comprar 0,80 AUDUSD a 0,90001]
RL 0 Comércio 04:31:04 ordem executada compra 0,80 a 0,90001 [#87 compra 0,80 AUDUSD a 0,90001]
EG 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 posição por AUDUSD para ser fechado
LP 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 23:0:0
JI 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 Sleep 10 cek.

NQ 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 23:0:0

Como podemos ver, o tempo antes e depois do atraso é o mesmo. Mas isso só acontece se TimeCurrent() == 0.

Caso contrário, o deslize funciona bem. Por exemplo:

MD 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:39 CloseAll Profit: 3382.28
KQ 0 Comércio 04:30:39 ET ET 0,70 EURUSD a 1.44090 (1.44090 / 1.44108 / 1.44090)
IE 0 Negócios 04:30:39 negócio #27 vender 0.70 EURUSD a 1.44090 feito (com base no pedido #27)
CI 0 Comércio 04:30:39 negócio realizado [#27 vender 0,70 EURUSD a 1,44090]
EL 0 Comércio 04:30:39 ordem executada vender 0,70 a 1.44090 [#27 vender 0,70 EURUSD a 1.44090]
DH 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:39
JR 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:3923:0:7
MK 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:39 Sleep 10 cek.
EP 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:3923:0:15
DE 0 Comércio 04:30:39 ET 0,80 AUDUSD a 0,91951 (0,91951 / 0,91993 / 0,91951)
CJ 0 Trades 04:30:39 negócio #28 vender 0,80 AUDUSD a 0,91951 feito (com base no pedido #28)
HR 0 Comércio 04:30:39 negócio realizado [#28 vender 0,80 AUDUSD a 0,91951]
HH 0 Comércio 04:30:39 ordem executada venda 0,80 AUDUSD a 0,91951 [#28 venda 0,80 AUDUSD a 0,91951]
LS 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:39 AUDUSD a ser encerrado
QL 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:3923:0:15
ED 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:39 10 cek Sleep.
LO 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:3923:0:25
DD 0 Comércio 04:30:39 comprar 0,60 EURAUD a 1,56727 (1,56632 / 1,56727 / 1,56632)
LN 0 Negociações 04:30:39 negócio #29 compra 0,60 EURAUD a 1,56727 feito (com base na encomenda #29)
FK 0 Comércio 04:30:39 negócio realizado [#29 comprar 0,60 EURAUD a 1,56727]
IR 0 Comércio 04:30:39 ordem executada compra 0,60 a 1,56727 [#29 compra 0,60 EURAUD a 1,56727]
RM 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:39 posição por EURAUD para ser fechado
FE 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:3923:0:25
GN 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:39 Sleep 10 cek.

QE 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:3923:0:35

Código para fechar uma posição:

if(m_trade[j].PositionClose(m_symbol[j].Name()))
           {
            PosCloseCount--;
            printf("Position by %s to be closed",m_symbol[j].Name());
            MqlDateTime  dt_struct;
            TimeCurrent(dt_struct);
            printf("%u:%u:%u",dt_struct.hour,dt_struct.min,dt_struct.sec);
            Sleep(10000);
            Print("Sleep 10 cek.");
            TimeCurrent(dt_struct);
            printf("%u:%u:%u",dt_struct.hour,dt_struct.min,dt_struct.sec);
           }

FecharTudo chamada de função:

   MqlDateTime  dt_struct;
   TimeCurrent(dt_struct);
   if(dt_struct.hour==2 3 && m_account.Profit()>InpProfitToClose)
     {
      Trade=false;Print("CloseAll Profit: ",m_account.Profit());
      while(PositionsTotal()>0)
         CloseAll();

Se alterarmos a condição para

if(dt_struct.hour==23 && dt_struct.min>0 && m_account.Profit()>InpProfitToClose)
não há erro.
Документация по MQL5: Общие функции / Sleep
Документация по MQL5: Общие функции / Sleep
  • www.mql5.com
Общие функции / Sleep - Документация по MQL5
 
joo:
Então, a minha mensagem não é em vão, como eu já pensava?

Sim. Fixámos o comportamento StringToTime. Obrigado.

 
Valmars:

Ao testar o Expert Advisor, deparei-me acidentalmente com a função Sleep() no testador que penso que não funciona correctamente. O ponto é o seguinte:

Muito interessante. Vejamos.
 
Abro o separador "Notícias" e há... - é a notícia errada. Está-me a escapar alguma coisa?
 
x100intraday:
Abro o separador "Notícias" e lá... - é a notícia errada. Está-me a escapar alguma coisa?

Defina as línguas em que quer receber as notícias.


 
Rosh:

Defina as línguas em que quer receber as notícias.


Não é. É um pouco polvilhado com "notícias" do fórum mt5, não tem nada a ver com notícias forex. Não só actualizações pró-auto recentemente, mas também descarreguei a distribuição mt5 de novo e instalei-a, já passou quase uma semana. Não sei como foi durante a semana, porque não entrei no separador "Notícias", mas descobri-o agora:

Estranhas notícias financeiras

 
x100intraday:

Não é. É como que polvilhado com "notícias" do fórum mt5, não tem nada a ver com notícias forex. Não só o carreguei recentemente como voltei a descarregar a distribuição mt5 e instalei-o, já passou quase uma semana. Não sei como foi durante a semana porque não entrei no separador "Notícias", mas descobri-o agora:

Este é o nosso servidor de demonstração que transmite as notícias da MQL5.com em vez de notícias forex em falta (não temos o direito de distribuir as notícias de outra pessoa gratuitamente).

Se não os quiser ver, basta desmarcar a caixa apropriada na secção de categorias de notícias no menu do botão direito do rato.

 

Após a actualização automática, a EA anteriormente activa começou a dar mensagens de que não podia copiar as séries cronológicas. O problema foi resolvido descarregando a EA e carregando-a novamente. Pergunta: este resultado da actualização automática deve ser sempre esperado ou trata-se de um erro terminal, que será eliminado?

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Программы MQL5 / Выполнение программ - Документация по MQL5
 
Yedelkin:

Após a actualização automática, a EA anteriormente activa começou a dar mensagens de que não podia copiar as séries cronológicas. O problema foi resolvido descarregando a EA e carregando-a novamente. Pergunta: este resultado da actualização automática deve ser sempre esperado ou trata-se de um erro terminal, que será eliminado?

Por favor, dê mais detalhes (registos, capturas de ecrã, etc.).

Sem isto, não é possível dar uma resposta informada.

 
Renat:

Fornecer mais detalhes (registos, capturas de ecrã, etc.), por favor.

Sem isto, é impossível dar uma resposta razoável.

OK. Conta demo no servidor MQ, ficheiro de registo é anexado (2010729.log), a hora de início da actualização automática é 20:54, às 22:36 eu próprio apaguei o Expert Advisor e carreguei-o após um minuto.

Há uma verificação de tipo simples na EA:

if(CopyHigh(Symbol(),0,0,bars,high)<bars || CopyClose(Symbol(),0,0,bars,close)<bars || CopyLow(Symbol(),0,0,bars,low)<bars || CopyTime(Symbol(),0,0,bars,time)<bars)
  {
   Print("Can't copy timeseries!");
   return;
  }

Consequentemente, após a actualização automática de mensagens (ficheiro 20100729copy.log). Em geral, isto já ocorreu antes, mas de alguma forma não prestou atenção.

Após recarregar o Expert Advisor, as linhas de preços em aberto e stop-loss no gráfico também desapareceram.

Posso acrescentar mais alguma coisa ao que foi dito?