Erros, bugs, perguntas - página 2447

 

erro no testador de estratégia durante a optimização.

"tarefa rejeitada peloagente testador".

Por exemplo, se a moeda da sua conta for EUR,

  • EURJPY Sem problemas
  • Erro no GBPJPY


Se a moeda da sua conta for USD

  • USDCAD Sem problemas
  • USDJPY Sem problemas
  • Erro no EURAUD


aparece quando outros pares de moedas são utilizados no código.

No meu exemplo está a utilizar o cálculo do lote dinâmico

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if(DynamicLot)
     {
      if(SymbolInfoDouble(sym,SYMBOL_ASK)!=0)
        {
         if(Valdepo=="USD" || Valdepo=="USC")
           {
            if(StringSubstr(sym,0,3)=="USD")Lot2=BalanceFreeMargin*LotBalancePercent*AccountInfoInteger(ACCOUNT_LEVERAGE)/100/SymbolInfoDouble(sym,SYMBOL_TRADE_CONTRACT_SIZE);
            else if(StringSubstr(sym,3,3)=="USD")Lot2=BalanceFreeMargin*LotBalancePercent*AccountInfoInteger(ACCOUNT_LEVERAGE)/SymbolInfoDouble(sym,SYMBOL_ASK)/100/SymbolInfoDouble(sym,SYMBOL_TRADE_CONTRACT_SIZE);
            else
              {
               pr=SymbolInfoDouble(StringSubstr(sym,0,3)+"USD"+prefix,SYMBOL_ASK);
               if(pr!=0)Lot2=BalanceFreeMargin*LotBalancePercent*AccountInfoInteger(ACCOUNT_LEVERAGE)/pr/100/SymbolInfoDouble(sym,SYMBOL_TRADE_CONTRACT_SIZE);
               else
                 {
                  double Margin=0;
                  OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1,SymbolInfoDouble(Symbol(),SYMBOL_ASK),Margin);
                  if(Margin!=0)Lot2=BalanceFreeMargin/Margin/100*LotBalancePercent;
                 }
              }
           }
         else

         if(Valdepo=="EUR" || Valdepo=="EUC")
           {
            if(StringSubstr(sym,0,3)=="EUR")Lot2=BalanceFreeMargin*LotBalancePercent*AccountInfoInteger(ACCOUNT_LEVERAGE)/100/SymbolInfoDouble(sym,SYMBOL_TRADE_CONTRACT_SIZE);
            else
              {
               pr=SymbolInfoDouble("EUR"+StringSubstr(sym,0,3)+prefix,SYMBOL_BID);
               if(pr!=0)Lot2=BalanceFreeMargin*LotBalancePercent*AccountInfoInteger(ACCOUNT_LEVERAGE)*pr/100/SymbolInfoDouble(sym,SYMBOL_TRADE_CONTRACT_SIZE);
               else
                 {
                  double Margin=0;
                  OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1,SymbolInfoDouble(Symbol(),SYMBOL_ASK),Margin);
                  if(Margin!=0)Lot2=BalanceFreeMargin/Margin/100*LotBalancePercent;
                 }
              }
           }



ou seja, quando a EA está a solicitar o preço de outra moeda.

 
Nikolai Semko:

Bem, então é necessário um raciocínio competente para MQ.
Para que serve? Como e em que casos pode melhorar as capacidades de mql? E não apenas para satisfazer um capricho pessoal.

Digamos que você escreve ao gestor da EA. Agora dois EAs idênticos com nomes diferentes não podem ser reconhecidos como os mesmos.

Por exemplo, é necessário determinar se a EA e o seu clone já foram executados antes.

Bem, isto acontece quando existem muitos gráficos e EAs. E algo é lançado de novo por engano.

 

Caros programadores, por favor expliquem-me porque é que periodicamente recebo um erro ao copiar a data actual da barra no indicador para o buffer?

2019.04.26 12:12:39.811 i-Regr4_05i (Si-6.19,M1)        Failed to copy data from the handle_Regressor indicator, error code 4401
   datetime Arr[],time1;
   if(CopyTime(symb,0,0,1,Arr)<=0)
   {
   PrintFormat("Failed to copy data from the handle_Regressor indicator, error code %d",GetLastError());
   return(0);
   }

No Inverno não houve tal erro - os indicadores trabalharam consistentemente durante um mês, mas nas novas construções comecei a vê-lo.

 
Obrigado!
 
Mykhailo Ohorodniichuk:

Ajude-me a resolver este problema. como posso conseguir que caracteres normais sejam transmitidos em vez dos actuais?

Comando Google chcp

chcp 1251 - janelas-1251

chcp 65001 - utf-8

...

 
fxsaber:

Digamos que você escreve ao gestor da EA. Agora dois EAs idênticos com nomes diferentes não podem ser reconhecidos como os mesmos.

Por exemplo, é necessário determinar se a EA e o seu clone já foram executados antes.

Bem, isto acontece quando existem muitos gráficos e EAs. E algo é lançado de novo por engano.

Estou a ver...

Mas ainda estou inclinado para a seguinte fórmula: não mais de um Expert Advisor por cada conta de negociação. Faz mais sentido. Mesmo que haja várias estratégias que queira combinar, deve fazê-lo no âmbito de um consultor especializado. Neste caso, não é necessário um gestor da EA. Além disso, mais uma vez, um hash diferente não é uma garantia de que a EA seja diferente, mesmo que seja o hash interno nativo dos criadores.

E se quisermos verificar no momento do lançamento de uma EA se alguma outra EA é lançada sobre esta conta por acidente, a fim de prevenir e permitir ainda mais o funcionamento de uma nova EA, a fim de evitar possíveis conflitos, pode ser facilmente resolvida por funções regulares e a verificação da mesmice não é necessária aqui.

 
Nikolai Semko:

Estou a ver...

Mas ainda estou inclinado para a seguinte fórmula

Então, o que tem a sua preferência pessoal a ver com isso? É sobre o MT5 em geral.
 
fxsaber:
Então o que é que isto tem a ver com as suas preferências pessoais? É sobre o MT5 em geral.
Duvido muito que alguém para além de si pensasse em criar um gestor da EA. ))
 
Nikolai Semko:
Duvido muito que alguém, para além de si, alguma vez pense em criar um gestor da EA. ))

Porquê? É uma coisa muito boa e útil de se fazer.

Tenho de usar perfis por agora, mas eles têm muitas limitações.

 
Andrey Khatimlianskii:

Porquê? É uma coisa muito boa e útil de se fazer.

Tenho de usar perfis por agora, mas eles têm muitas limitações.

Andrei, não compreendo os perfis.