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

 
Alexey Viktorov:

La variabile stringa x; non deve essere confusa con il carattere stringa "x".

Non ho capito il compito specifico. Di conseguenza, non c'è una risposta specifica.

Forse è meglio pensare all'overloading delle funzioni?

La situazione è tale che ho bisogno di creare una funzione universale function_xy dove il programma principale capirebbe che il nome della variabile stringa object_xy cambia a seconda dei parametri passati(..., ..., stringa x, stringa y). Altrimenti, più in basso nel codice in function_xy() dovrò scrivere manualmente il nome della variabile object_xy.
Per esempio,

void function_xy(..., ..., string x="EURUSD", string y="GBPUSD")
{
...
string object_xy=...//то есть здесь программа должна понимать, что это переменная object_EURUSDGBPUSD
...
}

Altrimenti, quando si creano diversi oggetti grafici in function_xy(), dovrò assegnare manualmente i parametri delle funzioni grafiche

void function_xy(..., ...,...)
{
...
string object_EURUSDGBPUSD=...//то есть здесь программа должна понимать, что это переменная object_EURUSDGBPUSD
...
ObjectCreate(object_EURUSDGBPUSD,...,...)
ObjectSet(object_EURUSDGBPUSD,...,...)
ObjectSetText(object_EURUSDGBPUSD,...,...)
...
}

void function_wz(..., ...,...)
{
...
string object_USDCHFUSDJPY=...//то есть здесь программа должна понимать, что это переменная object_EURUSDGBPUSD
...
ObjectCreate(object_USDCHFUSDJPY,...,...)
ObjectSet(object_USDCHFUSDJPY,...,...)
ObjectSetText(object_USDCHFUSDJPY,...,...)
...
}

Ci sono fino a duecento di queste funzioni, potete in qualche modo ridurre e risolvere questo problema?
Spero di aver espresso il mio pensiero.



 
Timur1988:

La situazione è tale che ho bisogno di creare una funzione universale function_xy dove il programma principale capisce che il nome della variabile stringa object_xy cambia a seconda dei parametri passati(..., ..., stringa x, stringa y). Altrimenti, più in basso nel codice in function_xy() dovrò scrivere manualmente il nome della variabile object_xy.
Per esempio,

Altrimenti, quando si creano diversi oggetti grafici in function_xy(), dovrò assegnare manualmente i parametri delle funzioni grafiche

Ci sono fino a duecento di queste funzioni, potete in qualche modo ridurre e risolvere questo problema?
Spero di aver espresso il mio pensiero.

Avete solo bisogno di scrivere un pezzo di codice, che formerà il nome dell'oggetto a seconda di X e Y, per esempio, prendetelo da un array, per esempio: n=10*x+y. Quando x=0 e y=0...9, saranno scelti i primi 10 elementi. Quando x=1 e y=0...9, saranno scelti i successivi 10 elementi

 
DOCTORGAD: C'è un codice per aprire un singolo trade con controlli di errore? Esattamente per davvero, non per test... Può come funzione, solo uno stallo :(

A che serve controllare gli errori - bisogna reagire!!! Come? Print("Error - ...") - questo è buono solo durante il debug. E anche questo sarebbe meglio di Alert(). Bisogna reagire a un errore con una pausa = ritardo. C'era un articolo al riguardo da qualche parte. Ma dove? Se qualcuno l'ha visto - ricordatemelo!

 
Timur1988:

La situazione è che ho bisogno di creare una funzione universale function_xy, in cui il programma principale capirebbe che il nome della variabile stringa object_xy cambia a seconda dei parametri passati(..., ..., stringa x, stringa y). Altrimenti, più in basso nel codice in function_xy() dovrò scrivere manualmente il nome della variabile object_xy.
Per esempio,

Altrimenti, quando si creano diversi oggetti grafici in function_xy(), dovrò assegnare manualmente i parametri delle funzioni grafiche

Ci sono fino a duecento di queste funzioni, potete in qualche modo ridurre e risolvere questo problema?
Spero di aver espresso il mio pensiero.





