Girar en el Ninja
Girar en el Ninja
Hay una cosa que me viene mal a la hora de programar sistemas en el Ninja: para girar pone dos órdenes, una para cerrar la posición antigua y otra para abrir la nueva.
A mí me vendría mejor que pusiera una sola orden de dos contratos ¿se puede hacer?
A mí me vendría mejor que pusiera una sola orden de dos contratos ¿se puede hacer?
- DarkTemplar
- Mensajes: 883
- Registrado: 13 Feb 2006 10:41
- Optiondreamer
- Mensajes: 345
- Registrado: 28 Mar 2006 08:07
- Ubicación: 40.705571, -74.013432
Hola,
No uso el Nija, y como no se C# no te puedo escribir el código exacto, pero puedes hacer un procedimiento que detecte la posición que tienes abierta y ejecute una compra/venta de la cantidad de contratos abiertos x 2.
Te pongo un pseudo churrocodigo con la idea:
Variable que recoge la posicion abierta:
OI= CONTRATOS ABIERTOS * 2
Procedimiento
SUB GIRAR
If posicion=Largo then
Command("PLACE", "", "MSFT", "SELL", OI, "MARKET", 0, 0, "", "", "", "", "")
elseif posicion=Corto then
Command("PLACE", "", "MSFT", "BUY", OI, "MARKET", 0, 0, "", "", "", "", "")
END SUB
Saludos.
No uso el Nija, y como no se C# no te puedo escribir el código exacto, pero puedes hacer un procedimiento que detecte la posición que tienes abierta y ejecute una compra/venta de la cantidad de contratos abiertos x 2.
Te pongo un pseudo churrocodigo con la idea:
Variable que recoge la posicion abierta:
OI= CONTRATOS ABIERTOS * 2
Procedimiento
SUB GIRAR
If posicion=Largo then
Command("PLACE", "", "MSFT", "SELL", OI, "MARKET", 0, 0, "", "", "", "", "")
elseif posicion=Corto then
Command("PLACE", "", "MSFT", "BUY", OI, "MARKET", 0, 0, "", "", "", "", "")
END SUB
Saludos.
Re: Girar en el Ninja
No necesariamente.Jose escribió:Hay una cosa que me viene mal a la hora de programar sistemas en el Ninja: para girar pone dos órdenes, una para cerrar la posición antigua y otra para abrir la nueva.
Si entraste corto con un EnterShort. Al poner un EnterLong te cerrará todos los contratos que tengas cortos, y te abrirá los que le pongas en el EnterLong.
Según el ejemplo que he puesto, sí.Jose escribió:A mí me vendría mejor que pusiera una sola orden de dos contratos ¿se puede hacer?
S2
Re: Girar en el Ninja
Gracias Optiondreamer. Yo de programar ni idea, empezaré a mirarlo a ver si puedo hacer algo parecido.
Lo que hace el ninja es poner una orden para cerrar cortos de X contratos, y otra orden para abrir largos de Y contratos, cuando a mí lo que me interesaría es que pusiera una sola orden de compra de X+Y contratos.
¿Tú has conseguido que te ponga una sola orden?
sí, el sistema lo tengo con EnterLong y EnterShort (EnterLong cuando la cotización esté por encima de una media, y EnterShort cuando esté por debajo).cls escribió:Si entraste corto con un EnterShort. Al poner un EnterLong te cerrará todos los contratos que tengas cortos, y te abrirá los que le pongas en el EnterLong.
Lo que hace el ninja es poner una orden para cerrar cortos de X contratos, y otra orden para abrir largos de Y contratos, cuando a mí lo que me interesaría es que pusiera una sola orden de compra de X+Y contratos.
¿Tú has conseguido que te ponga una sola orden?
Re: Girar en el Ninja
Jose, creo que no te he entendido. Si estás corto y quieres ponerte largo, tendrás que cerrar los cortos (una orden) y abrir los largos (otra orden). Y el broker te cobrará la gestión de estas dos operaciones. Esto no es posible cambiarlo. El broker tiene que recibir una orden para cerrar y otra para abrir. Igual que harías en operativa discrecional. Y el Ninja tiene que enviar esas dos órdenes.Jose escribió:Gracias Optiondreamer. Yo de programar ni idea, empezaré a mirarlo a ver si puedo hacer algo parecido.
sí, el sistema lo tengo con EnterLong y EnterShort (EnterLong cuando la cotización esté por encima de una media, y EnterShort cuando esté por debajo).cls escribió:Si entraste corto con un EnterShort. Al poner un EnterLong te cerrará todos los contratos que tengas cortos, y te abrirá los que le pongas en el EnterLong.
Lo que hace el ninja es poner una orden para cerrar cortos de X contratos, y otra orden para abrir largos de Y contratos, cuando a mí lo que me interesaría es que pusiera una sola orden de compra de X+Y contratos.
¿Tú has conseguido que te ponga una sola orden?
Otra cosa distinta es cómo codificar esto dentro del ninja y cuántas instrucciones de código necesitas. Como comenté en el ejemplo con una es suficiente. (Aunque internamente esta única instrucción suponga varias órdenes).
Si lo que quieres es hacer hedge. Es decir, seguir con los cortos abiertos y abrir largos para cubrir esos cortos y además sumarte al movimiento, Eso no se puede (bueno sí se puede pero no es tan fácil).
El ninja no permite en la misma cuenta estar largo y corto a la vez. Así que tendrías que trabajar con dos cuentas. Una para largos y otra para cortos. Y llevar la gestión dentro del código. Una estrategia para largos en la cuenta de largos, y otra para cortos en la cuenta de cortos.
S2
- DarkTemplar
- Mensajes: 883
- Registrado: 13 Feb 2006 10:41
- DarkTemplar
- Mensajes: 883
- Registrado: 13 Feb 2006 10:41
- DarkTemplar
- Mensajes: 883
- Registrado: 13 Feb 2006 10:41
No será más tiempo del que tiramos con el Visual...Jose escribió:Creía que era más fácil esto, se ve que lo de migrar del Visual al Ninja me va a llevar más tiempo del que pensaba

Ánimo y saludos!

"Mercaderes e industriales no deben ser admitidos a la ciudadanía; porque su género de vida es abyecto y contrario a la virtud."
Aristóteles.
Aristóteles.
- Optiondreamer
- Mensajes: 345
- Registrado: 28 Mar 2006 08:07
- Ubicación: 40.705571, -74.013432
Me acabo de bajar el Ninja y no se si esto rulará, por si acaso, lo pruebas con el simulador, aparte de añadirlo en la estrategia que sea.
Saludos.
Saludos.
Código: Seleccionar todo
protected override void OnBarUpdate()
{
// Condition set 1
if (Position.MarketPosition == MarketPosition.Long)
{
EnterShort((int) (Position.MarketPosition)*2, "");
}
// Condition set 2
if (Position.MarketPosition == MarketPosition.Short)
{
EnterLong((int) (Position.MarketPosition)*2, "");
}
}
Si te ha gustado este hilo del Foro, ¡compártelo en redes!