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

 

Salve.

Diciamo che ho 2 indicatori, il primo ha 4 buffer, il secondo ne ha 2. Li metto su un grafico e apro la finestra dei dati (CTRL+D). La lista contiene 6 buffer da 0 a 5. Come posso leggere il valore del buffer 5, diciamo, da questa lista in MQL? Non è conveniente usare iCustom per l'indicatore richiesto. È più conveniente usare questa lista. So che lo fanno, ma come?

 

Studiando gli esempi nell'aiuto, la creazione dell'oggetto è sempre fatta con un controllo:

//--- сбросим значение ошибки 
   ResetLastError(); 
//--- создадим кнопку 
   if(!ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0)) 
     { 
      Print(__FUNCTION__, 
            ": не удалось создать кнопку! Код ошибки = ",GetLastError()); 
      return(false); 
     } 


Perché questo viene fatto per gli oggetti? Qual è la probabilità che un oggetto non venga creato?


In generale, mi interessa sapere dove posso leggere delle regole di buona educazione nella programmazione mql, sapere in quali cespugli si trova il rastrello, consigliare.

 
psyman:

Studiando gli esempi nell'aiuto, la creazione dell'oggetto è sempre fatta con un controllo:


Perché questo viene fatto per gli oggetti? Qual è la probabilità che un oggetto non venga creato?


In generale, sono interessato a dove posso leggere delle buone maniere nella programmazione mql, per sapere dove si trovano le insidie, consigliatemi.

Per esempio, un oggetto con questo nome esiste già.
Le regole della buona forma - sono le stesse per qualsiasi lingua. Ricevere dati - controllare ciò che si ha, creare un oggetto, controllare ciò che si è creato e se lo si è creato... E così via.
 
Come riempire un array 4-dimensionale con valori del formato int Mas[1][2][2][2][2], come assegnare un valore a ogni cella dell'array, abbiamo in mente una notazione del genere per esempio un array 2-dimensionale int Arr[1][2]={3,4};, come riempire 4-dimensionale?
 
Artyom Trishkin:
Per esempio, un oggetto con questo nome esiste già.
E le regole del galateo - sono le stesse per qualsiasi lingua. Ricevi dei dati - controlla cosa hai ricevuto, crei un oggetto, controlla cosa hai creato e se lo hai creato... E così via.


Quando creo un pulsante all'interno di una funzione, ottengo delle imprecazioni

 return(false);


'return' - la funzione 'void' restituisce un valore 112 16


Cosa devo fare in questo caso?

 
Seric29:
Come riempire un array 4-dimensionale con valori del formato int Mas[1][2][2][2][2], come assegnare un valore a ogni cella dell'array, in questo caso, c'è un array 2-dimensionale int Arr[1][2]={3,4}; come riempire 4-dimensionale?

Gli array multidimensionali sono di solito riempiti nei loop con i valori giusti - questo rende più difficile fare un errore, per un array quadridimensionale dovrebbe essere qualcosa come questo, ma potrei sbagliarmi:

int A[2,2,4,3] = {
                     {/*----------- 3-e измерение = 4 ---------------------------*/ 
/*2-e измерение=2 */ {  {0,1,2/*4-e измерение = 3 */}, {0,1,2}, {0,1,2}, {0,1,2} },
                        { {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2} }   
               
                     },
 // 1-е измерение = 2           
                     {  { {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2} },
                     {   {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2} }}
                  }; 

psyman:

Quando creo un pulsante all'interno di una funzione, ottengo delle imprecazioni

La funzione 'return' - 'void' restituisce un valore 112 16

Cosa devo fare in questo caso?

iniziare a leggere la guidasu https://www.mql5.com/ru/docs/basis/function

Se avete bisogno di più aiuto, dovreste leggere qualsiasi libro di C++. Il primo capitolo dovrebbe spiegare le funzioni

 
psyman:


Quando creo un pulsante all'interno di una funzione, ottengo un'imprecazione


'return' - la funzione 'void' restituisce un valore breakeven_fish.mq5 112 16


Cosa fare in questo caso?

