Errores, fallos, preguntas - página 1742

 

La ayuda dice:

En los modos de ejecución "Por mercado" y "Bolsa" la política de llenado "Retorno" está siempre permitida para todos los tipos de órdenes. La admisión de otros tipos se comprueba mediante las propiedades SYMBOL_FILLING_FOK y SYMBOL_FILLING_IOC.

Pero no siempre. Así que en las cuentas Robo "Return" no funciona, ni en las Pro, ni en las ECN.

 
Andrey Dik:

La ayuda dice:

En los modos de ejecución "Por mercado" y "Bolsa" la política de llenado "Retorno" está siempre permitida para todos los tipos de órdenes. La admisión de otros tipos se comprueba mediante las propiedades SYMBOL_FILLING_FOK y SYMBOL_FILLING_IOC.

Pero no siempre. Por lo tanto, en las cuentas Robo el "Retorno" no funciona, ni en las cuentas Pro, ni en las ECN.

Acabo de encontrarme con un robot

Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio

Bichos, errores, preguntas

fxsaber, 2016.10.20 08:24

SB en todos los servidores comerciales
//+------------------------------------------------------------------+
//| Get the property value "ORDER_TYPE_FILLING"                      |
//+------------------------------------------------------------------+
ENUM_ORDER_TYPE_FILLING COrderInfo::TypeFilling(void) const
  {
   return((ENUM_ORDER_TYPE_FILLING)OrderGetInteger(ORDER_TYPE_FILLING));
  }

SIEMPRE en el probador devuelveENUM_ORDER_TYPE_FILLING::ORDER_FILLING_RETURN.

Es por eso que si se establece el llenado en OrderModify a través de COrderInfo::TypeFilling(), entonces en el mismo RoboForexEU-MetaTrader 5 habrá un error lógico [Modo de llenado no soportado]. Sin embargo, este error no se produce en MetaQuotes-Demo - ¿servidor del desarrollador mal configurado?



 
Andrey Dik:

La ayuda dice:

En los modos de ejecución "Por mercado" y "Bolsa" la política de llenado "Retorno" siempre está permitida para todos los tipos de órdenes. La admisión de otros tipos se comprueba mediante las propiedades SYMBOL_FILLING_FOK y SYMBOL_FILLING_IOC.

Pero no siempre. Por ejemplo, "Return" no funciona en las cuentas Robo, ni en las Pro, ni en las ECN.

Tengo la sospecha de que la configuración de "Retorno" es por defecto para todos los servidores de comercio (al menos FxPro respondió así.

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Modos de llenado en los servidores

Karputov Vladimir, 2016.10.14 19:18

Modo de llenado "Retorno":

Volver

Sin identificación

Este modo se utiliza para órdenes de mercado (compra y venta), limitadas y stop-limit, y sólo en los modos "Ejecución de mercado" y "Ejecución de bolsa". En el caso de la ejecución parcial, una orden de mercado o limitada con un volumen residual no se elimina, sino que sigue vigente.

Esta es la respuesta de la empresa de corretaje en relación conel modo de "devolución"

Nuestro experto en MT5 ha confirmado con Metaquotes que el retorno se utiliza por defecto, y se aplica cuando se elige nada en el llenado.

)

En otras palabras, es una especie de talón.
 
Karputov Vladimir:

Existe la sospecha de que la configuración de llenado "Return" es la predeterminada para todos los servidores de comercio (al menos, FxPro respondió como tal).

En otras palabras, es una especie de talón.

En algunas empresas (en particular MT5 se ha lanzado recientemente) es necesario especificar claramente el tipo de llenado - si no se especifica, habrá un error.

Aunque, en Robo, el servidor devuelve true para la comprobación de "Return", pero de hecho, este tipo de relleno no funciona. En resumen, es un lío total con estos rellenos.

 
Los comentarios que no son relevantes para este tema se han movido a "CHART_SHOW_OHLC para OBJ_CHART".
 
Obviamente soy lento.
class A
{
public:
  virtual int f()
  {
    Print(__FUNCSIG__);
    
    return(0);
  }
};

class B : public A
{
public:
  virtual int f()
  {
    Print(__FUNCSIG__);
    
    return(0);
  }
};

void OnStart()
{
//  A* b = new B;
  B* b = new B;
  
  ((A*)b).f();

  delete b;
}
¿Entiendo bien que si se anula el virtual en el descendiente, nunca se puede llegar al virtual base? Es decir, no hay forma de llamar a A::f desde b.
 
fxsaber:
¿He entendido bien que si se anula el virtual en el descendiente, el virtual base nunca puede ser alcanzado? Es decir, no hay forma de llamar a A::f desde b.

Casi. En C++, se permite la siguiente entrada:

B* b = new B;
b.A::f();

Pero aquí no se puede hacer eso. Por lo tanto, única y exclusivamente por muleta:

class B : public A
{
public:
  virtual int f()
  {
    Print(__FUNCSIG__);
    
    return(0);
  }
  
  int f1()
  {
    return A::f();
  }
};
 
Комбинатор:

Casi. En C++, se permite la siguiente entrada:

B* b = new B;
b.A::f();

Entonces no entiendo por qué funciona en C++. Al fin y al cabo, un virtual anulado en la tabla de métodos virtuales debe ser completamente anulado. Y no debería haber ningún rastro de la base.

Pero es imposible hacerlo aquí. Por eso es sólo por muleta:

class B : public A
{
public:
  virtual int f()
  {
    Print(__FUNCSIG__);
    
    return(0);
  }
  
  int f1()
  {
    return A::f();
  }
};
Entonces A* b = nuevo B; no funcionará.
 
fxsaber:

Después de todo, el virtual anulado en la tabla de métodos virtuales debe ser anulado completamente. Y no debería haber rastro del método base.

Si el tipo se especifica explícitamente, el método se llama directamente, sin utilizar la tabla de funciones virtuales.

De esta manera, incluso una función virtual pura puede ser llamada si tiene un cuerpo.

fxsaber:
Entonces A* b = new B; no funcionará.

En este caso, necesitas otra muleta -- mover la función interna en la clase base a un método no virtual y llamarlo dentro del virtual. Entonces podríamos llamar explícitamente a un método no virtual desde la clase base y el heredero.

 
Комбинатор:

Si el tipo se especifica explícitamente, el método se llama directamente, sin utilizar la tabla de funciones virtuales.

Incluso una función puramente virtual puede ser llamada de esta manera si tiene un cuerpo.

En este caso, necesitamos otra muleta, que sería trasladar los internos de la función a un método no virtual de la clase base y llamarlo dentro del virtual. Entonces, podrías llamar explícitamente al método no virtual tanto desde la base como desde la descendiente.

Lo tengo, ¡gracias!
Razón de la queja: