¿como definir las horas de entrada y salida del sistema?

Inicio Foros Análisis, Indicadores y Sistemas Sistemas ¿como definir las horas de entrada y salida del sistema?

Este debate contiene 16 respuestas, tiene 0 mensajes y lo actualizó  pepemac hace 4 años, 5 meses.

Viendo 15 publicaciones - del 1 al 15 (de un total de 18)
  • Autor
    Publicar
  • #1387

    pepemac
    Miembro

    He creado un sistema automatico y quisiera limitar las horas de su ejecución ¿como podria hacer esto con el ninja?
    Un saludo

    #5044

    TraderNinja
    Miembro

    Define las varables de la hora y los minutos (incluso los segundos) para poder luego optimizarlas, y luego puedes manejar las horas con ToTime().

     #region Variables
    private int horaEntrada=7;
    private int minutoEntrada=0;
    int horacompleta=0;
    #endregion


    protected override void Initialize()
    {
    horacompleta=(horaEntrada*10000)+(minutoEntrada*100);
    }

    protected override void OnBarUpdate()
    {
    if (ToTime(Time[0])==horacompleta) {...acciones...}
    }

    Saludos!

    #5059

    Faust
    Miembro

    Se puede programar esto con el strategy wizard?

    P.d. Es una lástima que ninjatrader no tenga tantos recursos de formación, en la programación, como si tienen otras plataformas.

    #5062

    TraderNinja
    Miembro

    Realmente creo que NinjaTrader es la plataforma que más recursos de formación tiene, ya que te vale cualquier tutorial de programación en C# que puedas encontrar por internet. NinjaScript no deja de ser una extensión de este lenguaje de programación, y la posibilidad de usar cualquier librería .NET lo convierte en un lenguaje universal y súperpotente.

    Saludos!

    #5620

    Gargamel
    Miembro

    Buenas tardes,

    Llevo un tiempo utilizando el código arriba propuesto para definir las horas en las que mis sistemas tienen que operar. Hasta hoy me había funcionado sin problemas.

    Por ejemplo tengo un sistema que en determinadas condiciones abre cortos en el FDAX hasta las 15:00.

    Cuando llego a casa, veo que me ha entrado al principio de la barra de las 15:30 ocasionandome un destrozo en la cuenta.

    Intento ver qué ha pasado y no consigo saberlo. He desconectado la estrategia y he vuelto a activarla y esa operación ya no me aparece en el gráfico con la barra de puntos.

    ¿A alguien le ha pasado algo parecido? Gracias de antemano

    #5729

    cls
    Miembro

    Hola,

    lo primero es conocer el modelo que se usa para las barras temporales …

    Supongamos que trabajas en charts de 30min.

    La barra de las 15:30 no tiene ningún tick a esa hora. Tendrá ticks que podrán ir desde las 15:00:00 hasta las 15:29:59. Si llega un tick exactamente a las 15:30:00 irá a la siguiente barra que tendrá la etiqueta temporal de las 16:00.

    Por lo tanto la barra de las 15:30 podrá tener órdenes realizadas por un tick con timestamp a las 15:00:00.

    Lo más rápido es que en el Initialize pongas TraceOrders = True y abras la ventana Output cuando ejecutes el sistema para que veas el log de las operaciones. Así podrás salir de dudas.

    S2

    #5730

    Fer137
    Miembro

    O que mire en la pestaña log, ahí debería poner en que momento se hizo.

    Por cierto, es algo caotico el modelo de las velas temporales del ninja.
    Las de año, mes o dia las etiqueta por el principio, por ejemplo en la actual de year pone que estamos en 2012. Mientras que las de semana, minuto, etc. las etiqueta por el final (futuro). Las de mes como las de dia , mientras que las de semana como las de minuto, es curioso.

    Hmmm.. quizas las diseñaron cuando hace unos años había acalorados debates sobre si el comienzo de siglo o milenio era 1999, 2000 o 2001 y a raiz de aquello hicieron este batiburrillo.

    #5731

    TraderNinja
    Miembro

    Puede añadirse a nuestra lista de peticiones… 😉

    #5893

    serotonina
    Miembro

    Ayuda a un novato:
    Soy bastante tosco en esto de la programación y no logro que me funcione el código de más arriba para definir horas de entrada y salida en un sistema que he elaborado con el Wizard de ninja.

    Alguien me puede explicar que debo cambiar en el código que nos aporta más arriba Santi, para que mi sistema se ponga en funcionamiento de las 9,00h. a las 13,00h (hora española)
    Tambien de 9,00h a 13,00h y vuelta a entrar en mercado de 15,00h a 18,00 ???
    Gracias.

    Serotonina..-

    #5917

    serotonina
    Miembro

    alguien puede ayudarme en la duda de más arriba?? sigo sin conseguir definir las horas de entrada y salida.

    Gracias compis

    #5942

    CJS
    Miembro

    Hola Serotonina,

    Si no quieres usar estructuras DateTime, una forma muy simple de hacerlo es la siguiente:

    Declara las siguientes variables:

    private int Inicio1 = 900;
    private int Fin1 = 1300;
    private int Inicio2 = 1500;
    private int Fin2 = 1800

    Luego en OnBarUpdate () haces el siguiente ajuste ya que la función ToTime() devuelve un Integer con la siguiente estructura Hmmss :

    int HI1 = Inicio1 * 100;
    int HF1 = Fin1 * 100;
    int HI2 = Inicio2 * 100;
    int HF2 = Fin2 * 100;

    Ahora ya puedes usarlo como condiciones usando la siguiente sintaxis:

    if((ToTime(Time[0])> HI1 && ToTime(Time[0])< HF1) || (ToTime(Time[0])> HI2 && ToTime(Time[0])< HF2) && ….) Aquí está explicado: http://www.ninjatrader.com/support/helpGuides/nt7/index.html?totime.htm

    Saludos,

    #6015

    serotonina
    Miembro

    Gracias CJS, pero debo ser más tosco de lo q creía pues he copiado lo que me indicas en el código del sistema y no consigo que defina las horas. No sé si podrías especificarlo de manera que lo pueda copiar desde aquí y pegarlo en el código de ninja. Ya te digo que en programación estoy bastante pillao y aunque me estoy comiendo tutorial tras tutorial, aún no controlo el tema.

    Gracias por tu aportación.

    Un saludo.

    serotonina..-

    #6020

    TraderNinja
    Miembro

    Os dejo un ejemplo que acabo de programar… destripando el código podéis ver el funcionamiento. En el ejemplo el sistema compra en el inicio de la sesión y vende en el fin. La hora de entrada y salida se pasa por parámetros (es optimizable, vamos…).

    Saludos!

    #6566

    xaviss629
    Miembro

    Hola Chicos,
    Creo que lo pongo bien y no me hace ni caso… El horario que le marco no lo respeta para nada.
    ¿que tengo mal?

    ///

    /// Maximos y Minimos
    ///

    [Description(“Maximos y Minimos”)]
    public class Contra : Strategy
    {
    #region Variables
    // Wizard generated variables
    private int perdida = 1; // Default setting for Perdida
    private int objetivo = 1; // Default setting for Objetivo
    private int horaInicio = 0; // Default setting for HoraInicio
    private int horaFin = 0; // Default setting for HoraFin
    private int minutoInicio = 0; // Default setting for MinutoInicio
    private int minutoFin = 0; // Default setting for MinutoFin
    // User defined variables (add any user defined variables below)
    int iniciosesion=0;
    int finsesion=0;

    #endregion

    ///

    /// This method is used to configure the strategy and is called once before any strategy method is called.
    ///

    protected override void Initialize()
    {
    SetProfitTarget(“”, CalculationMode.Ticks, Objetivo);
    SetStopLoss(“”, CalculationMode.Ticks, Perdida, false);

    CalculateOnBarClose = true;
    iniciosesion=(horaInicio*10000)+(minutoInicio*100);
    finsesion=(horaFin*10000)+(minutoFin*100);
    }

    ///

    /// Called on each bar update event (incoming tick)
    ///

    protected override void OnBarUpdate()
    {
    // Condition set 1
    if (Close[0] < Open[0])
    {
    EnterLongStop(DefaultQuantity, High[0], “”);
    }

    // Condition set 2
    if (Close[0] > Open[0])
    {
    EnterShortStop(DefaultQuantity, Low[0], “”);
    }
    {
    if(ToTime(Time[0])==iniciosesion) EnterLong();

    if(ToTime(Time[0])==finsesion) ExitLong();
    }
    }

    #region Properties
    [Description(“”)]
    [GridCategory(“Parameters”)]
    public int Perdida
    {
    get { return perdida; }
    set { perdida = Math.Max(1, value); }
    }

    [Description(“”)]
    [GridCategory(“Parameters”)]
    public int Objetivo
    {
    get { return objetivo; }
    set { objetivo = Math.Max(1, value); }
    }

    [Description(“”)]
    [GridCategory(“Parameters”)]
    public int HoraInicio
    {
    get { return horaInicio; }
    set { horaInicio = Math.Max(1, value); }
    }

    [Description(“”)]
    [GridCategory(“Parameters”)]
    public int HoraFin
    {
    get { return horaFin; }
    set { horaFin = Math.Max(0, value); }
    }

    [Description(“”)]
    [GridCategory(“Parameters”)]
    public int MinutoInicio
    {
    get { return minutoInicio; }
    set { minutoInicio = Math.Max(0, value); }
    }

    [Description(“”)]
    [GridCategory(“Parameters”)]
    public int MinutoFin
    {
    get { return minutoFin; }
    set { minutoFin = Math.Max(0, value); }
    }
    #endregion
    }

    #6573

    TraderNinja
    Miembro

    Tu operativa sólo depende del horario de sesión cuando lo pides:

    if(ToTime(Time[0])==iniciosesion) EnterLong();

    if(ToTime(Time[0])==finsesion) ExitLong();

    En el resto de condicionales entran libremente…

    Saludos!

Viendo 15 publicaciones - del 1 al 15 (de un total de 18)

Debes estar registrado para responder a este debate.