[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 326

 
Bonjour à tous. J'ai une question. Je me suis procuré un copieur /**/, une chose bonne et pratique quand on travaille avec plusieurs comptes. Mais le problème est que lorsque vous exécutez n'importe quel autre programme (vidéo, jeu, simplement des cartes) en parallèle, il y a un grésillement constant qui sort des haut-parleurs. Est-il possible d'éliminer le problème (cliquetis) ? Merci d'avance.
 

J'essaie d'écrire un indicateur simple basé sur le RSI (l'analogue est RandomIndicatorSignals mq4).

J'essaie d'écrire un indicateur simple basé sur le RSI (pour l'analogue de cet indicateur RandomIndicatorSignals.mq4 de l'article MQL4 Language for Dummies. Indicateurs personnalisés (partie 1)(https://www.mql5.com/ru/articles/1500).

L'idée est simple, si le RSI dessine un sommet ou un creux, il dessine une flèche sur le graphique.

Cela semble correct, mais à mon avis, le tampon de valeur RSI pour chaque bougie n'est pas rempli, ce qui fait que cela ne fonctionne pas. Voici le code.

//+------------------------------------------------------------------+
//|                                                    RSI+Arrow.mq4 |
//|                                                         _______ |
//|                                                    |
//+------------------------------------------------------------------+
#property copyright "_______"
#property link      "_________"


#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Crimson
#property indicator_color2 RoyalBlue
//---- input parameters
extern int       barsToProcess=500;
//---- buffers
double ExtMapBuffer1[],
       ExtMapBuffer2[],
       RSIBuffer3[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers(3);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,236);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexEmptyValue(0,0.0);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,238);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexEmptyValue(1,0.0);
   SetIndexBuffer (2,RSIBuffer3);
   // для информации о значениях буфера
   SetIndexLabel  (2,"RSIBuffer3");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {    
   //расчет индикатора на последних барах 
   int limit,i;
   int counted_bars=IndicatorCounted();
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   if(limit>barsToProcess)
   limit=barsToProcess;
   
   //заполняем буфер RSI значениями 
   for(i=0; i<limit; i++)
   if(i>=1)
     {
       RSIBuffer3[i]=iRSI(0,0,8,PRICE_CLOSE,0);
     }       
  //проводим сравнения                        
   for(i=0; i<limit; i++)
   if(i>=1)
        
        {
        if(RSIBuffer3[i+2]-RSIBuffer3[i+1]>0 && RSIBuffer3[i+1]-RSIBuffer3[i]>0) // условия выставления стрелки 

        /* так тоже не работает
        if(RSIBuffer3[i+2]>=RSIBuffer3[i+1] && RSIBuffer3[i+1]<=RSIBuffer3[i])
        */
        
        ExtMapBuffer2[i]=Low[i]-5*Point;
                    
        else
           
        ExtMapBuffer2[i]=0.0;
               
        if(RSIBuffer3[i+2]-RSIBuffer3[i+1]<0 && RSIBuffer3[i+1]-RSIBuffer3[i]<0) // условия выставления стрелки
        
        /* так тоже не работает
        if(RSIBuffer3[i+2]<=RSIBuffer3[i+1] && RSIBuffer3[i+1]>=RSIBuffer3[i])
        */
              
        ExtMapBuffer1[i]=High[i]+5*Point;
           
        else      
           
        ExtMapBuffer1[i]=0.0;           
        }
                   
   return(0);
   }
        
//+------------------------------------------------------------------+      
 
Merincool:

J'essaie d'écrire un indicateur simple basé sur le RSI (l'analogue est RandomIndicatorSignals mq4).

J'essaie d'écrire un indicateur simple basé sur le RSI (pour l'analogue de cet indicateur RandomIndicatorSignals.mq4 de l'article MQL4 Language for Dummies. Indicateurs personnalisés (partie 1)(https://www.mql5.com/ru/articles/1500).

L'idée est simple, si le RSI dessine un sommet ou un creux, il dessine une flèche sur le graphique.

Cela semble correct, mais à mon avis, le tampon de valeur RSI pour chaque bougie n'est pas rempli, ce qui fait que cela ne fonctionne pas. Voici le code.

Vous accédez à des valeurs d'indicateur non calculées en boucle.

Changement

for(i=0; i<limit; i++)

à

for(i=limit-1; i>=0; i--)
 
PapaYozh:

Vous revenez aux valeurs non calculées de l'indicateur.

Changement

à


Merci, ça m'a donné une idée ! Cependant, j'aimerais comprendre la "signification physique":) comme notre physicien avait l'habitude de dire

J'ai moi-même un problème : 2 codes d'action "légèrement" différents, mais essentiellement identiques : Supprimer tous les ordres en attente

1) Ne fonctionne pas correctement - une seule commande est supprimée

void start()

  {

   bool   result;     int    cmd,total,OT;

   total=OrdersTotal();

   for(int i=0; i<total; i++)

     {

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

        {

         cmd=OrderType();    OT=OrderTicket();

         if(cmd>1)   // !=OP_BUY && cmd!=OP_SELL)

           {

            result=OrderDelete(OT);

           }

        }

     } //end FOR

  }

2) Il fonctionne bien - il les supprime tous.

void start()
{
    string msg="Удалить все отложенные ордера?    ";
//   if (MessageBox(msg,title,MB_YESNO|MB_ICONQUESTION)!=IDYES) return;

   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) if (OrderType()>1) OrderDelete(OrderTicket());
   }
}

Veuillez expliquer : la signification de "dans cette boucle, vous accédez aux valeurs non calculées de l'indicateur".

 
PapaYozh:

Vous revenez aux valeurs non calculées de l'indicateur.

Changement

à


Tu peux l'épeler ? Pourquoi ? Pour que je ne fasse plus d'erreurs à l'avenir.
 
PapaYozh:

Vous revenez aux valeurs non calculées de l'indicateur.

Changement

à


Le RSIBuffer3 n'affiche que la valeur RSI de la dernière barre lorsque l'on passe la souris sur une barre.
 
Merincool:

Et cela ne fonctionne toujours pas, RSIBuffer3 n'affiche que la valeur RSI de la dernière barre lorsque l'on passe la souris sur la barre.

Votre 5ème paramètre est 0 - c'est-à-dire la dernière mesure !

faites-le comme ça :

       RSIBuffer3[i]=iRSI(0,0,8,PRICE_CLOSE,i);  

Extrait du document :

double iRSI( string symbol, int timeframe, int period, int applied_price, int shift)
Calcule l'indice de force relative et renvoie sa valeur.
Paramètres :
symbole - Symbole dont les données doivent être utilisées pour calculer l'indicateur. NULL signifie le symbole actuel.
cadre temporel - Le temps. Il peut s'agir de n'importe quelle valeur de l'énumération Timeframe. 0 signifie la période actuelle du graphique.
période - Nombre de périodes pour le calcul.
prix appliqué - Prix appliqué. Il peut s'agir de n'importe quelle valeur de l'énumération des prix appliqués.
équipe - Index de la valeur prise dans le tampon de l'indicateur (décalage par rapport à la barre actuelle d'un nombre donné de périodes).
 
