Erros, bugs, perguntas - página 119

 
Li algures num fórum que os comentários durante os testes não são escritos no registo (a fim de poupar espaço em disco). A este respeito, a minha pergunta é: Como posso depurar o programa no provador? Experimentei PrintFormat e PrintFormat - nada funciona no testador, tentei até Alert.
 
Scriptong:
Li algures num fórum que os comentários durante os testes não são escritos no registo (a fim de poupar espaço em disco). Portanto, a minha pergunta é: Como posso depurar o programa no testador? Experimentei PrintFormat e PrintFormat - nada funciona no testador, tentei até Alert.
Veja os registos dos agentes de teste - tudo está aí escrito, mas apenas para os agentes locais. Os agentes remotos não escrevem a saída de impressão() nos registos por razões de poupança de informação.
Документация по MQL5: Общие функции / Print
Документация по MQL5: Общие функции / Print
  • www.mql5.com
Общие функции / Print - Документация по MQL5
 

Verificado. O meu agente é local (pelo menos está listado em Local). Depois de executar o Expert Advisor no modo"Every tick", o conteúdo do separador "Log" corresponde ao conteúdo do ficheiro de registo do agente (Expert Advisor e ficheiros de registo anexados).

Sim, esqueci-me. O período de teste é "Último Mês".

Arquivos anexados:
test.mq5  2 kb
 

O seu registo diz "debug version of 'test.ex5', por favor recompile-o".

Isto significa que o EX5 destinado à depuração (premindo F5 no editor produz EX5 com informação de depuração) não pode ser executado no testador.

Faremos a recompilação automática de tais EAs. Entretanto, recompile manualmente a sua EA.

 
alexvd:
E pode trazer o código completo?

E provavelmente trouxe tudo isto à tona, não consigo pensar noutra razão...

Vou tentar descrever a situação com mais detalhe.

Existe uma classe simples "CMqlTimer", a tarefa desta classe é acompanhar o momento de mudança de diferentes intervalos de tempo: hora, dia, semana, mês, ano.

Tudo é realizado com muito simples primitivo, por exemplo, se os minutos são iguais a 0 então "nova hora" chegou; se o número de dias da semana não corresponde ao armazenado em variável então a alternância de dias ("00:00:00" por hora do servidor) chegou. E assim por diante.

A análise é realizada quando o temporizador é accionado, com intervalo de 1 segundo, em CMqlTimer::OnTimer(). Se o intervalo de tempo mudar, a função deve ser executada. Por exemplo, se for um "novo" dia, a função CMqlTimer::OnRolloverDay() deve ser executada.


Se removermos o resto do código e escrevermos apenas OnRolloverDay(), o resultado será o seguinte:

//Function CMqlTimer.OnRolloverDay
bool CMqlTimer::OnRolloverDay()
//Дневной ролловер
{
//----------------------------------------------------------------------------//
//Work variables
string MessageText; //Text for message
int    UserEventID; //Identifier of the user event  

bool Result; //Returned importance
//----------------------------------------------------------------------------//

Result = true;

ResetLastError();

RolloverCountDay = RolloverCountDay+1;

UserEventID = CHARTEVENT_CUSTOM+15;
MessageText = StringFormat("Rollover Day (№ %d)",RolloverCountDay); //Можно просто "Rollover Day"
//We refer user event of the work chart
EventChartCustom(0,(ushort)UserEventID-CHARTEVENT_CUSTOM,0,0,MessageText);

//Checking for presence of the errors
  if(_LastError!=0)
  //В результате работы произошла ошибка
  {
  Result = false;  
  }
//----------------------------------------------------------------------------//
return(Result);
//----------------------------------------------------------------------------//
}

Todos os eventos do utilizador são rastreados e passados para tratamento à classe principal

Parece algo parecido com isto

void OnChartEvent(const int id,         // идентификатор события  
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                  )
{
//----------------------------------------------------------------------------//
//Work variables
//----------------------------------------------------------------------------//

//----------------------------------------------------------------------------//
//                          Processing user events                            //
//----------------------------------------------------------------------------//
  if(id>CHARTEVENT_CUSTOM)
  //User event is received
  {
  Expert.OnEvent(id,lparam,dparam,sparam);
  }
//----------------------------------------------------------------------------//  
}

