Erros, bugs, perguntas - página 2218

 
fellow:

o que são esses números entre aspas?

provavelmente o valor do campo

 
Georgiy Merts:

Exactamente.

Na minha opinião, todas as partes estruturais dos programas devem ser transformadas em blocos independentes das plataformas (interfaces virtuais, na minha opinião, são muito adequadas para isso), de modo a que as mudanças nas plataformas afectem pequenas áreas isoladas de código. Além disso, há o bónus de se poder ligar novas plataformas.

Quanto às novas i-Funções, estou apenas a olhar para uma - procura de uma barra por um tempo especificado. Talvez esta função funcione mais rapidamente do que a minha. O resto - tenho a certeza - não dará um aumento de velocidade em comparação com a minha, o que significa que não se procura o bom do mau.

Escrevi a minha biblioteca em bares há muito tempo e é pouco provável que utilize as inovações

 
Alexey Volchanskiy:

Escrevi há muito tempo a minha própria biblioteca para bares e é pouco provável que utilize inovações

A procura nativa de barra pelo tempo pode ser realmente mais rápida.

Agora é limitado como cálculo do índice de barras requerido pelo tempo da primeira barra, da última barra, e do tempo requerido, com correcção posterior.

Também costumava utilizar a pesquisa binária, mas o cálculo directo com correcção - acabou por ser mais rápido.

E os criadores podem ter um índice que encontra a barra certa muito mais rapidamente do que estas duas opções.

 
fellow:

o que são esses números entre aspas?

uma corda é uma matriz de uchar

Entre aspas é um carácter, à esquerda das aspas está um código de carácter.


mais precisamente :

void OnStart()
  {
   string s;
   uchar u[1];
   for(int i=32; i<=255; i++)
     {
      u[0]=(uchar)i;
      if(i%16==0) s="";
      s+=IntegerToString(u[0],3)+"-"+CharArrayToString(u)+"  ";
      if (i==152) s+=" ";
      if(i%16==15)  Print(s);
     }
  }
 

que actualizou para 1860, confirma o problema indicado anteriormente por vários utilizadores durante os testes?

porque esta é a segunda vez que a Otkritie envia esta actualização ))

 
Vitaly Muzichenko:

Se utilizar software livre, então mantenha-o actualizado, e se houver anúncios no futuro, também não há problema (software livre). Ninguém lhe deve nada.

O software não é gratuito - custa muito dinheiro ao corretor. Eu, como comerciante, pago ao corretor uma comissão, da qual os promotores são pagos. Sou comerciante e quero ser tratado de forma apropriada.

Não quero saber das funções (para o inferno com elas - eu reescrevi-as), mas o testador começou a cometer erros e a colidir a cada 2-3 execuções, poderia ter carregado uma versão estável

 
No mínimo, tome-se o facto de que em 10 anos nunca ensinaram o software a calcular correctamente os drawdowns. Eu próprio tive de escrever tudo
 
// Воспроизведение ситуации, когда OrderSend успешно выполнилась, но ордера нет ни среди живых, ни среди мертвых.

#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
#define  PRINT(A) Print(#A + " = " + (string)(A))

void OnStart()
{
/*
  // Посылаем поочередно ордера на открытие/закрытие позиций
  while (!IsStopped() &&
         (OrderSend(_Symbol, OP_SELL, 1, Bid, 0, 0, 0) != -1) &&
         OrderSelect(0, SELECT_BY_POS) && OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0))
    ;
*/

  MqlTradeResult Result;
  MqlTradeRequest Request = {0};

  Request.action = TRADE_ACTION_DEAL;
  Request.symbol = _Symbol;
  
  do
  {
    Request.position = PositionSelect(Request.symbol) ? PositionGetInteger(POSITION_TICKET) : 0;  
    Request.type = Request.position ? (ENUM_ORDER_TYPE)(1 - PositionGetInteger(POSITION_TYPE)) : ORDER_TYPE_SELL;
    Request.price = Request.position ? PositionGetDouble(POSITION_PRICE_CURRENT) : Bid;
    Request.volume = Request.position ? PositionGetDouble(POSITION_VOLUME) : 1;
          
  } // Посылаем поочередно ордера на открытие/закрытие позиций
  while (!IsStopped() && (OrderSend(Request, Result) ? OrderSelect(Result.order) || HistoryOrderSelect(Result.order) : true));
  
  PRINT(Result.order);
  PRINT(OrderSelect(Result.order));
  PRINT(HistoryOrderSelect(Result.order));
}


Resultado emForexTimeFXTM-Demo01

Result.order = 2210942086
OrderSelect(Result.order) = false
HistoryOrderSelect(Result.order) = false


O guião abre e fecha posições até detectar uma "ordem fantasma" - nem entre as actuais nem na história. Devo considerá-lo um bug ou uma característica de plataforma?


ZZY O guião é escrito de tal forma que várias posições podem abrir devido a esta nuance. Mas isso não impede que uma "ordem fantasma" seja recebida.

Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2018.02.08
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 
Foi o mesmo no BCS forex há um ano atrás, depois da dtz ter trocado algo no seu conselheiro
 

Olá. Hoje actualizei para a versão 1860 e ao mesmo tempo que optimizava o Expert Advisor, deparei-me com este problema:

Atraso na optimização

O tempo de espera entre os passes é de 1 minuto! Pode por favor aconselhar qual poderá ser o problema?

p.s. Antes da actualização, tudo funcionava como um relógio.

Razão: