Aiuto per la codifica - pagina 701

 
AtApi:

Ciao ragazzi e guru del codice,

sto cercando un semplice indicatore che tracci i propri valori da un file CSV. Qualcuno può aiutarmi per favore?

Grazie in anticipo!

Cosa significa "il suo proprio valore"?
 
mladen:
Cosa significa "il proprio valore"?

Grazie mladen,

mi spiego meglio: ho bisogno di un indicatore che legga da un file CVS e tracci i valori in una sottofinestra, il CVS avrà 2 valori separati da virgola, il primo valore è la data e il secondo è il valore effettivo che l'indicatore dovrebbe tracciare.

per esempio

il CVS ha questo aspetto:

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

l'indicatore traccerà il valore in base alla data

Spero che ora sia un po' più chiaro...

Grazie per il tuo aiuto amico!

 

Caro amico,

Ho bisogno di codificare,

candela chiudere poi se la candela è UP poi avvisoUP e la candela è DOWN poi avvisoDOWN qualsiasi time frame

se avete pls condividere me,

grazie in adance,

- jesing

 
AtApi:

Grazie mladen,

mi spiego meglio: ho bisogno di un indicatore che legga da un file CVS e tracci i valori in una sottofinestra, il CVS avrà 2 valori separati da virgola, il primo valore è la data e il secondo è il valore effettivo che l'indicatore dovrebbe tracciare.

per esempio

il CVS ha questo aspetto:

Ora,valore

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

l'indicatore traccerà il valore di conseguenza alla data

Spero che sia un po' più chiaro ora...

Grazie per il tuo aiuto amico!

Questo è ciò che ho realizzato finora:

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);
}
Non sono sicuro del perché se stampo dt[c] restituisce sempre lo stesso valore..come se il tempo non cambiasse mai anche se l'arr[0] cambia ad ogni iterazione del ciclo...
dopo questo dovremmo assegnare il valore alla barra con quel tempo...ma sono bloccato...

	          
 
AtApi:
AtApi:

Grazie mladen,

mi spiego meglio: ho bisogno di un indicatore che legga da un file CVS e tracci i valori in una sottofinestra, il CVS avrà 2 valori separati da virgola, il primo valore è la data e il secondo è il valore effettivo che l'indicatore dovrebbe tracciare.

per esempio

il CVS ha questo aspetto:

Ora,valore

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

l'indicatore traccerà il valore di conseguenza alla data

Spero che sia un po' più chiaro ora...

Grazie per il tuo aiuto amico!

Questo è ciò che ho realizzato finora:

Non importa ho risolto il problema....l'SrtToTime accetta solo stringhe con questo formato: "yyyy.mm.dd hh:mi" ciò significa che stavo caricando un CSV con questo formato invece "yyyy.mm.dd hh.mi" e ovviamente mi stava dando un errore... comunque ho risolto!
 

ciao

signor mladen:

potrebbe aggiornarlo per la nuova build di mt4

migliore considerazione

File:
 

Per favore, qualcuno può aiutarmi a risolvere questi 3 problemi

1. correggere l'errore di trascinamento

2. rimuovere il filtro del secondo time frame, il sistema funzionerà sulla chat 30m

3. aggiungere l'indicatore allegato come filtro sulla chat 1D

 

@Cari amici,

Il mio ea dà il seguente errore,.

"EURUSD+,M5: ticket sconosciuto 21847676 per la funzione OrderDelete"

Cosa significa questa frase? Qual è il problema e cosa posso fare?

 
oguz:

@Cari amici,

Il mio ea dà il seguente problema.

"EURUSD+,M5: ticket sconosciuto 21847676 per StringConcatenate(function"

Cosa significa questa frase? Qual è il problema?

Cosa posso fare?

Significa che non riesce a trovare un ordine con il numero di ticket 21847676 che può cancellare

O :

  • il numero del biglietto è sbagliato
  • o l'ordine è già stato cancellato nel frattempo (due EA, o il ciclo non ha controllato correttamente, o qualcosa di simile ...)
 

ciao signor mladen

potresti aiutare a mettere questo indicatore su un graficoseparato MTF simile a questa immagine

per quanto riguarda

File:
xb4d_2.mq4  4 kb