[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 181

 

Merci pour la réponse ! Oui, les flèches manquent parfois. Cette méthode lira-t-elle "0" si la flèche disparaît ?

Et la flèche n'est dessinée que sur la barre émergente, les barres précédentes ne se redessinent pas, au moment de l'occurrence il faut ouvrir une transaction et respectivement si la flèche disparaît alors fermer.

 
Existe-t-il un moyen de faire en sorte que l'EA envoie des requêtes au serveur plus souvent que d'habitude en utilisant un code de programme ? Pour qu'au lieu d'une demande il y en ait deux, ou pour que vous puissiez simplement répéter le programme shell ... Si trois demandes au lieu d'une, alors répétez-le deux fois ... ? ?
 
Activict:

Oui, les flèches manquent parfois. Est-ce que cette méthode, grâce à la personnalisation, permettra de lire '0' si la flèche disparaît ?

Oui, il le fera.

Activict:

Et la flèche est dessinée uniquement sur la barre de formation, les barres précédentes ne sont pas redessinées, au moment de l'occurrence il faut ouvrir la position et respectivement si la flèche disparaît alors fermer.

Par conséquent, si la flèche se trouve sur l'une des barres entièrement formées, elle ne disparaîtra plus. La flèche peut apparaître et disparaître plusieurs fois sur la barre en cours.
 
Activict:

спасибо за ответ! Да стрелки иногда пропадают. Этот способ через кастом будет считывать "0" если стрелка пропадет?

La valeur qui est spécifiée comme "vide" dans le code de l'indicateur est considérée avec iCustom. En règle générale, il peut être égal à 0 ou à EMPTY_VALUE.

EMPTY_VALUE est la valeur par défaut dans les indicateurs, mais si vous mettez SetIndexEmptyValue dans init(), ce sera différent.

 
yellownight:
Existe-t-il un moyen de faire en sorte que l'EA envoie des requêtes au serveur plus souvent que d'habitude en utilisant un code de programme ? Pour qu'il y ait deux demandes au lieu d'une, ou pour que vous puissiez simplement répéter le programme shell ... Si trois demandes au lieu d'une, alors répétez deux fois ... ? ?
Cela ne vous servira à rien. Si vous bombardez le serveur de demandes, votre compte peut être désactivé. Je sais que cela arrive aux personnes qui "exagèrent les demandes" et "bombardent" le serveur avec un trop grand nombre d'entre elles.
 

J'ai écrit un indicateur simple. Voici le code :

//+------------------------------------------------------------------+
//|                                            AngleByLineFromMA.mq4 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

extern string  h1 = "основные параметры машки";
extern int     maTF = 0;
extern int     maPeriod = 50;
extern int     maShiftByPrice = 0;
extern int     maMethod = 0;
extern int     maPrice = 0;
extern int     shiftBarsBack1 = 2;                       // Первое значение shift
extern int     shiftBarsBack2 = 7;                       // Второе значение shift
extern string  h2 = "===============================";

string         h3 = "Другие переменные";
double         pointOfMaFirst,                           // Первая тока (начало отрисовки отрезка)
               pointOfMaLast,                            // Вторая тока отрезка (конец отрисовки отрезка)
               varsAngle[1000];                              // Буфер для хранения значение возвращаемых машкой

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
//#property indicator_minimum -45
//#property indicator_maximum 45
//+------------------------------------------------------------------+
//|               Функция инициализации индикатора                   |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
   SetIndexBuffer(0,varsAngle);                          // Связываем массив значений угла с буфером
   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2); 
   
// -------------- блок инициализации закончен ----------------------
   return(0);
  }
//+------------------------------------------------------------------+
//|              Функция деинициализации индикатора                  |
//+------------------------------------------------------------------+
int deinit()
  {
    ObjectsDeleteAll();                                  // Очистим график от всего
    
// -------------- блок инициализации закончен ----------------------
   return(0);
  }
//+------------------------------------------------------------------+
//|                  Функция итерации эксперта                       |
//+------------------------------------------------------------------+
int start()
  {
    int i, countedBars = IndicatorCounted();
    int limit = Bars - countedBars;
    if (limit > 400) limit = 400;
        
    for(i = limit;i > 1;i--)
    {
      pointOfMaFirst = iMA(Symbol(),maTF,maPeriod,maShiftByPrice,maMethod,maPrice,shiftBarsBack1+i);   // Начальная точка прямой
      pointOfMaLast = iMA(Symbol(),maTF,maPeriod,maShiftByPrice,maMethod,maPrice,shiftBarsBack2+i);     // Крайняя точка прямой
    
      varsAngle[i] = pointOfMaFirst - pointOfMaLast;
      Print("varsAngle[i] = ", varsAngle[i]);
    }

    return(0);
  }
