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

 
skyjet:

Bonjour, Mon objectif est de transférer l'indicateur en créant une fonction dans l'EA.

La première étape, qui est la création de la fonction, est effectuée. Mais le suivant - le test - ne fonctionne pas.

L'indicateur dessine des canaux. Il a 4 tampons et beaucoup de variables. J'ai placé tout cela dans la fonction.

Mais lorsque je crée un Expert Advisor de test pour m'assurer de l'exactitude de son fonctionnement en comparant l'indicateur et ma fonction, je n'arrive pas à réaliser la compilation.

Des erreurs constantes de variables externes, qui n'existaient pas lorsque j'ai créé la fonction, sont apparues dans l'EA.

Veuillez me donner des conseils ou un lien vers un exemple. J'ai utilisé les articles de GODZILLA, mais ses exemples sont différents des miens.

Le schéma est en gros le suivant :

  • transférer tout ce qui était dans l'indicateur init() dans une fonction séparée, par exemple, fInit_Indicator() et l'écrire dans init() de l'EA, en n'oubliant pas de retirer du code tout ce qui concerne l'initialisation des tampons de l'indicateur.
  • copier toutes les variables globales de l'indicateur et les placer dans les variables globales de l'EA. N'oubliez pas de définir la taille des tampons des indicateurs lorsqu'ils sont déclarés dans l'EA. Quelque chose comme gd_Buf1[100], gd_Buf2[100] etc. Je pense que 100 valeurs vous suffiront.
  • renommez la fonction start() de l'indicateur, par exemple, fMyIndicator() et placez-la dans la fonction start() de l'EA avant le code d'ouverture de l'ordre (pour prendre une décision).
  • N'oubliez pas non plus que le tampon indicateur est différent du tampon "non-indicateur". Il existe plusieurs solutions à ce problème :
  • lorsqu'une nouvelle barre arrive, toutes les données du tableau "non-indicateur" sont décalées, libérant l'index 0, où est placée la nouvelle valeur calculée.
  • De nouveau, lorsqu'une nouvelle barre arrive, recalculez l'ensemble du "tableau des non-indicateurs".

Essayez-le - ce n'est pas difficile.

 
999666:
Aidez-moi à écrire une condition qui fera en sorte que l'EA multiplie le lot par deux après avoir ouvert n ordres.
if (MyOrders >= n) Lots *= 2;
 

Bonjour !

Je suis toujours en train de comprendre les choses avec les tableaux.

J'ai besoin de charger les valeurs du nombre de points dans le tableau à chaque nouveau tick.

Lataille du tableau sera différente à chaque fois. Que dois-je faire dans ce cas, utiliser ArreyResize à chaque itération de la boucle ?

 

Bonjour, au sujet des matrices.

il existe une cellule de ce type

12345,p,fgh,2011-01-01,55,66

comment puis-je en obtenir 55 ?

Merci.

 

Si le tableau est hétérogène, il est préférable de convertir tous les éléments en chaînes de caractères, puis de rechercher l'élément requis en utilisant la commande

StringFinde(https://www.mql5.com/ru/forum/138609/page22#613148). Corrigez-moi si je me trompe.

 
TarasBY:

Pas utile : S'il n'est pas difficile d'avoir deux conditions if (LotConst_ou_not) gd_200 = Lot ;

autre gd_200 = AccountBalance() * RiskPercent / 100.0 / 10000.0 ;

Remplacez-le par un conseiller expert qui calcule non pas le solde mais le nombre d'ordres ouverts.

La réponse serait très appréciée.

 
TarasBY: Pas utile : S'il n'est pas difficile d'avoir deux conditions if (LotConst_ou_not) gd_200 = Lot ;

autre gd_200 = AccountBalance() * RiskPercent / 100.0 / 10000.0 ;

Remplacez-le par un conseiller expert qui calcule non pas le solde mais le nombre d'ordres ouverts.

La réponse serait très appréciée.


 
Snegovik:

Bonjour, au sujet des matrices.

il existe une cellule de ce type

12345,p,fgh,2011-01-01,55,66

comment puis-je en obtenir 55 ?

Merci.


https://book.mql4.com/ru/variables/arrays
 
999666:
Aidez-moi à écrire une condition qui fera en sorte que l'EA multiplie le lot par deux après l'ouverture de n ordres.
Si vous voulez ouvrir les ordres suivants (4, etc.) alors que 3 sont déjà ouverts avec 2 x lots, alors.. :
int Opened_pos=0;
for (int i=OrdersTotal()-1; i>=0; i--)
{ if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
  { if (OrderSymbol()==Symbol() && (OrderType()==OP_BUY || OrderType()==OP_SELL))
    { Opened_pos++;
} } }
if (Opened_pos>=4) double lot=lot*2;
 
Fox_RM:

Bonjour !

Je suis toujours en train de comprendre les choses avec les tableaux.

J'ai besoin de charger les valeurs du nombre de points dans le tableau à chaque nouveau tick.

La taille du tableau sera différente à chaque fois. Que dois-je faire dans ce cas, utiliser ArreyResize à chaque itération de la boucle ?

1-Item : votre philosophie de changer la taille du tableau est défectueuse dès le début, dans 99 cas sur 100 vous ne pouvez utiliser que 10 cellules pour gérer les lectures de l'indicateur ;

2-nd : recalculer ces relevés à chaque tic est un caprice de cerveau mal informé.