Questions des débutants MQL4 MT4 MetaTrader 4 - page 202

 
Yurij Kozhevnikov:

=

Cela semble être le cas, si je comprends bien le principe de substitution.

Points-virgules supplémentaires après les accolades. Et on ne sait pas très bien à quoi d'autre on fait référence.

Il est dommage qu'il n'y ait apparemment pas de moyen facile d'automatiser l'expansion des macros pour voir ce qui se passe. A moins que je puisse inventer mon propre script.

Merci ! Il y a une raison pour laquelle il n'y a pas de point-virgule après while dans une macro.

Les macros sont une bonne chose, mais la ligne entre le bien et le mal, dans leur cas, est encore plus fine qu'avec une femme))). Vous devez être très, très prudent avec eux. Et oui, dans mon exemple, ce n'est pas ';', mais exactement else, qui a commencé à faire référence à if, qui est dans la macro, après avoir supprimé ;.

Je suis très doué pour les macros, donc pour un cas comme le vôtre, j'ai renoncé à les utiliser depuis environ 1 an et demi, c'est optimal :

inline bool CheckRead(){
   ...
}

if (!CheckRead()) return;
 

Sauf que je ne trouve rien à propos d'inline ici.

Et je ne connais pas le C++.

 

Bonjour, aidez-nous !

Il existe un code assez simple pour ouvrir et modifier un ordre. Les fonctions OrderSend, OrderSelect et OrderModify sont placées dans une boucle avec un petit délai entre les tentatives. Pour minimiser les erreurs de communication, etc.

La chose étrange suivante se produit : l'ordre est normalement ouvert, suivi par une modification réussie du StopLoss et une modification réussie du TakeProfit. Mais lorsque je règle le TP, le StopLoss est annulé. Je ne comprends pas la raison.

Voici cette partie du code :

send = 5 ; //nombre maximum de tentatives pour fixer un ordre

tick=0 ;

sendschet=0 ; //compteur d'essais

while(!tick && sendschet<=send)

{

tick=OrderSend(Symbol(),OP_SELL,NormalizeDouble(lot,2),Bid,150,0.0,0.0,komm,MagNum,0,Yellow) ;

envoie++ ;

Sleep(1000) ; //Délai de 1 seconde avant le prochain essai

}

select = 5 ; /nombre maximum de tentatives pour sélectionner une commande

slschet=0 ; //compteur d'essais pour la sélection des commandes

while(!OrderSelect(tick,SELECT_BY_TICKET) && slschet<=select)

{

slschet++ ;

Sleep(500) ; //Délai de 0,5 seconde avant la prochaine tentative.

}

if(slschet<select) //les tentatives étaient inférieures au maximum, cela signifie que la commande a été sélectionnée avec succès.

{

modify = 5 ; //nombre maximal de tentatives de modification de la commande

mdschet=0 ;

while(!OrderModify(tick,OrderOpenPrice(),NormalizeDouble(SL,Digits),OrderTakeProfit(),0,Yellow)

&& mdschet<=modify)

{

mdschet++ ;

Sleep(500) ; //Délai de 0,5 seconde avant la prochaine tentative.

}

*Ici tout va bien - SL est réglé

mdschet=0 ; //remise à zéro du compteur avant de changer de TP

while(!OrderModify(tick,OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(TP,Digits),0,Yellow)

&& mdschet<=modify)

{

mdschet++ ;

Dormir (500) ;

}

}

*Lorsque le TP est fixé normalement, mais que le SL est déjà égal à 0.0. Il s'avère donc que OrderStopLoss() est égal à 0.0.

La sélection des commandes n'a pas changé pour autant.

Si nous ajoutons OrderSelect une fois de plus entre le réglage du SL et du TP, tout semble fonctionner. Mais cela contredit la logique.

Je vous remercie d'avance pour votre aide dans cette affaire.

 

Bonjour !

Veuillez m'aider à traiter le changement de taille d'un tableau dynamique.

Disons que je suis en train de mettre en place un tableau :

int DB[][8];

Puis dans la première sous-routine de la boucle, éventuellement plusieurs fois (pas de questions à ce sujet - jusqu'à présent, cela fonctionne comme prévu) :

ushort i = 0;
ArrayResize(DB,i+1);

Dans la prochaine sous-routine, je vais ajouter des éléments dans la première dimension de la boucle. Je ne sais pas combien à l'avance. Je sais que c'est plus lent que si vous déclarez la dimension à l'avance. Mais je pense que jusqu'à 500 ajouts par an ne feront pas de différence.

La question est la suivante : comment puis-je connaître la taille actuelle du tableau dans ce sous-programme ? Pour la prendre comme taille de base et lui ajouter une nouvelle valeur.

Prendre ArraySize() et diviser par 8 ? Ou existe-t-il une autre fonction qui me conviendrait mieux ?

Merci d'avance !

 
Oleg_Ko:

Bonjour !

Veuillez m'aider à traiter le changement de taille d'un tableau dynamique.

Disons que je suis en train de mettre en place un tableau :

Puis dans la première sous-routine de la boucle, éventuellement plusieurs fois (pas de questions à ce sujet - jusqu'à présent, cela fonctionne comme prévu) :

Dans la prochaine sous-routine, je vais ajouter des éléments dans la première dimension de la boucle. Je ne sais pas combien à l'avance. Je sais que c'est plus lent que si vous déclarez la dimension à l'avance. Mais je pense que jusqu'à 500 ajouts par an ne feront pas de différence.

La question est la suivante : comment puis-je connaître la taille actuelle du tableau dans ce sous-programme ? Pour la prendre comme taille de base et lui ajouter une nouvelle valeur.

Prendre ArraySize() et diviser par 8 ? Ou existe-t-il une autre fonction qui me conviendrait mieux ?

Merci d'avance !

ArrayRange()

Документация по MQL5: Операции с массивами / ArrayRange
Документация по MQL5: Операции с массивами / ArrayRange
  • www.mql5.com
Операции с массивами / ArrayRange - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin:

ArrayRange()

Artem, merci.
 

Bon après-midi.

Je n'ai pas négocié sur MT4 depuis très longtemps, j'ai décidé d'essayer à nouveau. J'ai déjà utilisé le script (ci-joint), mais maintenant il ne s'exécute pas, veuillez voir ce qui a mal tourné.

Dossiers :
RiskAdvisor.mq4  12 kb
 
Nauris Zukas:

Bonjour !
Existe-t-il un moyen de connaître immédiatement par CopyHigh le nombre d'éléments d'un tableau sur une période donnée ?

Je vais y répondre moi-même, peut-être que quelqu'un tombera sur la question via un moteur de recherche.

SeriesInfoInteger(symbol_name,timeframe,SERIES_BARS_COUNT);
 
Nauris Zukas:

Je vais y répondre moi-même, peut-être que quelqu'un tombera sur la question via un moteur de recherche.

Aussi Bars(), iBars()
 
Artyom Trishkin:
Aussi Bars(), iBars()

Avec Bars(), vous ne pouvez pas connaître le nombre d'éléments du tableau dans n'importe quelle période de temps, mais seulement dans le graphique actuel.

Raison: