trouver la date la plus proche - page 2

 
angevoyageur:

Quelque chose comme ça ?

Une solution parmi d'autres.

Il y a quelque chose qui ne va pas... Je ne peux l'utiliser que sur les données en tick, sinon le plus haut précédent est toujours =-1.

Mais le problème principal est que même sur les données tick, parfois sans raison, le plus haut précédent devient =-1.

Merci encore pour votre aide

doc

 
dr.house7:

Il y a quelque chose qui ne va pas... Je ne peux l'utiliser que sur les données en tic-tac, sinon le plus haut précédent est toujours =-1.

Mais le problème principal est que sur les données tick, parfois sans raison, le plus haut précédent devient =-1.

Merci encore pour votre aide

doc

Je ne peux vous aider que si vous montrez le code que vous utilisez.
 
angevoyageur:
Je ne peux aider que si vous montrez le code que vous utilisez.

Cela suffit-il ou avez-vous besoin du code entier ?

Merci Ange pour le support...

doc

int checkEntry()
  {
  datetime lastdealtime;
  HistorySelect(0, TimeCurrent());  
  lastdealtime = HistoryDealGetInteger(HistoryDealGetTicket(HistoryDealsTotal()-1),DEAL_TIME);
  //Print("lastdealtime :",lastdealtime);
  
//--- time filter
   if(!checkTimeLimits()) return(_doNothing);

double ema1[2],
       ema2[2];
       
       //

//-- get current Spread
   int spread=int(SymbolInfoInteger(_Symbol,SYMBOL_SPREAD));

//-- Get indicator and timeserie data
  if(CopyBuffer(handle_ema1,0,0,2,ema1)           !=2  ||
  if(CopyBuffer(handle_ema2,0,0,2,ema2)           !=2  ||
                
     
     CopyHigh(_Symbol,_Period,0,2,high)!=2          || 
      CopyLow(_Symbol,_Period,0,2,low)!=2 
     
     ) return(_doNothing);
//-------
MqlDateTime currentTime; TimeCurrent(currentTime);

TouchTime=TimeCurrent();

if(ema1[1] > ema2[1] && ema1[0]< ema2[0]) 
           {
           if(TouchTime != emacross1_TouchTime) 
           {
           drawArrow1(TouchTime,ema1,"Wingdings 3",ArrowSize,"p",ArrowColor); 
           emacross1_TouchTime= TouchTime;
           
           }
        
      
          } 
int touchedline[10];
int temp = 0;
int valuearray = 0;

touchedline[0]=emacross1_TouchTime;
touchedline[1]=emacross2_TouchTime;
touchedline[2]=emacross3_TouchTime;
touchedline[3]=emacross4_TouchTime;
touchedline[4]=emacross5_TouchTime;
touchedline[5]=emacross6_TouchTime;
touchedline[6]=emacross7_TouchTime;
touchedline[7]=emacross8_TouchTime;
touchedline[8]=emacross9_TouchTime;
touchedline[9]=emacross10_TouchTime;


int highest=-1, previoushighest=-1;

   for(int i=0;i<10;i++)
     {
      if(touchedline[i]>temp)
        {
         previoushighest=highest;
         highest=i;
         temp=touchedline[i];
        }
     }
     
Print("act_highest :",highest);
Print("prv_highest :",previoushighest);
 
dr.house7:

Cela suffit-il ou avez-vous besoin du code entier ?

Merci Ange pour le support...

doc

Oui, je réalise maintenant que ce que j'ai suggéré ne fonctionne pas si la valeur la plus élevée est touchedline[0]. Vous devez donc trouver un autre moyen dans ce cas, par exemple utiliser ArrayMaximum().
 
angevoyageur:
Oui. Je réalise maintenant que ce que j'ai suggéré ne fonctionne pas si la valeur la plus élevée est touchedline[0]. Vous devez donc trouver un autre moyen dans ce cas, par exemple utiliser ArrayMaximum().

Salut Ange,

J'ai essayé de faire de mon mieux, mais je pense que c'est un peu plus compliqué... j'ai écrit ceci et ça ne marche pas, une suggestion ? merci.

int index_max;

for(int i=0;i<10;i++)
     {
      if(touchedline[i]>temp)
        {
         index_max=ArrayMaximum(touchedline[i],0,WHOLE_ARRAY); // maximum in High
         temp=touchedline[i];         
        }
     }
 
dr.house7:

Salut Ange,

J'ai essayé de faire de mon mieux, mais je pense que c'est un peu plus compliqué... j'ai écrit ceci et ça ne marche pas, une suggestion ? merci.

   int highest=-1,previoushighest=-1;

   for(int i=0;i<10;i++)
     {
      if(touchedline[i]>temp)
        {
         previoushighest=highest;
         highest=i;
         temp=touchedline[i];
        }
     }     
   if(previoushighest==-1) previoushighest=ArrayMaximum(touchedline,1,WHOLE_ARRAY);

   Print("act_highest :",highest);
   Print("prv_highest :",previoushighest);
Pas le temps de tester, et je ne prétends pas que c'est la meilleure solution. Mais je pense que cela devrait fonctionner.
 
angevoyageur:
Je n'ai pas eu le temps de tester, et je ne prétends pas que c'est la meilleure solution. Mais je pense qu'elle devrait fonctionner.
J'ai essayé, mais maintenant previous et current me donnent le même résultat la plupart du temps
 
dr.house7:
J'ai essayé, mais maintenant le précédent et le courant me donnent le même résultat la plupart du temps.
Désolé, je n'ai pas le temps et essayer d'aider dans ces conditions n'est pas une bonne idée. Je vous fais perdre votre temps.
 
angevoyageur:
Désolé, je n'ai pas le temps et essayer d'aider dans ces conditions n'est pas une bonne idée. Je vous fais perdre votre temps.
Merci quand même
 
angevoyageur:
Désolé, je n'ai pas le temps et essayer d'aider dans ces conditions n'est pas une bonne idée. Je vous fais perdre votre temps.

Désolé, mais que vouliez-vous dire par "ces conditions" ?

Raison: