[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 311

 
Oh, et il y a autre chose. En déclarant la dimension de 4 cellules dans l'une des dimensions du tableau, vous ne pouvez pas appeler Buffer_OHLC[4][] - le fait est que la numérotation commence par zéro, pas par un. Le maximum que vous pouvez appeler est donc Buffer_OHLC[3][] ;
 
drknn:


1. La variable Candles n'est utilisée nulle part.

2. La ligne

n'est pas écrit correctement. Elle se trouve dans la boucle - à chaque itération de la boucle, vous créez une nouvelle variable Cls. Et vous n'en avez pas besoin là. Le texte suivant suffira.


1. J'ai oublié de préciser que le travail sur les indicateurs n'est pas terminé. Mais dans tous les cas, cela ne devrait en aucun cas affecter le fonctionnement de cette fonction particulière.

2. C'était comme ça au début. Mais lorsqu'il a commencé à me donner une erreur, j'ai pensé que le problème pouvait résider dans le passage de données d'un tableau vers un tableau.

 
drknn:

Et essayez la ligne

remplacez-le par


Ça n'a pas aidé. L'erreur est toujours la même.
 
drknn:
Il y a encore une chose. Si vous avez déclaré une dimension de 4 cellules dans l'une des dimensions du tableau, vous ne pouvez pas appeler Buffer_OHLC[4][] - le fait est que la numérotation commence par zéro, et non par un. Le maximum que vous pouvez appeler est donc Buffer_OHLC[3][] ;
.


La cellule zéro peut également rester vide. Un exemple similaire a été décrit dans le manuel. Eh bien, en général, même en changeant la taille du tableau, l'erreur demeure.

PS L'indicateur doit prendre les données d'un autre outil et les appliquer à l'outil actuel. Peut-être que je fais quelque chose de fondamentalement mauvais en résolvant cette tâche ?

 
silhouette:


La cellule nulle peut également rester vide. Un exemple similaire a été décrit dans le manuel. En général, même après avoir modifié la taille du tableau, l'erreur persiste.

PS L'indicateur doit prendre les données d'un autre outil et les appliquer à l'outil actuel. Peut-être que je fais quelque chose de fondamentalement mauvais en résolvant ce problème ?

Vous ne travaillez tout simplement pas correctement avec un tableau à deux dimensions.

 

1. Echanger le premier indice avec le deuxième indice

2. utiliser ArrayResize

 
silhouette:


La cellule zéro peut également rester vide. Un exemple similaire a été décrit dans le manuel. Eh bien, en général, même en changeant la taille du tableau, l'erreur demeure.

PS L'indicateur doit prendre les données d'un autre outil et les appliquer à l'outil actuel. Peut-être que je fais quelque chose de mal en principe en résolvant cette tâche ?


Vous avez déclaré le tableau Buffer_OHLC[4][]. Vous vous adressez à une cellule inexistante du tableau, à savoir, Buffer_OHLC[4][i] - cette cellule n'existe pas dans le tableau que vous avez déclaré. Le maximum qui existe est Buffer_OHLC[3][i].

Je m'explique : vous avez déclaré 4 cellules dans la deuxième dimension du tableau (disons, 4 lignes d'un tableau avec un nombre infini de colonnes). Comme la numérotation commence à zéro, la première ligne à laquelle on peut accéder est Buffer_OHLC[0][], la deuxième est Buffer_OHLC[1][], la troisième est Buffer_OHLC[2][] et la quatrième est Buffer_OHLC[3][]. La ligne Buffer_OHLC[4][] n'existe pas dans le tableau que vous avez déclaré !

 
Il y a aussi [3,i] qui n'existe pas quand i>0 :)
 

Ne faites pas attention aux freins, c'est la première fois que j'ai affaire à des tableaux multidimensionnels :)

drknn, merci ! Je comprends votre commentaire

tara:

1. Echanger le premier indice avec le second

2. utiliser ArrayResize

Merci ! J'ai le résultat. Mais je voudrais aussi clarifier la fonction ArrayResize et la taille de la première dimension du tableau.

   int counted_bars=IndicatorCounted();
   int limit=Bars-counted_bars-1;
   if (limit>1) 
      limit=Bars-1;
   
   ArrayResize(Buffer_OHLC,limit-1);
   for(int i=limit; i>=0; i--)
    {
      Buffer_OHLC[i][0]=iOpen (Smb,Period(),i);
      Buffer_OHLC[i][1]=iHigh (Smb,Period(),i);
      Buffer_OHLC[i][2]=iLow  (Smb,Period(),i);
      Buffer_OHLC[i][3]=iClose(Smb,Period(),i);
      
      if(Line==true)
       {
        Buffer_ind[i]=Buffer_OHLC[i][3];
       }
    }
   return(0);

En utilisant la limite 1, il y a un graphique, mais l'erreur 4051 "Valeur invalide du paramètre de fonction" apparaît.

 
Quelqu'un peut-il expliquer comment ouvrir un ordre à tout moment d'une barre et n'ouvrir l'ordre suivant que sur la barre suivante ?