Se restituite un valore bool da una funzione, non avete bisogno di rendere il tipo di funzione void, ma indovinate cos'è.
 

Compagni - guardate l'indicatore di correttezza. C'è una formula Valore = (Open[0]-SMA(P,n))/SMA(P,n))*100%.

L'ho messo sul grafico - calcola e traccia tutto. Comincio a controllare qualche barra sulla calcolatrice - il suo valore non coincide con quello disegnato...

Ecco un esempio - calcolo 1,0178 per Open e 1,0182 per MA(13) usando la formula ((1,0178-1,0182)/1,0182) * 100% - il risultato sulla calcolatrice è -0,0393. E il grafico MT4 mostra -0,0929. È un errore nel codice o la calcolatrice non calcola correttamente alcuni valori lì? Per favore, aiutatemi. Sto allegando l'indicatore.

#property indicator_separate_window 
#property indicator_buffers 1       // Количество буферов
#property indicator_color1  Blue    // Цвет линии 0 буфера

#property  indicator_level1  1
#property  indicator_level2  -1
//--------------------------------------------------------------- 2 --
//---- indicator parameters 

extern int History    =5000;      // Колич.баров в расчётной истории
extern int Period_SMA =13; 
 

double
   Line_0[];                        // Инд. массив  ravi 
    
//--------------------------------------------------------------- 4 --

int init()                          // Специальная функция init()
  {
   SetIndexBuffer(0,Line_0);        // Назначение массива буферу
   SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
   
   IndicatorShortName("KRI");
//--------------------------------------------------------------- 5 --
   
   return(0);                          // Выход из спец. функции init()
  }

//--------------------------------------------------------------- 8 --
int start()                         // Специальная функция start()
  {
//--------------------------------------------------------------- 9 --
  
   double
   SMA;                   //  МА для расчета значений индикатора 
                                 // формyла (PRICE-SMA/SMA)*100); 
                             
   int
   i,                            // Индекс бара
   n,                            // Формальн. параметр(индекс бара)
   Counted_bars;                 // Количество просчитанных баров 

//-------------------------------------------------------------- 10 --
   Counted_bars=IndicatorCounted(); // Количество просчитанных баров 
   i=Bars-Counted_bars-1;           // Индекс первого непосчитанного
   if (i>History-1)                 // Если много баров то ..
      i=History-1;                  // ..рассчитывать заданное колич.
//-------------------------------------------------------------- 11 --
   while(i>=0)                      // Цикл по непосчитанным барам
     {
      //-------------------------------------------------------- 12 --
        
      SMA=iMA(NULL,0,Period_SMA,0,MODE_SMA,PRICE_CLOSE,i); // Значение  SМА
     
      
      Line_0[i] =0; 
      if (SMA>0) Line_0[i] = ((Open[0]-SMA)/SMA)*100;    //  Индик. массив линии KPI
     
      //-------------------------------------------------------- 13 --
      i--;                          // Расчёт индекса следующего бара
      //-------------------------------------------------------- 14 --
     }
   return(0);                          // Выход из спец. ф-ии start()
  }
//-------------------------------------------------------------- 15 --
File:
KRI.mq4  7 kb
 
Artyom Trishkin:
Se state restituendo un valore di tipo bool dalla funzione, allora il tipo di funzione non dovrebbe essere void, ma indovinate qual è.

E se volete restituire dei dati da una funzione?


È possibile fare un ciclo delle posizioni solo per un dato simbolo senza usare PositionsTotal ogni volta?


Finora, l'unica cosa che mi è venuta in mente è scrivere i biglietti in un array e lavorare con loro separatamente, ma forse c'è un'opzione più semplice?

 
psyman:

E se volete restituire dei dati da una funzione?


È possibile fare un ciclo delle posizioni solo per un dato simbolo senza usare PositionsTotal ogni volta?


Finora, l'unica cosa che mi è venuta in mente è scrivere i biglietti in un array e lavorare con loro separatamente, ma forse c'è un'opzione più semplice?

Non è chiaro cosa serva alla fine - alcuni pensieri disarticolati.

Motivazione: