Página 1 de 2

Stop de beneficio y de perdidas a la vez

Publicado: 14 Jun 2009 03:10
por polxx
Estamos comprados y queremos aplicar un stop de beneficio en % y otro stop de perdidas diferente en % tambien, asi que pongo esto:


if (Position.MarketPosition == MarketPosition.Long)
{
EnterShortLimit(DefaultQuantity, (Position.AvgPrice) * (1 + StopBeneficio), "");
EnterShortStop(DefaultQuantity, (Position.AvgPrice) * (1 - StopPerdida), "");
}

Sin embargo solo se aplica el primero de ellos, el limitado de beneficio. Pero si los intercambio entonces solo se aplica el de stop de perdidas.

Como hago para aplicar ambos a la vez?

Publicado: 14 Jun 2009 08:36
por cls
Prueba con las variaciones de ExitLong, que es para salir de posiciones largas.

Publicado: 14 Jun 2009 13:04
por polxx
Otra cosa, ¿se pueden abrir graficos y aplicarles sistemas sin estar conectado a ningun proveedor de datos? no me deja, y quizas alguna opcion pueda arreglar eos.

y si nos conectamos por market replay?

Publicado: 14 Jun 2009 15:28
por cls
polxx escribió:Otra cosa, ¿se pueden abrir graficos y aplicarles sistemas sin estar conectado a ningun proveedor de datos? no me deja, y quizas alguna opcion pueda arreglar eos.

y si nos conectamos por market replay?
claro Pol, si te conectas al Market Replay podrás reproducir la sesión y correr indicadores, estrategias, etc.

Publicado: 24 Jun 2009 03:25
por polxx
He probado de distintas maneras, y he llegado a la conclusion de que cuando ninja trader se encuentra con un EnterShort... o EnterLong... el sistema termina en ese punto.

Es decir, si estamos a 2000 puntos y ponemos:

