Tener el precio de apertura de la vela en una hora específica. - página 3

 

Vale, vale, lo reconozco:

#define HR0900 14400  //All times were changed for the test to see which is the Reference.
#define HR1500 10800
#define HR1900 7200
#define HR2300 3600

extern string     Heures="11:41;11:42;12:00;11:42;"; // Times for my test today...
string            HeureSH[];

datetime TC = TimeCurrent();

int times[]={HR1500, HR2300, HR0900, HR1900};
                
    for(int k=0; k<ArraySize(HeureSH); k++)
    {
      datetime    want= TC - times[k];
    }

int iBar= iBarShift(Symbol(), PERIOD_H1, want);
double OpenPrice= iOpen(Symbol(), PERIOD_H1, iBar);
Solo se considera uno de los #define. El Array HeureSH[] se ejecuta correctamente y si el tiempo escrito llega, es cierto, es correcto, esto es sólo times[k] no consideran todos los cuatro #define.
 
Kane59:

Vale, vale, lo reconozco:

Sólo se considera uno de los #define. El Array HeureSH[] se ejecuta correctamente y si el tiempo escrito llega, es cierto, es correcto, esto es solo times[k] no considera los cuatro #define.

El problema es bastante obvio...

string            HeureSH[];

así que este array tiene un tamaño de 0 ya que lo has declarado así... así que este bucle...

for(int k=0; k < ArraySize(HeureSH); k++)

comienza en 0 y termina cuando k >= 0 (siendo 0 el tamaño del array)

 

Ok, escribí eso porque pensé:

extern string     Heures="11:41;11:42;12:00;11:42;"; // Times for my test today...
      
                            0     1     2     3

int times[]={HR1500, HR2300, HR0900, HR1900};

               0        1       2       3
 
Kane59:

Ok, escribí eso porque pensé:

Creo que necesitas hacer alguna manipulación de cadenas, necesitas dividir tu cadena en tiempos individuales, convertir cada uno de estos a una fecha-hora y almacenarlos en tu array HeureSH[] ... trabajar con cadenas de esta manera puede ser un poco complicado, no es difícil pero es fácil meter la pata. Entonces tu código podría empezar a tener un poco de sentido...


Por cierto, estas son las funciones de cadena con las que tienes que trabajar, estúdialas cuidadosamente, disfrútalas.
 

Hola

Trabajo sobre ello pero no entiendo esto:

RaptorUK:

El problema es bastante obvio...

así que este array tiene un tamaño de 0 ya que lo has declarado así ... así que este bucle ...

comienza en 0 y termina cuando k >= 0 (siendo 0 el tamaño del array)

¿Puedes tratar de decirme con más detalles?


Para HeureSH[] usé líneas para cortar esto en 4 partes de cadenas para tener 4 horas diferentes.

Edite de nuevo:

He escrito ArraySize(HeureSH) en una función de impresión y me da: 4

Print("Open:", DoubleToStr(OpenPrice, digits), /*" Time:", TimeToStr(Time[iBar], */" ArraySise=", ArraySize(HeureSH));

2013.01.19 13:57:21 2012.11.19 19:00 Tester EURUSD,H1: Open:1.27701 ArraySise=4

he vuelto a probar y selecciona solo el último de estos:

int times[]={36000,21600,14400,14400};

Así que el último "14400". ¿Por qué no selecciona otros en el mismo orden del Array "HeureSH[]"?


¿Hay algún problema con el ciclo "For"?
 
Kane59:

Hola

Trabajo sobre ello pero no entiendo esto:

¿Puedes tratar de decirme con más detalles?


Para HeureSH[] usé líneas para cortar esto en 4 partes de cuerdas para tener 4 horas diferentes.

Edite de nuevo:

He escrito ArraySize(HeureSH) en una función de impresión y me da: 4

2013.01.19 13:57:21 2012.11.19 19:00 Tester EURUSD,H1: Open:1.27701 ArraySise=4

 

Ok ok lo siento.

extern string     Heures="09:00;15:00;19:00;23:00;";
string            HeureSH[];

int start()
  {
//---- 
int times[]= {36000,21600,14400,14400};

   for(int i=0; i<ArraySize(Heures); i++)
   {
      datetime    want = TC - times[i];
   }

   int iBar= iBarShift(Symbol(), PERIOD_H1, want);
   double OpenPrice= iOpen(Symbol(), PERIOD_H1, iBar);

   if (HeureSH(TimeToStr(iTime(Symbol(),PERIOD_H1,0),TIME_MINUTES)))
   {
      if(iOpen(Symbol(), PERIOD_H1, 0) < OpenPrice)
      {
         OrderSend( OP_SELL, .......);
      }
      if(iOpen(Symbol(), PERIOD_H1, 0) > OpenPrice)
      {
         OrderSend( OP_BUY, .......);
      }
   }

//----
   return(0);
  }

//+------------------------------------------------------------------+
void UpdateHSeSpeciales()
   {
      string hour1 = "";
      int count1 = 0;
      for(int k=0; k<StringLen(Heures); k++)
      {
         if(StringSubstr(Heures, k, 1) != ";")
         {
            hour1= hour1+ StringSubstr(Heures, k, 1);
         }
         else
         {
            ArrayResize(HeureSH, ArraySize(HeureSH)+1);
            HeureSH[count1] = hour1;
            hour1 ="";
            count1 +=1;
         }   
      }
   }
   bool HeureSH(string now1)
   {
      for(int k=0; k<ArraySize(HeureSH); k++)
      {
         if(now1 == HeureSH[k])
         {
            return(true);
         }
      }
   
      return(false);
   }

Por ejemplo, cuando son las 09:00, la iBar es la barra de ayer 23:00, 10 horas menos que TimeCurrent. Cuando son las 15:00, la iBar es la barra de hoy 09:00, ....... Lo que quiero Si llega la hora seleccionada, tener una barra de referencia que sea anterior a Now (TimeCurrent). Mi problema es que el programa sólo toma el último elemento de "times[]" no otros. Quiero que si HeureSH[0], use times[0] y continúe. ¿Qué puedo hacer?


PD: es todo lo que tengo y necesito.

 

Hola,

¿alguien puede ayudarme?

 
Kane59:

Hola,

¿alguien puede ayudarme?

No facilitas que nadie te ayude, pones trozos de tu código aquí y allá . Estoy tratando de entender tu código, no puedo ejecutarlo para ver lo que hace ya que no tengo el código completo, tienes una función con el mismo nombre que tu array, eso está bien pero no ayuda a la legibilidad.

¿Cuándo se llama a UpdateHSeSpeciales()?

 

Lo siento de verdad,

Sólo tengo eso, pero es cierto que me olvido de "UpdateHSeSpeciales".


Se llama en "init" cuando el programa comienza.

Razón de la queja: