[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 144

 
Lavaggio del cervello...

Space:

... L'euro comincia a prendere meno dollari per unità, quindi l'euro sta diventando più caro? Perché dicono che sta scendendo?

... Un chilo di pomodori vale meno di un rublo, quindi i pomodori stanno diventando più cari? Perché dicono che stanno diventando più economici?
 
iMAG:
Per renderlo più chiaro, provate a guardare GetLastError() dopo l'operatore di assegnazione - deve aiutare la ripartizione. Almeno, tutto funziona bene nell'esempio di cui sopra. ;)


int init()
{
//----
// i = 0;
double s[10] = {,,3,4,5,6,7,8,9};
int i = 0;

while(i < 10)
{
s[i] = i + 10;
i++;
Print("s[i]: ", DoubleToStr(s[i], 2), " i: ", i, "GetLastError(): ", GetLastError());

Sleep(5000);
}

//----

return(0);
}

Ecco un esempio: il valore (i + 10) non è assegnato. Con questa inizializzazione, solo attraverso un array di ordini - quali sono i segreti?


 

Stepan2

Opere

int init()
  {
//----
double s[11];
// i = 0;
int i = 0;

while(i < 10)
{
s[i] = i*10;
i++;
Print("s[i]: ", DoubleToStr(s[i], 2), " i: ", i, "   GetLastError(): ", GetLastError());

Sleep(5000);
}

   return(0);
  }

 
GaryKa:
Mi ha strappato il cervello ... Un kg di pomodori vale meno di rubli, quindi i pomodori diventano più cari? Perché dicono che stanno diventando più economici?


Cioè, un dollaro, che sia al numeratore o al denominatore, è sempre denaro (anche nelle major), il resto è "merce".

È così che funziona?

E le croci? Come si fa a sapere cosa dividere per cosa quando si forma una croce?

Cioè, perché una moneta è necessariamente al numeratore e l'altra al denominatore e non il contrario?

 
r772ra:

Stepan2

Opere


Cosa intende dire con questo?

Quel terminale dipende da un BROKER!

 
Space:


Cioè un dollaro, che sia al numeratore o al denominatore, è sempre SOLDI (anche nelle major), il resto è "COMMERCIO".

È così che funziona?

E le croci? Come si fa a sapere cosa dividere per cosa quando si forma una croce?

Cioè, perché una moneta è necessariamente al numeratore e l'altra al denominatore, e non il contrario?


Il processo di apprendimento è il seguente:

DIVISIONE - consecutiva, ma in direzione opposta

RUNNING - Sceneggiatura d'azione

 
Stepan2:


Cosa intende dire con questo?

Che il terminale dipende dal BROKER!

Non posso dire nulla sul broker, è improbabile che ci sia qualcosa di sbagliato con il broker.

E per il codice, forse mi sbaglio.

Hai dichiarato un array e l'hai riempito

double s[10] = {,,,3,4,5,6,7,8,9}; 

e si mostrano questi numeri, sì se doppi, poi 1.0, 2.0, ecc.

Nel mio caso

double s[11];

Deve essere un po' più grande per evitare l'errore (4002).

e si riempie nel ciclo, quindi, sì, non capisco ...... solo attraverso un array di ordini .....

 

