Errores, fallos, preguntas - página 2137

 

Error al leer el beneficio (o ya estoy entendiendo mal algo).

Hay una función dentro de la 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);}

Puedo ver en el registro:

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

Eso estaría bien, pero es una orden de compra de beneficios, no una orden de venta

El ticket es exactamente para una orden de venta (273, como en el registro)


Pensé que había comprobado en la función y el mismo tipo fue considerado correctamente, pero el beneficio no es realmente el mismo. Si es cierto, entonces es el apocalipsis - el cliente cierra las posiciones de Venta y Compra por separado al alcanzar la ganancia/pérdida especificada y cierra constantemente la Venta, porque toma una ganancia de Compra. De la misma manera que el depósito puede ser drenado involuntariamente

(Si he trabajado demasiado y ya me estoy imaginando cosas, corrígeme, por favor. Espero sinceramente que esto sea cierto y no haya un fallo tan crítico)

 
Galina Bobro:

Error al leer el beneficio (o ya estoy entendiendo mal algo).

Hay una función dentro de la EA:

Puedo ver en el registro:

Eso estaría bien, pero es una orden de compra de beneficios, no una orden de venta

El ticket es exactamente para una orden de venta (273, como en el registro)


Pensé que había comprobado en la función y el mismo tipo fue considerado correctamente, pero el beneficio no es realmente el mismo. Si es cierto, entonces es el apocalipsis - el cliente cierra las posiciones de Venta y Compra por separado al alcanzar la ganancia/pérdida especificada y cierra constantemente la Venta, porque toma una ganancia de Compra. De la misma manera que el depósito puede ser drenado involuntariamente

(Si he trabajado demasiado y ya me estoy imaginando cosas, corrígeme, por favor. Espero sinceramente que esto sea cierto y no haya un fallo tan crítico)

string str=(! is_buy?"B":"S")+" -> ";
 
Kirill Belousov:
¿De qué se trata? ¿Por qué querría "si adiós retirar S"?
 

Suelo trabajar con personajes personalizados. Por ejemplo, necesito llevar a cabo la depuración de uno de ellos. Para ello es necesario introducir su nombre aquí


Pero los nombres de los caracteres personalizados (y no sólo los personalizados) pueden ser largos/complejos, lo que dificulta escribirlos desde el teclado. El mecanismo para copiar el nombre del símbolo en el buffer no está en ninguna parte. Por lo tanto, propongo añadir a este menú la opción "Copiar el nombre del símbolo".


ZZY Añada milisegundos al visualizador de pruebas, por favor.

 
fxsaber:

ZS Añade milisegundos al visualizador de pruebas, por favor.

Añadir

 

Error durante la ejecución

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

Resultado: 1

Esperado : 2

 
A100:

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

Lo más probable es que esto se deba a la naturaleza astuta de la impresión regular. También puede sobrecargar iCustom de la misma manera. Creo que dará el mismo resultado.

El espacio de nombres para Print, Comment, Alert, iCustom, ... - algo especial, parece.

 
fxsaber:

Lo más probable es que tenga que ver con la difícil naturaleza de la impresión interna.

No está relacionado.

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

El mismo resultado.

 

SymbolInfoTick para los símbolos personalizados produce un tick vacío (cuando no se ha hecho CustomTicksAdd), incluso cuando hay ticks en el Historial.

Sugiero que en el lado de la Terminal, después de cualquier CustomTicksReplace el último tick (o sólo su tiempo) en la Historia debe ser un SymbolInfoTick.


Por favor, asesore a los desarrolladores sobre este asunto, ¿a quién debe colgar lógicamente esta acción, al Terminal o a un Usuario?

Creo que el Terminal, porque le ahorrará al usuario errores ocasionales en su código (atrapado uno).

Ahora, por ejemplo, últimamente hay que encontrar un símbolo así

  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:

No está relacionado.

El resultado es el mismo

Sí, es un error. Nunca me lo he encontrado, ya que siempre lo atribuyo a los métodos.