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

 
ModRed:
Il y a l'indicateur MA. Et il existe un indicateur HMA similaire à celui-ci. Comment l'insérer dans un EA ? Copier complètement le code ? Ou existe-t-il une variante plus courte ?

étude iCustom
 
Mitruha:

L'idée est très bonne, mais avez-vous vu de tels programmes ici qui transféreraient ou copieraient des transactions vers d'autres terminaux.serait-il possible de le faire bien sans les services d'un courtier ?

Un tel programme?
 
ModRed:
Il y a l'indicateur MA. Et il existe un indicateur HMA similaire à celui-ci. Comment l'insérer dans un EA ? Copier complètement le code ? Ou existe-t-il une variante plus courte ?
Comment cela se fait-il?
 

Bonjour à tous, j'ai un problème, j'ai "perdu" cet indicateur, c'est une sorte de CCI lissé, qui pouvait changer deux paramètres, la période et un multiplicateur. Dans la version originale, ces paramètres étaient respectivement 20 et 2. Et, si je me souviens bien, le nom de cet indicateur était composé de deux mots et le deuxième mot commençait par la lettre anglaise "C".

 
alsu:

Mais en général, bien sûr, vous pouvez surcharger le constructeur et l'utiliser à la place de Init(), après tout, c'est la même fonction. La variante sur laquelle s'appuyer est une affaire personnelle de chacun, en matière de goût, comme nous le savons, il n'y a pas de conseillers).


Et si l'initialisation échoue, en cas d'utilisation de la méthode, par exemple, Init(), on peut la décrire comme renvoyant une valeur du type correspondant et renvoyant une valeur appropriée en cas d'erreur. Le code appelant saura donc que l'initialisation a échoué, et que l'objet ne peut donc pas être utilisé. Comment le code appelant est-il informé de l'échec de l'initialisation lorsque le constructeur est utilisé ?

 

Aidez les gars, comment faire pour que le hibou n'ouvre pas un ordre sur la même barre que la position a été ouverte par un signal, et d'attendre une nouvelle barre et de vérifier le signal à nouveau, je l'ai fait - barre par barre

ajouté ceci

datetime   BARflag  = 0; 
и -
int start()
{
 datetime now = Time[0];
  if(BARflag >= now) return(0);
   BARflag = now;
 
bergkamp.:

Aidez les gars, comment faire pour que le hibou n'ouvre pas un ordre sur la même barre que la position a été ouverte par un signal, et d'attendre une nouvelle barre et de vérifier le signal à nouveau, je l'ai fait - barre par barre

ajouté ceci

и -

Quelque chose comme ça :

   //---
   if(iBarShift(OrderSymbol(),Period(),OrderOpenTime())==0) {
      // выбранный ордер открыт на нулевом (текущем) баре, значит ещё рано открывать следующий
      }
   else {
      // выбранный ордер открыт не на нулевом (текущем) баре, значит можно открывать следующий
      }
 
artmedia70:

Quelque chose comme ça :

Merci, serait-il facile de déchiffrer les lignes prescrites pour l'exemple ? L'ordre sélectionné est ouvert à la barre zéro (actuelle), il est donc trop tôt pour ouvrir la suivante.

//l' ordre sélectionné n'est pas ouvert sur la barre zéro (actuelle), ce qui signifie qu'il est OK pour ouvrir la suivante ...... ???

 
bergkamp.:

Merci, serait-il possible de déchiffrer les lignes prescrites pour l'exemple ?--//Selected order opened on zero (current) bar, so it is too early to open the next one

//l'ordre sélectionné n'est pas ouvert sur la barre zéro (actuelle), ce qui signifie qu'il est OK pour ouvrir la suivante ...... ???

C'est la fonction qui renvoie la barre d'ouverture de la dernière position ouverte :

//+------------------------------------------------------------------+
   int BarOpenLastPos(string sy, int timeframe, int op, int mn) {
      datetime t=0;
      int      i, j=-1, k=OrdersTotal()-1;
      for (i=k; i>=0; i--) {
         if (OrderSelect(i, SELECT_BY_POS)) {
            if (OrderSymbol()!=sy)        continue;
            if (OrderType()!=op)          continue;
            if (OrderMagicNumber()!=mn)   continue;
            if (t<OrderOpenTime()) {
               t=OrderOpenTime();
               j=i;
               }
            }
         }
      if (OrderSelect(j, SELECT_BY_POS)) return(iBarShift(sy,timeframe,OrderOpenTime()));
      return(-1);
   }
//+------------------------------------------------------------------+

Si la fonction renvoie -1, alors il n'y a pas de position ouverte dont les données ont été transmises à la fonction.

Exemple d'utilisation :

if(BarOpenLastPos(Symbol(), Period(), OP_BUY, magic)>0) {
   // бар открытия последней открытой позиции Buy на текущем символе, текущем таймфрейме, 
   // с магиком magic больше нулевого --> можно открывать следующую позицию
   }

ou

if(BarOpenLastPos(USDCAD, PERIOD_M15, OP_SELL, magic0)<0) {
   // нет позиций Sell на USDCAD с магиком magic0 --> можно открывать позицию на USDCAD
   }
 

Connaisseurs, veuillez demander votre aide...

algorithme test01

//+------------------------------------------------------------------+
//test                                                                    
//+------------------------------------------------------------------+

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1  clrGold
#property indicator_color2  clrBlue

#property indicator_level1    0

//--- indicator buffers
double Buf0[];
double Buf1[];

double t1[];
double t2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(4);
   SetIndexBuffer(0,Buf0); SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(1,Buf1); SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(2,t1); 
   SetIndexBuffer(3,t2); 
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
   
   {
   int i,counted_bars;
   counted_bars=IndicatorCounted();
   i=Bars-counted_bars-1;
   
int sr=24,n;
double sum,sum2;
double m1,m2;

  
   while(i>=0)
   {
   sum=0;
   sum2=0;
   
   for(n=i; n<=i+sr-1; n++) 
   {
   if(Open[i]>Open[i+1]) m1=sum=sum+Close[i]-Close[n];
   if(Open[i]<Open[i+1]) m2=sum=sum+Close[i]-Close[n];
   
   if(Open[i]>Open[i+1]) t1[i]=sum2=sum2+Close[i]-Close[n];
   if(Open[i]<Open[i+1]) t2[i]=sum2=sum2+Close[i]-Close[n];
   }
     
   Buf0[i]=(m1+m2)/sr;
   Buf1[i]=(t1[i]+t2[i])/sr;
   
   i--;
   }
return(0);
  }
//+------------------------------------------------------------------+

pourquoi dans Buf1 il y a des valeurs différentes de Buf0 ? logiquement elles devraient être les mêmes ?

pourquoi est-il possible d'utiliser une variable pour une valeur, mais un tampon (tableau de données)--> (un tableau est nécessaire pour les calculs ultérieurs) pour une autre valeur ? comment puis-je utiliser un tableau ainsi que des variables m1 et m2 ?

Dossiers :
test01.mq4  2 kb
Raison: