1 abril 2016
1 abril 2016
Sistema de compensación
Este sistema presupone que en un momento concreto, en la cuenta puede haber
solo una posición abierta del mismo símbolo:
En este caso, no tiene importancia como resultado de qué acción se realiza
la operación en la dirección opuesta, si como fruto de la ejecución de
una orden de mercado o debido a la activación de una orden pendiente.
Más abajo mostramos un ejemplo de ejecución de dos operaciones de compra
de EURUSD con un volumen de 0.5 cada una de ellas:
Como resultado de la ejecución de estas operaciones, tenemos una posición
general con un volumen de 1 lote.
Sistema de cobertura
Este sistema de registro de la posición permite tener multitud de posiciones
comerciales de un mismo instrumento, incluso en direcciones diferentes.
Si hay una posición abierta de un instrumento comercial y el tráder efectúa
una nueva operación (o se activa una orden pendiente), se abre una nueva
posición. La posición existente no cambia.
Más abajo mostramos un ejemplo de ejecución de dos operaciones de compra
de EURUSD con un volumen de 0.5 cada una de ellas:
Como resultado de la ejecución de estas operaciones, tenemos la apertura
de dos posiciones diferentes.
Nuevo tipo de operación comercial Close By
Para las cuentas con cobertura de registro de posiciones se ha añadido
un nuevo tipo de operaciones comerciales: el cierre de una posición con
una opuesta. Esta operación permite cerrar simultáneamente dos posiciones
en direcciones opuestas de un mismo instrumento. Si las posiciones opuestas
tienen una cantidad diferente de lotes, entonces quedará abierta solo una
orden de las dos. Su volumen será igual a la diferencia de lotes de las
dos posiciones cerradas, y la dirección de la posición y el precio de apertura
serán como en la mayor (en volumen) de las posiciones cerradas.
En comparación con el cierre individual de dos posiciones, el cierre por
orden opuesta permite al tráder ahorrarse un spread:
Al cerrar la posición con otra opuesta se establece una orden del tipo "close by". En el comentario a la misma se indican los tickets de las posiciones cerradas. El cierre de una pareja de posiciones opuestas tiene lugar mediante dos operaciones del tipo "out by". La magnitud del beneficio/pérdida total obtenido como resultado del cierre de ambas posiciones, se indica solo en una de las operaciones.
class CAnimal { public: CAnimal(); // constructor virtual void Sound() = 0; // función virtual pura private: double m_legs_count; // número de patas del animal };Aquí la función Sound() es virtual pura, por eso se la declara con el especificador de función virtual pura PURE (=0).
class CAnimal { public: virtual void Sound()=NULL; // PURE method, debe ser redefinido en la clase derivada, la propia clase CAnimal se ha convertido en abstracta y no puede ser creada }; //--- derivada de la clase abstracta class CCat : public CAnimal { public: virtual void Sound() { Print("Myau"); } // PURE es redefinido, la clase CCat no es abstracta y puede ser creada }; //--- ejemplos de uso incorrecto new CAnimal; // error 'CAnimal' - el compilador retorna el error "cannot instantiate abstract class" CAnimal some_animal; // error 'CAnimal' - el compilador retorna el error "cannot instantiate abstract class" //--- ejemplos de uso correcto new CCat; // no hay error, la clase CCat no es abstracta CCat cat; // no hay error, la clase CCat no es abstractaLimitaciones de uso de las clases abstractas
//+------------------------------------------------------------------+ //| Clase básica abstracta | //+------------------------------------------------------------------+ class CAnimal { public: //--- función virtual pura virtual void Sound(void)=NULL; //--- función void CallSound(void) { Sound(); } //--- constructor CAnimal() { //--- invocación directa del método virtual Sound(); //--- invocación indirecta (a través de una tercera función) CallSound(); //--- en el constructor y/o destructor siempre se invocan sus propias funciones, //--- a pesar del carácter virtual y de la redefinición de la función invocada en la derivada //--- si la función invocada es virtual pura, entonces //--- la invocación provocará el error de ejecución crítico: "pure virtual function call" } };Sin embargo, los constructores y destructores de las clases abstractas pueden invocar otras funciones miembro.
typedef int (*TFunc)(int,int);Ahora TFunc es un tipo y se puede declarar la variable-índice a una función:
TFunc func_ptr;En la variable func_ptr se puede guardar la dirección de una función para invocarla más tarde:
int sub(int x,int y) { return(x-y); } int add(int x,int y) { return(x+y); } int neg(int x) { return(~x); } func_ptr=sub; Print(func_ptr(10,5)); func_ptr=add; Print(func_ptr(10,5)); func_ptr=neg; // error: neg no tiene el tipo int (int,int) Print(func_ptr(10)); // error: tiene que haber dos parámetrosLos índices a una función se pueden guardar y transmitir como parámetros. No es posible recibir un índice a un método de clase no estático.
ulong PositionGetTicket( int index // número en la lista de posiciones );
bool PositionSelectByTicket(
ulong ticket // ticket de la posición
);