Erros, bugs, perguntas - página 2137

 

Erro ao ler o lucro (ou já estou a interpretar mal alguma coisa).

Existe uma função no seio da EA:

bool Fn_profit_summ(double &profit_summ, bool is_buy, ulong magic, bool prnt=false){
   profit_summ = 0;
   string str=(is_buy?"B":"S")+" -> "; 
   //-----------------------------             
   int total = PositionsTotal();          
   for(int i=total-1; i>=0; i--){
      const ulong tic= PositionGetTicket(i); if(tic<=0)     return(false); //--- asinchr
      if(!PositionSelectByTicket(tic)                   )   return(false); //--- asinchr 
      bool is_buy_ = (PositionGetInteger(POSITION_TYPE  )==POSITION_TYPE_BUY); 
      if( is_buy_                             !=  is_buy)   continue; 
      if( PositionGetInteger(POSITION_MAGIC ) !=  magic )   continue;
      if( PositionGetSymbol (POSITION_SYMBOL) != _Symbol)   continue;
      profit_summ += PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP);
      str+=IntegerToString(tic)+" - "+DoubleToString((PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP)), 2)+"/";
      }
   //-----------------------------
   if( prnt) Print(str+" --> "+DoubleToString(profit_summ, 2));
   return(true);}

Posso ver no diário de bordo:

2018.02.21 01:44:04.315 2018.02.14 04:59:49   S -> 273 - -5.62/ --> -5.62

Não há problema, mas é uma ordem de compra, não uma ordem de venda.

O bilhete é exactamente para uma ordem de Venda (273, como no diário de bordo)


Pensei ter verificado na função e o mesmo tipo foi considerado correctamente, mas o lucro não é realmente o mesmo. Se for verdade, então é o apocalipse - o cliente fecha as posições de Venda e Compra separadamente ao atingir um determinado lucro/perda e fecha constantemente a Venda, porque tira um lucro de Compra. Da mesma forma, o depósito pode ser drenado involuntariamente

(Se eu trabalhei demais e já estou a imaginar coisas - por favor, corrijam-me. Espero sinceramente que isto seja verdade e que não exista um erro tão crítico)

 
Galina Bobro:

Erro ao ler o lucro (ou já estou a interpretar mal alguma coisa).

Existe uma função no seio da EA:

Posso ver no diário de bordo:

Não há problema, mas é uma ordem de compra, não uma ordem de venda.

O bilhete é exactamente para uma ordem de Venda (273, como no diário de bordo)


Pensei ter verificado na função e o mesmo tipo foi considerado correctamente, mas o lucro não é realmente o mesmo. Se for verdade, então é o apocalipse - o cliente fecha as posições de Venda e Compra separadamente ao atingir um determinado lucro/perda e fecha constantemente a Venda, porque tira um lucro de Compra. Da mesma forma, o depósito pode ser drenado involuntariamente

(Se eu trabalhei demais e já estou a imaginar coisas - por favor, corrijam-me. Espero sinceramente que isto seja verdade e que não exista um erro tão crítico)

string str=(! is_buy?"B":"S")+" -> ";
 
Kirill Belousov:
De que se trata? Porque é que eu quereria "se me retirasse S"?
 

Trabalho frequentemente com caracteres personalizados. Por exemplo, preciso de efectuar a depuração de um destes. Isto requer a introdução do seu nome aqui


Mas os nomes dos caracteres personalizados (e não apenas os caracteres personalizados) podem ser longos/complexos, o que dificulta a sua digitação a partir do teclado. O mecanismo de copiar o nome do símbolo para o tampão não está em lado nenhum. Por conseguinte, proponho acrescentar a este item do menu "Copiar nome do símbolo".


ZZY Adicione milissegundos ao Visualizador do Testador, por favor!

 
fxsaber:

ZS Adicione milissegundos ao Visualizador do Testador, por favor!

Acrescentar

 

Erro durante a execução

struct A {
template<typename T>
        void Print(   T t ) { ::Print( 2 ); }
        ~A() { Print( 1 ); }
};
void OnStart() { A a; }

Resultado : 1

Previsto : 2

 
A100:

Esperado: vazio A::Print<int>(int):1

Isto deve-se muito provavelmente à natureza astuciosa da impressão regular. Também pode sobrecarregar o iCustom da mesma forma. Penso que irá produzir o mesmo resultado.

O espaço de nomes para Impressão, Comentário, Alerta, iCustom, ... - algo especial, ao que parece.

 
fxsaber:

O mais provável tem a ver com a natureza complicada da impressão interna.

Não relacionado.

void Print2( int )           { Print( 1 ); }
struct A {
template<typename T>
        void Print2(   T t ) { Print( 2 ); }
        ~A() { Print2( 1 ); }
};
void OnStart() { A a; }

O mesmo resultado.

 

SymbolInfoTick para símbolos personalizados produz um tick vazio (quando não foi feito nenhum CustomTicksAdd), mesmo quando há ticks na História.

Sugiro que no lado Terminal, depois de qualquer CustomTicksReplace the last tick (ou apenas o seu tempo) na História seja feito por SymbolInfoTick.


Por favor, aconselhe os programadores sobre este assunto, quem deve logicamente pendurar esta acção - o Terminal ou um Utilizador?

Penso que o Terminal, porque salvará o Utilizador de bugs ocasionais no seu código (apanhado um).

Agora, por exemplo, ultimamente tem de ser encontrado um símbolo como este

  ulong GetOriginalLastTime( void ) const
  {
    MqlTick Tick[1] = {0};

    ::SymbolInfoTick(this.Symb, Tick[0]);
    
    if (!Tick[0].time_msc)
      ::CopyTicks(this.Symb, Tick, COPY_TICKS_ALL, 0, 1);

    return(Tick[0].time_msc);
  }
 
A100:

Não relacionado.

O resultado é o mesmo

Sim, é um insecto. Nunca o encontrei, pois atribuo sempre isto aos métodos.