Erros, bugs, perguntas - página 1116

 

Continuo a ver isto quando estou a fazer o teste:

2014.03.28 17:12:28 Core 1 ligação a 127.0.0.1:3000
2014.03.28 17:12:38 Core 1 erro de autorização do agente testador
2014.03.28 17:12:38 Core 1 ligação encerrada

A oportunidade de testar é oferecida mais como uma excepção. Os agentes remotos estão desactivados, não há antivírus.
Como é isto tratado?

 
cDan:

Continuo a ver isto quando estou a fazer o teste:

2014.03.28 17:12:28 Core 1 ligação a 127.0.0.1:3000
2014.03.28 17:12:38 Core 1 erro de autorização do agente testador
2014.03.28 17:12:38 Core 1 ligação encerrada

A oportunidade de testar é oferecida mais como uma excepção. Os agentes remotos estão desactivados, não há antivírus.
Como é isto tratado?

Antivírus não?
 
Sem antivírus
 

Excedido, mas talvez uma resposta mais rápida aqui:

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

Perguntas de principiantes

C-4, 2014.03.28 13:23

Alguém me pode explicar porque é que o código acima não funciona no testador enquanto em tempo real funciona!!? Especificamente interessado na razão pela qual a propriedade HistoryOrderGetInteger não está disponível no testador após HistorySelect(0, TimeCurrent())...

#include <Trade\Trade.mqh>

CTrade trade;

int OnInit()
{
   trade.LogLevel(LOG_LEVEL_NO);
   return INIT_SUCCEEDED;
}
void OnTick()
{
   if(!DetectNewBar())return;
   trade.Sell(0.1);
   HistorySelect(0, TimeCurrent());
   for(; dealsCount < HistoryDealsTotal(); dealsCount++)
   {
      ulong ticket = HistoryDealGetTicket(dealsCount);
      RecalcDeal(ticket);
   }
}

bool DetectNewBar(void)
{
   MqlRates bars[1];
   CopyRates(Symbol(), PERIOD_M1, 0, 1, bars);
   if(bars[0].time != timeLastBar)
   {
      timeLastBar = bars[0].time;
      //printf(expertName + " new bar detected: " + TimeToString(bars[0].time));
      return true;
   }
   return false;
}

void RecalcDeal(ulong ticketDeal)
{
   //History is selected in OnTick()!
   ulong ticketOrder = HistoryDealGetInteger(ticketDeal, DEAL_ORDER);
   //if(!HistoryOrderSelect(ticketOrder))
   //   printf("order not select.");
   ENUM_ORDER_TYPE type = (ENUM_ORDER_TYPE)HistoryOrderGetInteger(ticketOrder, ORDER_TYPE);
   datetime time = HistoryOrderGetInteger(ticketOrder, ORDER_TIME_SETUP); 
   ulong time_msc = HistoryOrderGetInteger(ticketOrder, ORDER_TIME_SETUP_MSC); 
   printf("Order: " + (string)ticketOrder + " Type: " + EnumToString(type) + " Time: " + (string)time +
          " Time msc: " + (string)time_msc + " Total Orders: " + HistoryOrdersTotal());
}

int dealsCount;

datetime timeLastBar;

Imagem de ecrã no testador de estratégia:

Imagem de ecrã em tempo real na demonstração:

p.s. O que é interessante, a primeira ordem no testador é tratada correctamente, mas as outras não são. Também, se comentarmos HistroryOrderSelect(ticketOrder), recebemos uma mensagem no Strategy Tester de que a ordem não foi seleccionada e no Strategy Tester, tudo começa a funcionar, excepto a primeira ordem.


 

Imagem explicativa do ecrã para a aplicação #986216

 

A função StringSplit incorporada funciona correctamente?

void OnStart()
{
        string str = "|A|B|";
        string result[];
        int n = StringSplit( str, '|', result );
        Print( "количество полученных подстрок=", n );
        for ( int i = 0; i < n; i++ )
                Print( "подстрока(", i, ")=", result[ i ] );
}

produz o seguinte resultado:

Acontece que o caracter "|" no caso de "|A" separa a corda vazia e A, e no caso de "B|" não separa B e a corda vazia. Mas se for um separador, deve separar algo, caso contrário não há diferença entre "|A|B|" e "|A|B" e ao mesmo tempo há uma diferença entre "|A|B|" e "A|B|" . E se forem permitidas linhas em branco num caso, também devem ser permitidas no outro caso.

 

Divide-se correctamente, mas não até ao fim. Uma ficha em branco deve também ser emitida no final.

Colocá-lo em servicedesk.

 

Há algo de errado com a minha classificação, o contador de descarregamento de código parece estar em baixo.

Oops, isso não é um erro... Adicionou códigos da MQL4 à sua classificação?

 

Sim, estamos a trabalhar na transferência da base de códigos MQL4 para o novo motor do website MQL5.

Estamos a trabalhar na unificação das plataformas.

 
A100:

A função StringSplit incorporada funciona correctamente?

produz o seguinte resultado:

Acontece que o caracter "|" no caso de "|A" separa a corda vazia e A, e no caso de "B|" não separa B e a corda vazia. Mas se for um separador, deve separar algo, caso contrário não há diferença entre "|A|B|" e "|A|B" e ao mesmo tempo há uma diferença entre "|A|B|" e "A|B|". E se forem permitidas linhas em branco num caso, também devem ser permitidas no outro caso.

Obrigado pela mensagem, corrigida nos terminais 4 e 5.