Página 1 de 1

Duda programación NinjaTrader

Publicado: 29 Jul 2008 15:00
por Txen
Buenas,...
..me gustaría que mi sistema se active, es decir comience a leer las condiciones que le impongo cuando se cumpla, por ejemplo, que una barra cierre por encima del Upperband de Bollinguer.
No puedo ponerlo como una condición, porque en el paquete de condiciones podría estar justamente lo contrario, es decir, que una de ellas fuera que el cierre estuviera por debajo de la Lower band.

Al final debería de leerse: "Opera en la barra 0 cuando se cumplan las condiciones X siendo una de ellas que el cierre de la barra esté por debajo de LowerBand habiéndose producido durante el día en algún momento un cierre por encima de UpperBand"

...agradecería alguna ayuda...(no acabo de consegurilo con una bool)...

gracias y saludos...

Publicado: 29 Jul 2008 15:29
por bolsa1
Añade una variable lógica (p.ej. "cortesuperiorbollinguer") que se active a "true" cuando el cierre esté por encima de higherband.. después comprueba otra condición "si cortesuperiorbollinguer=true y -otra condición-" entonces "opera". Al final del día pon "cortesuperiorbollinguer=false" para prepararlo para el día siguiente.

No tengo tiempo de detalles, que me llaman para comer, si tienes dudas pregunta.

Saludos!

Publicado: 29 Jul 2008 16:26
por Txen
Observo, bolsa 1, que siempre tienes una segundo para comentar aspectos de programación de NinjaTrader, es de agradecer,...
Mira, lo que pongo es:
protected override void Initialize()
{
targets y stops

CalculateOnBarClose = true;
cierreSuperior = false;

}
/// <summary>
/// Called on each bar update event (incoming tick)
/// </summary>
protected override void OnBarUpdate()
{

// Reseteo al inicio del dia:
if (Bars.SessionBreak == true)
cierreSuperior = false;

// Activación de la condición de cierre superior a UPPERBAND
if (Close[0] > Bollinger(DesvBollinger, PeriodoBollinger).Upper[0])
cierreSuperior = true;

// Condiciones de entrada
if (cierreSuperior == true
&& el resto de condiciones)
{
entrada de órdenes
cierreSuperior = false;
}

¿Qué te parece?

Publicado: 29 Jul 2008 16:31
por bolsa1
Perfecto.

Creo que el (Bars.SessionBreak ) puede ir antes, fuera del bucle del (BarUpdate)

Ya me dirás si te funciona. ;-)

Publicado: 29 Jul 2008 17:39
por Txen
...dice que no quiere, seguiré intentándolo,.....]

Publicado: 29 Jul 2008 18:48
por bolsa1

Código: Seleccionar todo

/ Condiciones de entrada
if (cierreSuperior == true
&& el resto de condiciones)
{
entrada de órdenes
cierreSuperior = false;
} 
Si la "entrada de órdenes" no se cumple en el esta misma barra, estás volviendo a poner cierreSuperior = false, con lo que sólo operará si el cierre está por encima de la banda superior. Tienes que suprimir cierreSuperior = false:

Código: Seleccionar todo

/ Condiciones de entrada
if (cierreSuperior == true
&& el resto de condiciones)
{
entrada de órdenes
} 
Prueba así, a ver si va.

Saludos!

Publicado: 29 Jul 2008 19:07
por Txen
...muy interesante...
además estoy pensando alguna cosa más, pero te lo comento cunado lo termine de tener claro,...creo que el problema está en el reseteo, el decir que en la primera barra es "false" puede que se contradiga con la realidad de esa barra...