Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1169

 
Alexandr Sokolov:

non arriva ai calcoli


ecco l'inizializzazione


Ed ecco la condizione di prova.

GRAZIE!!!!!))))) I Tf=falso di proposito e......Forget . Ops

Tutto funziona.
 
Alexey Viktorov:
Per prima cosa, dobbiamo decidere il numero di valori nella seconda dimensione della futura matrice. Già ora possiamo vedere che il numero di elementi non è uguale. Probabilmente, dovremmo prendere l'uno massimo e riempire con zeri o -1, per esempio, dove rimangono degli uno in più. E non sarebbe male definire in anticipo la prima dimensione, se è nota. E poi nel ciclo annidato prendete L1 e scrivete tutto ciò che vi serve nell'array, poi la seconda iterazione del ciclo esterno scrive nell'indice successivo tutto ciò che è in L2 e così via.


E, giustamente, è meglio infilarlo in una struttura.

Allora l'array potrà cambiare dimensione nella prima e nella seconda dimensione. Cioè, sarà un array unidimensionale in un array unidimensionale.
Grazie per il vettore.
 
stepystr:
Grazie per il vettore.

Improvvisamente ho ottenuto un ordine in cui era anche più vantaggioso scrivere i parametri in una stringa e usarla per creare un array di parametri. Ho dovuto trasformare la teoria in pratica. Bene, ho esteso il mio compito al tuo compito. Ecco un esempio che usa le strutture. Solo nei tuoi esempi alla fine della lista di valori devi rimuovere il carattere delimitatore ";".

/********************************************************************\
|                                                             00.mq5 |
|                                            © 2020, Alexey Viktorov |
|                       https://www.mql5.com/ru/users/alexeyvik/news |
\********************************************************************/
#property copyright "© 2020, Alexey Viktorov"
#property link      "https://www.mql5.com/ru/users/alexeyvik/news"
#property version   "1.00"
struct TEST
 {
  double             s0[];
  double             s1[];
 } test[2];
string L1 = "1.15110;1.14105;1.13240;1.12370;1.11640;1.11170;1.10655;1.09895;1.08850;1.07850;1.06475";
string L2 = "1.32130;1.31030;1.29860;1.29042;1.27985;1.25605;1.24725;1.23565;1.22505;1.20815;1.20115;1.18850;1.16690;1.14465";
/********************Script program start function*******************/
void OnStart()
 {
  String_to_Array(L1, test[0].s0);
  String_to_Array(L2, test[1].s1);
  ArrayPrint(test[0].s0);
  ArrayPrint(test[1].s1);
 }/******************************************************************/

/********************************************************************/
void String_to_Array(string str, double &array[])
 {
  StringTrimRight(str);
  int index = INT_MAX;
  while(index > 0)
   {
    index = StringFind(str, ";");
    int i = ArraySize(array);
    ArrayResize(array, i+1);
    array[i] = StringToDouble(StringSubstr(str, 0, index));
    StringTrimLeft(str);
    str = StringSubstr(str, index+1);
   }
 };/*****************************************************************/
/*****************************End program****************************/
File:
00.mq5  4 kb
 
Alexey Viktorov:

Improvvisamente ho ottenuto un ordine in cui era anche più redditizio scrivere i parametri in una stringa e usarla per creare un array di parametri. Ho dovuto trasformare la teoria in pratica. Così, ho esteso il mio compito al tuo compito. Ecco un esempio che usa le strutture. Solo nei tuoi esempi alla fine della lista di valori devi rimuovere il carattere delimitatore ";".

struct TEST
{
   double             s0[];
   double             s1[];
} test[2];
string L1 = "1.15110;1.14105;1.13240;1.12370;1.11640;1.11170;1.10655;1.09895;1.08850;1.07850;1.06475";
string L2 = "1.32130;1.31030;1.29860;1.29042;1.27985;1.25605;1.24725;1.23565;1.22505;1.20815;1.20115;1.18850;1.16690;1.14465";
/********************Script program start function*******************/
void OnStart()
{
   String_to_Array(L1, ';', test[0].s0);
   String_to_Array(L2, ';', test[1].s1);
   ArrayPrint(test[0].s0);
   ArrayPrint(test[1].s1);
}/******************************************************************/

/********************************************************************/
void String_to_Array(const string str, const ushort separator, double &result[])
{
   string s_arr[];
   if(StringSplit(str, separator, s_arr) <= 0)
   {
      ArrayResize(result, 0);
      Print(__FUNCTION__ + " Error converting !");
      return;
   }
   ArrayResize(result, ArraySize(s_arr));
   for(int i = ArraySize(result) - 1; i >= 0; i--)
      result[i] = StringToDouble(s_arr[i]);
}
 

senza controlli, si può anche andare così

void String_to_Array(const string str, const ushort separator, double &result[])
{
   string s_arr[];
   StringSplit(str, separator, s_arr);
   for(int i = ArrayResize(result, ArraySize(s_arr)) - 1; i >= 0; i--)
      result[i] = StringToDouble(s_arr[i]);
}
 
Igor Makanu:

Anche un'opzione. Si scopre che nemmeno io ho letto tutta la documentazione.

 
Alexey Viktorov:

Anche un'opzione. Si scopre che nemmeno io ho letto tutta la documentazione.

StringSplit è una cosa fantastica, molto comoda per analizzare stringhe delimitate

 
Ciao a tutti. Aiutami a inserire una variabile String nel mio codice. Grazie
ObjectCreate("ObjName11",OBJ_LABEL,0,0,0);
   ObjectSetText("ObjName11","|Direction: ="+ <String>   +"|Spread: ="+IntegerToString(Spread,0)+"|Today: ="+DoubleToStr(ATRToday,2)+"%" ,Size,"Verdana",Red);
   ObjectSet("ObjName11",OBJPROP_CORNER,infoCorner);
   ObjectSet("ObjName11",OBJPROP_XDISTANCE,0);
   ObjectSet("ObjName11",OBJPROP_YDISTANCE,120);
 
Carcass77:
Ciao a tutti. Aiutatemi a inserire una variabile di tipo String nel codice. Grazie

Potrebbe rispondere alla sua stessa domanda?

o hai tagliato un pezzo di codice da qualche parte e non puoi usarlo? e devi almeno indovinare cosa sta succedendo)))

scrivere sopra

string s;

e sostituire <Stringa> con s

ma non credo che questo sia il modo di procedere con questo approccio.

 
Igor Makanu:

Potrebbe rispondere alla sua stessa domanda?

o hai tagliato un pezzo di codice da qualche parte e non puoi usarlo? e devi almeno indovinare cosa sta succedendo)))

scrivere sopra

e sostituire <Stringa> con s

ma penso che non sia la soluzione con questo approccio

Il mio indicatore funziona, basta estendere. lastringa s; è stata aggiunta.

Ok, ci penserò io stesso.