Portanto, os eventos não chegam ao OnChartEvent em modo de teste, ou seja, o Expert Advisor não pode lidar com um evento enviado usando EventChartCustom em modo de teste. Verificou-o ao exibir todos os eventos no diário de bordo.

PS

O mais interessante é que a demonstração de todos os eventos chega, mas no testador está a trabalhar recusa-se.

Antes de 319 todos funcionaram e, no testador, os eventos foram tratados com sucesso. É verdade o último lançamento onde funcionou, não posso dizer...

 
stringo:

O seu registo diz "debug version of 'test.ex5', por favor recompile-o".

Isto significa que o EX5 destinado à depuração (premindo F5 no editor produz EX5 com informação de depuração) não pode ser executado no testador.

Faremos a recompilação automática de tais EAs. Entretanto, recompile manualmente a sua EA.

Obrigado. Não sabia que havia uma diferença entre os ficheiros obtidos premindo F5 e F7.
 
Interesting:

E provavelmente trouxe tudo isto à tona, não consigo pensar noutra razão...

Vou tentar descrever a situação com mais detalhe.

...
Obrigado. Vamos pensar nisso.
 

Não compreendo o que está errado, a EA trabalha no testador sem erros e na máquina de testes do organizador também passa sem erros.

Quando o executo numa conta de demonstração, recebo um erro quando tento abrir uma encomenda:

2010.09.06 13:26:50 Comércios '101894' : compra instantânea falhada 0.10 USDJPY a 84.179 [Modo de enchimento sem suporte]
2010.09.06 13:26:45 Comércios '101894' : compra instantânea falhada 0.10 USDCAD a 1.03689 [Modo de enchimento sem suporte]
2010.09.06 13:26:39 Comércios '101894' : compra instantânea falhada 0.10 USDJPY a 84.174 [Modo de enchimento sem suporte]
2010.09.06 13:26:34 Comércios '101894' : compra instantânea falhada 0.10 USDCAD a 1.03685 [Modo de enchimento sem suporte]
2010.09.06 13:26:28 Comércios '101894' : compra instantânea falhada 0.10 USDJPY a 84.174 [Modo de enchimento sem suporte]
2010.09.06 13:26:23 Comércios '101894' : compra instantânea falhada 0.10 USDCAD a 1.03688 [Modo de enchimento sem suporte]
2010.09.06 13:26:18 Comércios '101894' : compra instantânea falhada 0.10 USDJPY a 84.181 [Modo de enchimento sem suporte]

Pedido de SELL:

MqlTradeRequest request;
         request.action=TRADE_ACTION_DEAL;
         request.symbol=Symbol_[i];
         request.volume=volume_exe;
         request.price=SymbolInfoDouble(Symbol_[i], SYMBOL_BID);
         request.sl=0;
         request.tp=0;
         request.deviation=SymbolInfoInteger(Symbol_[i], SYMBOL_SPREAD)*2;
         request.type=ORDER_TYPE_SELL;
         request.type_filling=ORDER_FILLING_CANCEL

Pedido de COMPRA:

MqlTradeRequest request;
         request.action=TRADE_ACTION_DEAL;
         request.symbol=Symbol_[i];
         request.volume=volume_exe;
         request.price=SymbolInfoDouble(Symbol_[i], SYMBOL_ASK);
         request.sl=0;
         request.tp=0;
         request.deviation=SymbolInfoInteger(Symbol_[i], SYMBOL_SPREAD)*2;
         request.type=ORDER_TYPE_BUY;
         request.type_filling=ORDER_FILLING_CANCEL;

OrderCheck não encontra qualquer erro.


 

Substituiu ORDER_FILLING_CANCEL query por ORDER_FILLING_AON query , trabalhos de peritos.

Mas o problema permanece, porque é que existe tal diferença no funcionamento do testador e do servidor.


Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 

Que piada se o servidor do campeonato se tornar o contrário.