Per favore consigliatemi, ho messo due MACD (Macd1 e Macd2) nella stessa finestra e sulla stessa scala. Trovo max e min di ogni MACD solo tra i valori del grafico visibili nella finestra dell'indicatore. Li ho messi in Comment(). Tutto funziona, ma le linee di segnale iniziano a disegnare dalla prima barra, cioè devo aspettare che riempiano tutta la finestra. Come risolvere questo problema? E come posso ottimizzare il mio codice scomodo?

  
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_color3 Aqua
#property indicator_color4 DarkOrange
#property  indicator_width1  2
#property  indicator_width3  2
//--- buffers
double Macd1Buffer[];
double Signal1Buffer[];
double Macd2Buffer[];
double Signal2Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,Macd1Buffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,Signal1Buffer);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,Macd2Buffer);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(3,Signal2Buffer);
   
   IndicatorDigits(Digits);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   Comment("");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {   
      double max1=-0.01,min1=0.01,
             max2=-0.01,min2=0.01,
             max_M1=-0.01,min_M1=0.01,
             max_M2=-0.01,min_M2=0.01,
             max_S1=-0.01,min_S1=0.01,
             max_S2=-0.01,min_S2=0.01;
             
       
 
   int bars_counted=WindowBarsPerChart()-1,
       limit;  
       limit=bars_counted;       


      
//---- macd counted in the 1-st buffer
   for(int i=0; i<limit; i++)
   

   { 
     Macd1Buffer[i]=iMA(NULL,0,6,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i);
  
           max_M1=MathMax(Macd1Buffer[i],max_M1);
           min_M1=MathMin(Macd1Buffer[i],min_M1);
  
      Signal1Buffer[i]=iMAOnArray(Macd1Buffer,Bars,5,0,MODE_SMA,i);
 
           max_S1=MathMax(Signal1Buffer[i],max_S1);
           min_S1=MathMin(Signal1Buffer[i],min_S1);         
             
           max1=MathMax(max_M1,max_S1);
           min1=MathMin(min_M1,min_S1);
             
   }          
            
      
//---- done
   //---- macd counted in the 3-st buffer   
   for(i=0; i<limit; i++) 
      
   { 
     
      Macd2Buffer[i]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i);
 
          
           max_M2=MathMax(Macd2Buffer[i],max_M2);
           min_M2=MathMin(Macd2Buffer[i],min_M2);
           
   
      Signal2Buffer[i]=iMAOnArray(Macd2Buffer,Bars,9,0,MODE_SMA,i);

           max_S2=MathMax(Signal2Buffer[i],max_S2);
           min_S2=MathMin(Signal2Buffer[i],min_S2);  
         
           max2=MathMax(max_M2,max_S2);
           min2=MathMin(min_M2,min_S2);    
   }      
      
//---- done 
   
 
      Comment( "\n"," Баров = ",WindowBarsPerChart()-1,
               "\n"," max_M1 = ",max_M1,
               "\n"," min_M1 = ",min_M1,
               "\n"," max_S1 = ",max_S1,
               "\n"," min_S1 = ",min_S1,
               "\n"," max_M2 = ",max_M2,
               "\n"," min_M2 = ",min_M2,
               "\n"," max_S2 = ",max_S2,
               "\n"," min_S2 = ",min_S2,
               "\n"," max1 = ",max1,
               "\n"," min1 = ",min1,    
               "\n"," max2 = ",max2,
               "\n"," min2 = ",min2);
         
             
         
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
MK07:

Per favore consigliatemi, ho messo due MACD (Macd1 e Macd2) nella stessa finestra e sulla stessa scala. Trovo max e min di ogni MACD solo tra i valori del grafico visibili nella finestra dell'indicatore. Li ho messi in Comment(). Tutto funziona, ma le linee di segnale iniziano a disegnare dalla prima barra, cioè devo aspettare che riempiano tutta la finestra. Come risolvere questo problema? E come posso ottimizzare il mio codice scomodo?

Prova, ogni buffer in un ciclo separato.
 
r772ra:
Provate, ogni buffer in un ciclo separato.
Sì.
   for(int i=0; i<limit; i++)
   { 
     Macd1Buffer[i]=iMA(NULL,0,6,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i);
     Macd2Buffer[i]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i);   
   }          

   for(i=0; i<limit; i++) 
   { 
      Signal1Buffer[i]=iMAOnArray(Macd1Buffer,Bars,5,0,MODE_SMA,i);
      Signal2Buffer[i]=iMAOnArray(Macd2Buffer,Bars,9,0,MODE_SMA,i);
   }