Questions des débutants MQL4 MT4 MetaTrader 4 - page 202
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
=
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 :
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 :
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 !
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()
ArrayRange()
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é.
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.
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()
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.