Il n'y a qu'un seul tampon. Les valeurs de l'indicateur sont de type double.

Dans Expert Advisor, j'ai décidé de récupérer la valeur de l'indicateur et de l'appliquer au trade comme un filtre.

Ici j'ai écrit un simple appel de fonction de cet indicateur tampon sur la dernière barre formée :

//+-------------------------------------------------------------------------------------+
//| Получаем направление фильтрующей МА                                                 |
//+-------------------------------------------------------------------------------------+
double GetSlopeOfMa()
{
   double slope = iCustom(NULL, i_TF, "AngleByLineFromMA simplest", 0, 1);
   Print ("slope = ", slope);
   
   return(slope);
}
La valeur de la pente n'est pas correcte dans le testeur :
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647

Pourquoi ? Le type est correct. L'appel est également correct. L'indicateur ne fonctionne pas du tout correctement. Voici le journal du testeur, mais d'un marché actuel réel :

2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001

Pourquoi le nombre 2147483647 est-il toujours renvoyé au lieu du nombre requis ?

 
hoz:

J'ai écrit un indicateur simple. Voici le code :

Il n'a qu'un seul tampon. Les valeurs des indicateurs sont de type double.

Dans Expert Advisor, j'ai décidé de récupérer la valeur de l'indicateur et de l'appliquer au trade comme un filtre.

Ici j'ai écrit un simple appel de fonction de cet indicateur tampon sur la dernière barre formée :

La valeur de la pente renvoyée par le testeur n'est pas correcte :

Pourquoi ? Le type est correct. L'appel est également correct. L'indicateur ne fonctionne pas du tout correctement. Voici le journal de bord sur le testeur, et celui du marché réel actuel :

Pourquoi le nombre2147483647 est-iltoujours renvoyé aulieu du nombre requis ?

Dans le testeur, au début du travail, il n'y a pas assez de barres dans l'historique pour le calcul correct de l'indicateur.

//+-------------------------------------------------------------------------------------+
//| Получаем направление фильтрующей МА                                                 |
//+-------------------------------------------------------------------------------------+
double GetSlopeOfMa()
{
   if(iBars(NULL, i_TF)<maPeriod) { Print("Недостаточно баров в истории для корректного расчёта значений индикатора!"); return(-1.0); }
   double slope = iCustom(NULL, i_TF, "AngleByLineFromMA simplest", 0, 1);
   Print ("slope = ", slope);
   
   return(slope);
}
 
//+-------------------------------------------------------------------------------------+
//| Получаем направление фильтрующей МА                                                 |
//+-------------------------------------------------------------------------------------+
double GetSlopeOfMa()
{
   if(iBars(NULL, i_TF) < maPeriod)
   {
      Print("Недостаточно баров в истории для корректного расчёта значений индикатора!");
      return(0);
   }
   double slope = iCustom(NULL, i_TF, "AngleByLineFromMA simplest", 0, 1);
   Print ("slope = ", slope);
   Print ("iBars(NULL, i_TF) = ", iBars(NULL, i_TF));
   
   return(slope);
}

J'ai téléchargé une histoire de Dukascopy depuis 2007... il n'y a pas moyen qu'il n'y ait pas assez de bars. La période de MA n'est que de 50.

J'ai collé votre ligne, mais j'ai corrigé return(0) ... et ajouté la sortie du nombre de barres sur le graphique:

Ici, dans le journal :

2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647


 
hoz:

J'ai téléchargé une histoire de Dukascopy depuis 2007... il n'y a pas moyen qu'il n'y ait pas assez de bars. La période de MA n'est que de 50.

Voici votre ligne, mais j'ai corrigé return(0) ...

Le voici dans le journal :


Le problème semble se situer au niveau de l'indicateur

 if (limit > 400) limit = 400;
 
hoz:

J'ai écrit un indicateur simple. Voici le code :

Il n'y a qu'un seul tampon. Les valeurs de l'indicateur sont de type double.

Dans Expert Advisor, j'ai décidé de récupérer la valeur de l'indicateur et de l'appliquer au trade comme un filtre.

Ici j'ai écrit un simple appel de fonction de cet indicateur tampon sur la dernière barre formée :

Dans le testeur, la valeur de la pente est renvoyée de manière erronée :

Pourquoi ? Le type est correct. L'appel est également correct. L'indicateur ne fonctionne pas du tout correctement. Voici le journal de bord sur le testeur, et celui du marché réel actuel :

Pourquoi le nombre2147483647 est-iltoujours renvoyé aulieu du nombre requis ?

Une valeur vide(EMPTY_VALUE) vous est renvoyée, à savoir 2147483647. Vous devriez peut-être appuyer sur Ctrl+D et consulter les données de l'indicateur lui-même ?