Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 924

 

Bonjour, pouvez-vous me donner un indice ?

En recherchant le haut égal au haut de la première barre de l'historique, je stocke l'index de la barre trouvée dans la variable High_i.

Jefais comme ça:

 highr=High[i];
      High_i=0;
      for(j=i+3;j<=i+m;j++)
         {
         if(j>Bars-1) break;
         
         if(!ok1)
            {
            if(MathAbs(High[j]-highr)  <= n*Point)
               {
               
               High_i = j;


Maintenant, je vérifie si les sommets avant et après les trois barres doivent être inférieurs au sommet de la première barre.

Je dois inclure ça dans la boucle :

if(High[High_i]>High[High_i-3]&&High[High_i]>High[High_i-2]&&High[High_i]>High[High_i-1]
   && High[High_i]>High[High_i+3]&&High[High_i]>High[High_i+2]&&High[High_i]>High[High_i+1])

D'une part, j'essaie de le vérifier comme suit

 for(jl=High_i;jl<=High_i+3;jl++) 
    {
    // if (High_i!=0);
       
      if ( High[High_i]>High[jl])
          {
               cnt1++;
               if(cnt1>=3)
                  {
                  ok1=true;
                 BuyBuffer[i]=highr+5*Point;
                  }
               }
            }

Aidez-moi, s'il vous plaît.




	          
 
tatianati:
Maintenant, en vérifiant, le hai des trois barres avant et après devrait être inférieur au hai de la barre trouvée.

Ça pourrait être comme ça :

bool Status_Successful = true;

for(int x=(High_i-3); x<=(High_i+3); x++) {
   if(x==High_i) {
      continue;
   }
   if(High[x]>=High[High_i]) {
      Status_Successful = false;
      break;
   }
}


if(Status_Successful==true) {
   ....
}
 
atztek:
Probablement comme ça :



Merci, ça marche.

Mais après avoir augmenté le nombre de barres, comme ceci :

for(int x=(High_i-7); x<=(High_i+7); x++)

arises.

tableauhors limites dans 'ta_v1_05.mq4' (174,11)

ligne 174, celle-ci:

   if(High[x]>=High[High_i])

S'il vous plaît, dites-moi comment le réparer.

 
êtes-vous sûr que x est un nombre naturel ou 0 ? si high_i = par exemple 6, alors x = -1, et high[-1] est déjà un problème. peut-être ajouter une vérification à la ligne 173 si (x < 0) continue ;
 
tatianati

danik: êtes-vous sûr que x est un nombre naturel ou 0 ? si high_i = par exemple 6, alors x = -1 et high[-1] est déjà un problème. peut-être ajouter une vérification si (x < 0) continuer à la ligne 173 ;
Pour trois bars, une telle "vérification" a été effectuée :
      for(j=i+3;j<=i+m;j++)

Pour les autres valeurs, vous devez les modifier dans tous les sens.
Vous pourriez commencer par cela, et voir ensuite si cela résout le problème ou s'il y a autre chose à régler.
 
Bonjour, pourriez-vous me conseiller, il y a une fonction pour fermer les ordres, mais les ordres ne sont pas fermés pour une raison quelconque, je ne comprends pas ce qui ne va pas.
void CloseOrders(int otype)
    {
      int ClosePrice;
      
      if (otype == OP_BUY) ClosePrice=Bid;
      if (otype == OP_SELL) ClosePrice=Ask;
    
       
      int total = OrdersTotal();
      for(int i = total-1; i >= 0; i--)
      {    
         if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         { 
           if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
           OrderClose(OrderTicket(),OrderLots(),ClosePrice,Slippage,Yellow);
         }
      }
 
lufer:
Bonjour, pourriez-vous me conseiller, il y a une fonction pour fermer les ordres, mais les ordres ne sont pas fermés pour une raison quelconque, je ne peux pas comprendre ce qui ne va pas.

Le prix ne peut pas être int !

int ClosePrice;
 
TarasBY:

Le prix ne peut pas être int !

Oh oui ! !! Merci ! !!
 
Aidez-moi à trouver un bug dans le code, il semble dessiner deux lignes basées sur les données de l'indicateur ZeroLag MACD pour EUR\USD et GBP\USD, mais rien ne se passe. Voici le code
#property indicator_separate_window
#property indicator_buffers 2
#property  indicator_color1 Red
#property  indicator_color2 DarkBlue
#property  indicator_width1 1
#property  indicator_width2 1
//+------------------------------------------------------------------+

extern string ExtParam1="EURUSD";
extern string ExtParam2="GBPUSD";
extern int FastEMA=12;
extern int SlowEMA=24;
extern int SignalEMA=9;

//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
int init()
{
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexLabel(0,ExtParam1); 

SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexLabel(1,ExtParam2); 
//----
return(0);
}
//+------------------------------------------------------------------+
int start()
{
int counted_bars = IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars --; 
int limit=Bars-IndicatorCounted();
int bar;
for(bar=0; bar<limit; bar++)
ExtMapBuffer1[bar]=iCustom(ExtParam1,Period(),"ZeroLag MACD",FastEMA,SlowEMA,SignalEMA,iBarShift(ExtParam1,0,Time[bar],false));
ExtMapBuffer2[bar]=iCustom(ExtParam2,Period(),"ZeroLag MACD",FastEMA,SlowEMA,SignalEMA,iBarShift(ExtParam2,0,Time[bar],false));
return(0);
}  
 
ASZmyrov:
S'il vous plaît, aidez-moi à trouver un bug dans le code, il semble que ZeroLag MACD devrait dessiner deux lignes avec les données des indicateurs EUR\USD et GBPUSD, mais rien ne se passe. Voici le code

La rumeur dit que IndicatorCounted() ne fonctionne pas, aussi le recalcul de l'indicateur est plus correct pour compter du passé au présent, et il y a encore quelques erreurs dans le code.

P.S. ZeroLag MACD lui-même devrait également être "ajusté" pour la nouvelle machine virtuelle.

Dossiers :