EnterLongLimit(DefaultQuantity, (1990, "");
EnterShortLimit(DefaultQuantity, (2010, "");

Solo hace caso a la primera orden.
Si el precio baja hasta 1990, se ejecuta la compra porque toca el nivel.
Pero si sube hasta 2010 antes de que toque el 1990, no hace ninguna compra, como si la segunda orden nunca la ejecutara.

Si se ponen las ordenes al reves, sucede lo contrario.

que hago mal?
tiene solucion?

Es muy importante usar ambas ordenes a la vez, tiene que poder hacerse.

Publicado: 24 Jun 2009 07:32
por cls
el ninja sólo te permite estar largo o corto.
Si mandas una EnterLongLimit se establece que quieres ir largo y la orden prevalece sobre las siguientes a no ser que la canceles. Por lo tanto, si después mandas una EnterShortLimit no la tiene en cuenta (devuelve un null).

Creo que puedes solucionarlo utilizando dos estrategias (y a lo mejor con dos cuentas), pero no lo he probado.

Y sino lanza a mercado la que primero se toque. Es más pesado porque tienes que ir llevando la cuenta de las que se tocan pero puede hacerse.

S2

Re: Stop de beneficio y de perdidas a la vez

Publicado: 24 Jun 2009 08:54
por Man Apart
polxx escribió:Estamos comprados y queremos aplicar un stop de beneficio en % y otro stop de perdidas diferente en % tambien, asi que pongo esto:


if (Position.MarketPosition == MarketPosition.Long)
{
EnterShortLimit(DefaultQuantity, (Position.AvgPrice) * (1 + StopBeneficio), "");
EnterShortStop(DefaultQuantity, (Position.AvgPrice) * (1 - StopPerdida), "");
}

Sin embargo solo se aplica el primero de ellos, el limitado de beneficio. Pero si los intercambio entonces solo se aplica el de stop de perdidas.

Como hago para aplicar ambos a la vez?
Una pregunta: No conozco Ninja T. , asi que me gustaría saber , cuantas veces se ejecuta esa sentencia , por ejemplo en V. Chart (lo único que conozco) se ejecutaría en cada "vela" del Time frame. en un gráfico de una hora p.e. se ejecutaría al final de cada hora y cada vez , o sea ocho veces al día.
¿Como funciona esto en NT ? . Lo pregunto por si se me ocurriese algo para poder ayudarte.

Publicado: 24 Jun 2009 09:27
por Optiondreamer
¿Has probado con ...?

Código: Seleccionar todo

SetProfitTarget("", CalculationMode.Percent, x);
SetStopLoss("", CalculationMode.Percent, x, false);

Publicado: 24 Jun 2009 12:48
por polxx
CLS:
lo digo de otro modo,

if (Position.MarketPosition == MarketPosition.Flat)
{
EnterLongStop(DefaultQuantity, 2415, "");
EnterLongLimit(DefaultQuantity, 2400, "");
}

Si no tenemos posiciones abiertas, entrar largo si sube, entrar largo si baja.
Pues la segunda orden se la salta, si baja hasta 2400 no compra, pero si despues sube hasta 2415 si que compra.
Si se ponen al reves pasa lo contrario.


Man Apart:
Ninja trader trabaja tambien al terminar cada barra, creo que todos los programas de bolsa son asi.


Optiondreamer:
Hare pruebas con eso que comentas, creo que es la solucion. De todos modos sospecho que tendra limitaciones.

Publicado: 24 Jun 2009 13:48
por bolsa1
Por cierto, SetProfitTarget y SetStopLoss pueden ser dinámicas. Me refiero a que puedes variar sus valores dependiendo del estado de la posición. Yo lo utilizo en mis sistemas.

Saludos!

Publicado: 24 Jun 2009 14:23
por Optiondreamer
polxx escribió: Man Apart:
Ninja trader trabaja tambien al terminar cada barra, creo que todos los programas de bolsa son asi.
Ninja tiene una propiedad booleana (CalculateOnBarClose) para calcular a cada tick o a cada barra. Por supuesto, la opción de cálculo a cada tick consume más recursos. Aunque para mí es preferible ésta, pues dentro de una vela pasan muchas cosas.

Publicado: 24 Jun 2009 14:34
por Man Apart
A mi lo único que se me ocurre es:
1) si existen funciones de serie en el NT. del tipo Cerrar largos/cortos Limitada y cerrar largos/cortos stop pues utilizar estas opciones. P. ej. V.Chart las tiene y puedo lanzar ambas a la vez.. La limitada sería con el precio objetivo y el stop, pos , pos, pos, poseso
2) si no existen:
Validar en que lado del mercado estoy y si estoy mas cerca del objetivo que del stop o viceversa ; lanzar la orden en consecuencia.

Publicado: 24 Jun 2009 17:02
por polxx
bolsa1:
te refieres a tener distintos profit target y stop loss dependiendo de si estamos comprados o vendidos??

man apart:
El punto 1 que comentas es el problema, existen las mismas ordenes que en visual chart, pero no pueden aplicarsen 2 a la vez.
El punto 2 que comentas seria la solucion.

De todos modos la cosa aqui es usar SetProfitTarget y SetStopLoss, que son para eso precisamente.

Gracias a todos por la ayuda.

Publicado: 24 Jun 2009 17:16
por IceMan
A unas malas puedes hacer lo siguiente.

Metes tu orden y le aplicas el take profit.

Donde tenías pensado poner el stop, le pones una orden condicionada y contraria.

Si toca el stop de beneficios o take profit, se cierra.

Si toca la orden contraria te neutraliza la equity, cierras las dos y te quedas igual, pagando el spread de la orden que hace una suerte de stop.

Sólo tienes el inconveniente de dejar la ope descuidada, que te salte el take profit y no te anules la contraria, con lo que podría entrar y no estarías cubierto.

Es más sencillo de lo que parece así explicado.

:smt069I

Publicado: 24 Jun 2009 17:32
por cls
polxx escribió:CLS:
lo digo de otro modo,

if (Position.MarketPosition == MarketPosition.Flat)
{
EnterLongStop(DefaultQuantity, 2415, "");
EnterLongLimit(DefaultQuantity, 2400, "");
}

Si no tenemos posiciones abiertas, entrar largo si sube, entrar largo si baja.
Pues la segunda orden se la salta, si baja hasta 2400 no compra, pero si despues sube hasta 2415 si que compra.
Si se ponen al reves pasa lo contrario.
Asegúrate de que el input "Entries per direction" es mayor que 1.
Si está a 1 es normal que sólo te entre una orden.

S2