//+------------------------------------------------------------------+
void OnStart()
  {

   function_xy();

  }
//+------------------------------------------------------------------+x1 x2 x3
void function_xy(string x="EURUSD",string y="GBPUSD")
  {
   string object_xy;
  string c = "object_EURUSDGBPUSD";
//Для начала,  склеим переданные в функцию строковые переменные 

   object_xy=StringConcatenate("object_",x,y);
   
   Alert("object_xy = ",object_xy);
   
// Cравниваем
   if(StringCompare(c,object_xy)==0)
     {
      Alert("       Ура получилось ))))))))");
      Alert("object_EURUSDGBPUSD == object_xy");
     }
//то есть здесь программа должна понимать, что это переменная object_EURUSDGBPUSD 
  }
//+------------------------------------------------------------------+

Se ho capito bene,

va più o meno così.

 
Ptichka12: Ciao, una parentesi beve sangue da me non riesco ad accoppiarla (dà subito un mucchio di errori). La parentesi è sulla prima riga.

È una decompilazione? Rimuovetelo immediatamente, è proibito qui!!! Bandito...

 
Ptichka12:

Ciao, una parentesi beve sangue da me non riesco ad accoppiarla (dà subito un mucchio di errori). La parentesi è nella prima riga.


Sei avvertito per aver pubblicato codice decompilato.
 
Artyom Trishkin:
Sei stato avvertito per aver postato del codice decompilato.

Mi dispiace, non lo farò più...

 
Alexey Viktorov: deve essere completamente riscritto. Chi ne ha bisogno?

Grazie)
Per evitare di riscrivere, forse puoi sovrapporre le linee di tendenza su quei segmenti che sono >=100pts.

Potete dirmi come impostare le coordinate per i punti della linea di tendenza per tracciarla dal trogolo alla cima dello zigzag -a.

 

Ciao!

Per quindici giorni ho lavorato su uno script che controllerà se i prezzi nell'array sono ora....

Ora sono arrivato a un punto morto mentre cercavo nell'array. Per qualche motivo non dà quello che ci si aspetta.


int start()
{
   while(!IsStopped())
    {    
      double prmas[5] = {11,22,33,44,99}; // Будем проверять каждую цену, есть ли ордер с такой ценой или нет
         for(int ordsel=0; ordsel<=4;ordsel++) {  // Цикл прохода по ценам в массиве
            for(int nmbr = 0; nmbr < OrdersTotal() ;nmbr++) {   // Проверяем каждую цену по всем ордерам
               int os = OrderSelect(nmbr, SELECT_BY_POS, MODE_TRADES); // Выбираем ордер по порядку цикла
               int maspos = ArrayBsearch(prmas,OrderOpenPrice(),5,0,MODE_ASCEND); //Ищем позицию цены в массиве по текущему проверяемому ордеру
               Alert ("Номер в цикле  ", nmbr, " Выбранный ордер  ", os, " Цена из массива ", prmas[maspos]); //Выводим скорбный результат
               Sleep(10000);  
      }
}
     if(!IsExpertEnabled()) break;
    }
return(nmbr);
}

non dà l'errore...

mandati:



 
Dimitry-1983:

Ciao!

Per due settimane ho cercato di creare uno script che controllasse se il prezzo nell'array è ora....

Ora sono rimasto bloccato nella ricerca dell'array. Per qualche ragione, non ci dà quello che ci aspettiamo.


È corretto:

ArrayBsearch

Valore restituito

Restituisce l'indice del primo elemento trovato. Se il valore cercato non viene trovato, restituisce l'indice dell'elemento di valore più vicino, tra cui si trova il valore cercato.

Avete i prezzi dell'ordine (ordine in base al tempo di collocamento)
il primo è 11.00000
il secondo 22.00000
terzo 0,98020
quarto 0,98004
quinto 33,00000

1, 2 e 5 rispettivamente trovano correttamente, ma per 2 e 3 il valore inferiore più vicino...