PapaYozh:

Vous revenez aux valeurs non calculées de l'indicateur.

Changement

à


Et ce que j'ai aussi pensé, selon votre logique, l'outil devrait calculer le RSI à partir de la limite et jusqu'à la barre 0, mais est-ce que cela fait une différence de calculer le RSI à partir de la fin ou du début ? Il devrait calculer le RSI pour chaque barre dans une plage donnée et mettre la valeur dans un tampon (je veux dire dans un tableau), et ensuite juste comparer trois valeurs consécutives dans un tableau les unes avec les autres. Ou pas ?

 
amurik61:

Votre 5ème paramètre est 0 - c'est-à-dire la dernière mesure !

faites-le comme ça :

Extrait du document :

double iRSI( string symbol, int timeframe, int period, int applied_price, int shift)
Calcule l'indice de force relative et renvoie sa valeur.
Paramètres :
symbole - Symbole dont les données doivent être utilisées pour calculer l'indicateur. NULL signifie le symbole actuel.
cadre temporel - Le temps. Il peut s'agir de n'importe quelle valeur de l'énumération Timeframe. 0 signifie la période actuelle du graphique.
période - Nombre de périodes pour le calcul.
prix appliqué - Prix appliqué. Il peut s'agir de n'importe quelle valeur de l'énumération des prix appliqués.
équipe - Index de la valeur prise dans le tampon de l'indicateur (décalage par rapport à la barre actuelle il y a un temps donné).

Je vais essayer, merci.
 
Merincool:

Je vais essayer, merci.


Merci beaucoup, cela semble fonctionner.

Et en ce qui concerne le message précédent, ai-je raison au sujet de la matrice ? ou ai-je tort ?

Raison: