Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1361

 
azolotta:

Merci, cela a vraiment résolu le problème ! !!

Si vous le voulez bien, pouvez-vous me dire quel type de construction il faudrait ajouter pour qu'il n'affiche pas deux hauts/bas à la suite, mais une variabilité (haut-bas-haut) ? Je comprends que j'ai besoin d'une vérification, du genre "si l'élément précédent du tableau était haut, n'incluez pas le deuxième haut consécutif dans le tableau, et attendez le bas", mais comment dois-je faire ?

Je vous l'ai déjà expliqué.

 
DanilaMactep:

Bon après-midi à tous. J'ai mis le chèque, mais j'ai oublié de le tester. Heureusement que je m'en suis souvenu aujourd'hui... Voici cette vérification au niveau de l'arrêt de modulation

Lorsqu'il est testé, ce contrôle donne les erreurs montrées dans la capture d'écran ci-dessous

Et ce qui est intéressant, c'est que, comme on me l'a conseillé, j'ai ajouté à ce contrôle une domination de 1,5 comme suit


Cet ajout ne résout pas le problème apparu le test donne des erreurs comme dans la capture d'écran ci-dessous.

Si cette vérification du niveau d'arrêt du mod est commentée, il n'y a pas d'erreur. Quelle est l'erreur sur le chèque, veuillez m'en informer ? Sans elle, vous ne pouvez pas commencer le graal sur le monde réel - sera interdit immédiatementL O_o

Je pense que l'erreur n'est pas dans le test, mais dans l'endroit où vous l'avez prescrit.

et aussi ici vous pouvez enlever "*1,5".

if(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5)
if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5)
 
DanilaMactep:

Bon après-midi à tous. J'ai mis le chèque, mais j'ai oublié de le tester. Heureusement que je m'en suis souvenu aujourd'hui... Voici cette vérification au niveau de l'arrêt de modulation

Lorsqu'il est testé, ce contrôle donne les erreurs montrées dans la capture d'écran ci-dessous

Et ce qui est intéressant, c'est que, comme on me l'a conseillé, j'ai ajouté à ce contrôle une domination de 1,5 comme suit


Cet ajout ne résout pas le problème apparu le test donne des erreurs comme dans la capture d'écran ci-dessous.

Si cette vérification du niveau d'arrêt du mod est commentée, il n'y a pas d'erreur. Quelle est l'erreur sur le chèque, veuillez m'en informer ? Sans elle, vous ne pouvez pas commencer le graal sur le monde réel - sera interdit immédiatementL O_o

Vérifiez qu'il renvoie un niveau d'arrêt, c'est souvent 0.

   int    Stoplevel = (int)MarketInfo(Symbol(), MODE_STOPLEVEL);
   int    Spread = (int)MarketInfo(Symbol(), MODE_SPREAD);

   if (Stoplevel == 0) Stoplevel = 2 * Spread;

   

Comme ça.

 
Alekseu Fedotov:

Vérifiez ce que retourne le niveau d'arrêt, c'est souvent 0.

Comme ça.

Il n'a pas besoin de ça, c'est "si moins que stoplevel".

 
DanilaMactep:

Bon après-midi à tous.

Grossière erreur... je ne l'ai pas vu tout de suite.

if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5) // ЕСЛИ СТОПОЛС МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
 {
  sl= MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5;//СТОП  ЛОССУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
 }

if(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5) // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
 {
  tp= MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5;// ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
 }

C'est censé être des DOTS.

 
azolotta:
Ne pas afficher deux hauts et bas d'affilée, mais être variable (haut-bas-haut).

Vous pouvez le faire de manière simple. Déclarez une variable globale et modifiez-la en fonction des événements.

int direction=0;

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
   {


   for(n=0; n<=limit; n++)
     {
      if(direction>=0 && ((Close[n+1]>Open[n+1] && Open[n+2]>=Close[n+2]) || (Close[n+1]>Open[n+1] && Open[n+3]>Close[n+3])))
        {
         val_index=iLowest(NULL,0,MODE_LOW,3,n+1);
         myAZBuffer[n]=Low[val_index];
         ExtLowBuffer[n]=Low[val_index];
         direction=-1;
        }
      else
         if(direction<=0 && ((Open[n+1]>Close[n+1] && Close[n+2]>=Open[n+2]) || (Close[n+1]<Open[n+1] && Close[n+3]>Open[n+3])))
          {
            val_index=iHighest(NULL,0,MODE_HIGH,3,n+1);
            myAZBuffer[n]=High[val_index];
            ExtHighBuffer[n]=High[val_index];
            direction=1;
           }
      }
.......

Dans les indicateurs, utilisez la fonction OnCalculate et toutes ses variables.

Et Start est déjà démodé :)

 
Aleksei Stepanenko:

Vous pouvez le faire de manière simple. Déclarez une variable globale et modifiez-la en fonction des événements.

Dans les indicateurs, utilisez la fonction OnCalculate et toutes ses variables.

Et Start n'est plus à la mode :)

Merci, c'est une façon cool).

Je suis au courant pourOnCalculate, j'y serai))

 
Aleksei Stepanenko:

Vous pouvez le faire de manière simple. Déclarez une variable globale et modifiez-la en fonction des événements.

Dans les indicateurs, utilisez la fonction OnCalculate et toutes ses variables.

Et Start est déjà démodé :)

ne fonctionnent pas, le nouveau haut/bas ne les prendra pas en compte.
 

Bon après-midi. Lorsque j'appelle l'indicateur dans mon conseiller expert, une erreur est indiquée dans la boîte. Pourquoi cela se produit-il ? Et pas toujours. Il fonctionne bien sur

terminal, cela fonctionne bien.


 
Sergey Fionin:

Bon après-midi. Lorsque j'appelle l'indicateur dans mon conseiller expert, une erreur est indiquée dans la boîte. Pourquoi cela se produit-il ? Et pas toujours. Il fonctionne bien sur

terminal, cela fonctionne bien.


Il s'agit d'une violation d'écriture, d'une interdiction d'écriture du système.