[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 144

 
Le lavage de cerveau...

Space:

... L'euro commence à rapporter moins de dollars par unité, donc l'euro devient plus cher ? Pourquoi disent-ils qu'il va baisser ?

... Un kilo de tomates vaut moins d'un rouble, les tomates deviennent donc plus chères ? Pourquoi disent-ils qu'ils sont de moins en moins chers?
 
iMAG:
Pour y voir plus clair, essayez de regarder GetLastError() après l'opérateur d'affectation - cela doit aider à la ventilation. En tout cas, tout fonctionne bien dans l'exemple ci-dessus. ;)


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) ;
}

Voici un exemple : la valeur (i + 10) n'est pas affectée. Avec cette initialisation, uniquement à travers un tableau de commandes - quels sont les secrets ?


 

Stepan2

Travaux

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:
Ça m'a déchiré le cerveau... Un kilo de tomates vaut moins de roubles, les tomates deviennent donc plus chères ? Pourquoi disent-ils qu'ils sont de moins en moins chers?


C'est-à-dire qu'un dollar, qu'il soit au numérateur ou au dénominateur, est toujours de l'ARGENT (même en majuscules), le reste étant des "biens".

C'est comme ça que ça marche ?

Et les croix ? Comment savoir ce qu'il faut diviser par quoi quand on forme une croix ?

Autrement dit, pourquoi une monnaie figure-t-elle nécessairement au numérateur et l'autre au dénominateur et non l'inverse ?

 
r772ra:

Stepan2

Travaux


Qu'est-ce que vous entendez par là ?

Ce terminal dépend d'un COURTIER !

 
Space:


C'est-à-dire qu'un dollar, qu'il soit au numérateur ou au dénominateur, est toujours de l'ARGENT (même dans les majors), le reste est du "COMMERCE".

C'est comme ça que ça marche ?

Et les croix ? Comment savoir ce qu'il faut diviser par quoi quand on forme une croix ?

Autrement dit, pourquoi une monnaie figure-t-elle nécessairement au numérateur et l'autre au dénominateur, et non l'inverse ?


Le processus d'apprentissage est le suivant :

DIVISION - consécutif, mais en sens inverse

RUNNING - Script d'action

 
Stepan2:


Qu'est-ce que vous entendez par là ?

QUE le terminal dépend du COURTIER !

Je ne peux rien dire sur le courtier, il est peu probable qu'il y ait un problème avec le courtier.

Et pour le code, je me trompe peut-être.

Vous avez déclaré un tableau et l'avez rempli

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

et vous montrez ces chiffres, oui si double, alors 1.0, 2.0, etc.

Dans mon cas

double s[11];

Il doit être un peu plus grand pour éviter l'erreur (4002).

et ça remplit la boucle, donc, oui, je ne l'ai pas ...... seulement à travers un tableau de commandes .....

 

Merci de me conseiller, j'ai placé deux MACD (Macd1 et Macd2) dans la même fenêtre et à la même échelle. Je trouve le max et le min de chaque MACD uniquement parmi les valeurs du graphique visibles dans la fenêtre de l'indicateur. Je les ai mis dans Comment(). Tout fonctionne, mais les lignes de signaux commencent à se dessiner dès la première barre, c'est-à-dire que je dois attendre qu'elles remplissent toute la fenêtre. Comment résoudre ce problème ? Et comment optimiser mon code maladroit ?

  
#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:

Merci de me conseiller, j'ai placé deux MACD (Macd1 et Macd2) dans la même fenêtre et à la même échelle. Je trouve le max et le min de chaque MACD uniquement parmi les valeurs du graphique visibles dans la fenêtre de l'indicateur. Je les ai mis dans Comment(). Tout fonctionne, mais les lignes de signaux commencent à se dessiner dès la première barre, c'est-à-dire que je dois attendre qu'elles remplissent toute la fenêtre. Comment résoudre ce problème ? Et comment optimiser mon code maladroit ?

Essayez, chaque tampon dans une boucle séparée.
 
r772ra:
Essayez-le, chaque tampon dans une boucle séparée.
Ouaip.
   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);
   }