Ajuda na codificação - página 701

 
AtApi:

Olá, pessoal e gurus de código,

Estou procurando um indicador simples que traça seus próprios valores a partir de um arquivo CSV. Alguém pode, por favor, me ajudar?

Obrigado de antemão!

O que significa o "seu próprio valor"?
 
mladen:
O que significa o "seu próprio valor"?

Obrigado mladen,

Vamos explicar um pouco melhor: preciso de um indicador que leia de um arquivo CVS e trace os valores em uma subjanela, o CVS terá 2 valores separados por vírgula, o primeiro valor é a data e o segundo é o valor real que o indicador deve traçar.

por exemplo

o CVS tem 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

o indicador irá traçar o valor de acordo com a data

espero que agora esteja um pouco mais claro...

Obrigado por sua ajuda, amigo!

 

Prezado amigo,

preciso codificar,

feche a vela então se a vela estiver para CIMA então alerte paraCIMA e a vela estiver para BAIXO então alerte paraBAIXO a qualquer momento

se você tem a pls compartilhar comigo,

obrigado em adance,

- jesing

 
AtApi:

Obrigado mladen,

Vamos explicar um pouco melhor: preciso de um indicador que leia de um arquivo CVS e trace os valores em uma subjanela, o CVS terá 2 valores separados por vírgula, o primeiro valor é a data e o segundo é o valor real que o indicador deve traçar.

por exemplo

o CVS tem este aspecto:

Tempo,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

o indicador irá traçar o valor de acordo com a data

espero que agora esteja um pouco mais claro...

Obrigado por sua ajuda, amigo!

Isso é o que eu tenho conseguido até agora:

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);
}
Não sei por que se eu imprimir dt[c] sempre retorna o mesmo valor...como se o tempo nunca mudasse mesmo se o arr[0] mudasse em cada iteração do loop...
depois disto devemos atribuir o valor à barra com esse tempo... mas estou preso...

	          
 
AtApi:
AtApi:

Obrigado mladen,

Vamos explicar um pouco melhor: preciso de um indicador que leia de um arquivo CVS e trace os valores em uma subjanela, o CVS terá 2 valores separados por vírgula, o primeiro valor é a data e o segundo é o valor real que o indicador deve traçar.

por exemplo

o CVS tem este aspecto:

Tempo,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

o indicador irá traçar o valor de acordo com a data

espero que agora esteja um pouco mais claro...

Obrigado por sua ajuda, amigo!

Isso é o que eu tenho conseguido até agora:

Nunca me lembro de ter resolvido o problema.... o SrtToTime só aceita cordas com este formato: "yyyy.mm.dd hh:mi" que significa que eu estava carregando um CSV com este formato em vez de "yyyy.mm.dd hh.mi" e obviamente estava me dando um erro... de qualquer forma eu resolvi!
 

olá

mr mladen:

poderia atualizá-lo para a nova construção mt4

melhor consideração

Arquivos anexados:
 

Por favor, qualquer um pode me ajudar a resolver estes 3 problemas

1. corrigir o erro de fuga

2.remover o filtro do segundo período de tempo, o sistema funcionará em um chat de 30m

3.adicionar o indicador anexo como um filtro no chat 1D

 

@Amigos queridos,

Minha ea dá o erro abaixo,.

"EURUSD+,M5: bilhete desconhecido 21847676 para a função OrderDelete".

O que significa esta frase? Qual é o problema e o que eu posso fazer?

 
oguz:

@Amigos queridos,

Minha ea dá o problema abaixo.

"EURUSD+,M5: bilhete desconhecido 21847676 para StringConcatenate(função)".

O que significa esta frase? Qual é o problema?

O que eu posso fazer?

Significa que não pode encontrar um pedido com o número de bilhete 21847676 que possa apagar.

Ou :

  • o número do bilhete está errado
  • ou a ordem já foi apagada nesse meio tempo (dois EAs, ou o laço não verificou corretamente, ou algo semelhante ...)
 

olá Sr. mladen

você poderia ajudar a colocar este indicador em um gráficoseparado do MTF similar a esta imagem

respeito

Arquivos anexados:
xb4d_2.mq4  4 kb
Razão: