Ayuda a la codificación - página 701

 
AtApi:

Hola chicos y gurús del código,

Estoy buscando un indicador simple que traza sus propios valores de un archivo CSV. ¿Puede alguien ayudarme?

¡Gracias de antemano!

¿Qué significa "su propio valor"?
 
mladen:
¿Qué significa "su propio valor"?

Gracias mladen,

me explico un poco mejor: necesito un indicador que lea de un archivo CVS y grafique los valores en una sub-ventana, el CVS tendrá 2 valores separados por comas, el primer valor es la fecha y el segundo es el valor real que el indicador debe graficar.

Por ejemplo

el CVS tiene este aspecto:

date,value
2016.10.26.05.55,126.845
2016.10.26.05.50,126.848
2016.10.26.05.45,126.844
2016.10.26.05.40,126.82
2016.10.26.05.35,126.816
2016.10.26.05.30,126.81

el indicador trazará el valor correspondiente a la fecha

Espero que esté un poco más claro ahora...

¡Gracias por tu ayuda amigo!

 

Querido amigo,

necesito codificar,

si la vela se cierra, si la vela está arriba, entonces alertaarriba y si la vela está abajo, entonces alertaabajo en cualquier marco de tiempo

si usted tiene pls compartirme,

gracias en adance,

- jesing

 
AtApi:

Gracias mladen,

me explico un poco mejor: necesito un indicador que lea de un archivo CVS y grafique los valores en una sub-ventana, el CVS tendrá 2 valores separados por comas, el primer valor es la fecha y el segundo es el valor real que el indicador debe graficar.

Por ejemplo

el CVS se ve así:

Hora,valor

2016.10.26.21.20,127.765

2016.10.26.21.15,127.777

2016.10.26.21.10,127.777

2016.10.26.21.05,127.799

2016.10.26.21.00,127.791

2016.10.26.20.55,127.788

el indicador trazará el valor correspondiente a la fecha

Espero que sea un poco más claro ahora...

¡Gracias por tu ayuda amigo!

Eso es lo que he logrado hasta ahora:

extern   string   FileName    = "AUDCAD.CSV";
datetime   dt[9999];
double     val[9999];

string     arr[2];    

int h = FileOpen(FileName, FILE_CSV|FILE_READ,'~');
  if (h==0)   Comment("File "+FileName+" not found.");

  
  for (int c=0; !FileIsEnding(h) && c<9999; c++)  {

  
    string tmp = FileReadString(h);
    if (FileIsEnding(h))  break;
    StrToStringArray(tmp,arr,",");
    dt[c]  = StrToTime(arr[0]);  // <==== This should convert the date value (in the format of "yyyy.mm.dd hh:mi") to datatime type and assign it to the array
    val[c] = StrToNumber(arr[1]); // <==== This will assign the value to the array
   

  }
  FileClose(h);

//+------------------------------------------------------------------+
void StrToStringArray(string str, string &a[], string delim=",")  {
//+------------------------------------------------------------------+
  int z1=-1, z2=0;
  for (int i=0; i<ArraySize(a); i++)  {
    z2 = StringFind(str,delim,z1+1);
    a[i] = StringSubstr(str,z1+1,z2-z1-1);
    if (z2 >= StringLen(str)-1)   break;
    z1 = z2;
    
  }
}
//+------------------------------------------------------------------+
double StrToNumber(string str)  {
//+------------------------------------------------------------------+
// Usage: strips all non-numeric characters out of a string
  int    dp   = -1;
  int    sgn  = 1;
  double num  = 0.0;
  for (int i=0; i<StringLen(str); i++)  {
    string s = StringSubstr(str,i,1);
    if (s == "-")  sgn = -sgn;   else
    if (s == ".")  dp = 0;       else
    if (s >= "0" && s <= "9")  {
      if (dp >= 0)  dp++;
      if (dp > 0)
        num = num + StrToInteger(s) / MathPow(10,dp);
      else
        num = num * 10 + StrToInteger(s);
    }
  }
  return(num*sgn);
}
No estoy seguro de por qué si imprimo dt[c] siempre devuelve el mismo valor... como si el tiempo nunca cambiara aunque el arr[0] cambie en cada iteración del bucle...
Después de esto deberíamos asignar el valor a la barra con ese tiempo... pero estoy atascado...

	          
 
AtApi:
AtApi:

Gracias mladen,

me explico un poco mejor: necesito un indicador que lea de un archivo CVS y grafique los valores en una sub-ventana, el CVS tendrá 2 valores separados por comas, el primer valor es la fecha y el segundo es el valor real que el indicador debe graficar.

Por ejemplo

el CVS se ve así:

Hora,valor

2016.10.26.21.20,127.765

2016.10.26.21.15,127.777

2016.10.26.21.10,127.777

2016.10.26.21.05,127.799

2016.10.26.21.00,127.791

2016.10.26.20.55,127.788

el indicador trazará el valor correspondiente a la fecha

Espero que sea un poco más claro ahora...

¡Gracias por tu ayuda amigo!

Eso es lo que he logrado hasta ahora:

¡¡No importa, he resuelto el problema: .... el SrtToTime solo acepta cadenas con este formato: "aaaa.mm.dd hh:mi" eso significa que estaba cargando un CSV con este formato en vez de "aaaa.mm.dd hh.mi" y obviamente me estaba dando un error.. de todas formas lo he resuelto!!
 

hola

señor mladen:

podría actualizarlo para la nueva construcción de mt4

saludos

Archivos adjuntos:
 

Por favor, ¿alguien puede ayudarme a solucionar estos 3 problemas?

1. arreglar el error de arrastre

2.eliminar el segundo filtro de tiempo, el sistema se ejecutará en el chat de 30m

3.añadir el indicador adjunto como un filtro en el chat 1D

 

@Estimados amigos,

Mi ea da el siguiente error,.

"EURUSD+,M5: ticket desconocido 21847676 para la función OrderDelete"

¿Qué significa esta frase? ¿Cuál es el problema y qué puedo hacer?

 
oguz:

@Estimados amigos,

Mi ea da el siguiente problema.

"EURUSD+,M5: ticket desconocido 21847676 para StringConcatenate(function"

¿Qué significa esta frase? ¿Cuál es el problema?

¿Qué puedo hacer?

Significa que no puede encontrar una orden con el número de ticket 21847676 que pueda eliminar

O bien

  • el número de ticket es erróneo
  • o el pedido ya se ha eliminado entretanto (dos EAs, o el bucle no ha comprobado correctamente, o algo similar...)
 

hola señor mladen

¿podría ayudar a poner este indicador en MTF gráficoseparado similar esta imagen

respecto a

Archivos adjuntos:
xb4d_2.mq4  4 kb