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
Autres exemples d'utilisation de la fonction SetOrder().
Pour plus de clarté, nous devrions sélectionner un symbole avec un niveau minimum autorisé de stop loss/stake profit en pips. J'ai choisi AUDCAD, pour lequel ce niveau dans ma société de courtage sélectionnée pour le test est de 10 points.
1. Mise en place d'un ordre BuyLimit avec le lot 0.1, 5 pips en dessous du prix actuel. J'ai délibérément choisi un niveau de fixation de l'ordre inférieur au niveau minimum autorisé pour obtenir l'erreur 130 (Mauvais stops) et montrer comment la fonction SetOrder va s'en sortir.
Contenu du protocole (lu de bas en haut) :
2008.03.17 09:06:24 test_SetOrder AUDCAD,M5 : supprimé
2008.03.17 09:06:24 stdlib AUDCAD,M5 : supprimé
2008.03.17 09:06:24 stdlib AUDCAD,M5 : uninit reason 0
2008.03.17 09:06:24 test_SetOrder AUDCAD,M5 : raison de désinit 0
2008.03.17 09:06:24 test_SetOrder AUDCAD,M5 : open #21616412 buy limit 0.10 AUDCAD at 0.9180 ok
2008.03.17 09:06:15 test_SetOrder AUDCAD,M5 : SetOrder() : Niveaux de prix corrigés
2008.03.17 09:06:15 test_SetOrder AUDCAD,M5 : Ask=0.919 Bid=0.918 sy=AUDCAD ll=0.1 op=Buy Limit pp=0.9185 sl=0 tp=0 mn=0
2008.03.17 09:06:15 test_SetOrder AUDCAD,M5 : Error(130) set order : invalid stops, try 1
2008.03.17 09:06:15 stdlib AUDCAD,M5 : chargé correctement
2008.03.17 09:06:14 test_SetOrder AUDCAD,M5 : chargé correctement
Le protocole montre que cette fonction a essayé de placer un ordre 0.9185 (pp=0.9185) mais le serveur de trading n'a pas accepté cet ordre et a renvoyé l'erreur 130. Ensuite, la fonction corrige le niveau de fixation de l'ordre en fonction du niveau minimum autorisé et effectue la tentative de transaction suivante qui se termine avec succès. L'ordre est fixé à 0.9180.
2. Fixer un ordre BuyStop avec le lot 0.3 à 6 pips au-dessus du prix actuel avec un stop de 9 pips.
Contenu du protocole (à lire de bas en haut) :
2008.03.17 09:27:36 test_SetOrder AUDCAD,M5 : supprimé
2008.03.17 09:27:36 stdlib AUDCAD,M5 : supprimé
2008.03.17 09:27:36 stdlib AUDCAD,M5 : uninit reason 0
2008.03.17 09:27:36 test_SetOrder AUDCAD,M5 : uninit reason 0
2008.03.17 09:27:36 test_SetOrder AUDCAD,M5 : open #21617419 buy stop 0.30 AUDCAD at 0.9209 sl : 0.9195 ok
2008.03.17 09:27:26 test_SetOrder AUDCAD,M5 : SetOrder() : Niveaux de prix corrigés
2008.03.17 09:27:26 test_SetOrder AUDCAD,M5 : Ask=0.9198 Bid=0.9188 sy=AUDCAD ll=0.3 op=Buy Stop pp=0.9204 sl=0.9195 tp=0 mn=0
2008.03.17 09:27:26 test_SetOrder AUDCAD,M5 : Error(130) set order : invalid stops, try 1
2008.03.17 09:27:26 stdlib AUDCAD,M5 : chargé correctement
2008.03.17 09:27:25 test_SetOrder AUDCAD,M5 : chargé correctement
Cet exemple montre que le niveau de réglage de l'ordre est passé de 0,9204 à 0,9209. Dans le même temps, le niveau du stop est resté inchangé à sl=0.9195. C'est-à-dire que le stop en pips est passé de 9 à 14.
3. Fixation d'un ordre SellLimit avec 0,5 lot à 8 points au-dessus du prix actuel avec un stop de 9 points et un ordre d'achat de 7 points.
Contenu du protocole :
2008.03.17 10:38:50 test_SetOrder AUDCAD,M5 : supprimé
2008.03.17 10:38:50 stdlib AUDCAD,M5 : supprimé
2008.03.17 10:38:50 stdlib AUDCAD,M5 : uninit reason 0
2008.03.17 10:38:50 test_SetOrder AUDCAD,M5 : uninit reason 0
2008.03.17 10:38:49 test_SetOrder AUDCAD,M5 : open #21620553 sell limit 0.50 AUDCAD at 0.9190 sl : 0.9201 tp : 0.9179 ok
2008.03.17 10:38:40 test_SetOrder AUDCAD,M5 : SetOrder() : Niveaux de prix corrigés
2008.03.17 10:38:40 test_SetOrder AUDCAD,M5 : Ask=0.919 Bid=0.918 sy=AUDCAD ll=0.5 op=Sell Limit pp=0.9188 sl=0.9197 tp=0.9179 mn=0
2008.03.17 10:38:40 test_SetOrder AUDCAD,M5 : Error(130) set order : invalid stops, try 1
2008.03.17 10:38:40 stdlib AUDCAD,M5 : chargé correctement
2008.03.17 10:38:39 test_SetOrder AUDCAD,M5 : chargé correctement
Cet exemple tente à nouveau de fixer un ordre limite trop proche du marché. Le niveau de fixation des ordres a été ajusté à la hausse de 2 pips de 0.9188 à 0.9190. Le niveau stop a également été ajusté, mais de 4 points, passant de 0,9197 à 0,9201. Seul le niveau Take est resté inchangé, ce qui l'a fait passer de 9 à 11 pips.
Je pense qu'il y a assez d'exemples. Ils sont déjà assez difficiles à comprendre. Quelles conclusions peut-on en tirer ?
1. La fonction fera de son mieux pour accomplir sa tâche, c'est-à-dire qu'elle essaiera d'établir un ordre. Il ajustera les niveaux en fonction de l'évolution du marché et essaiera de faire son travail encore et encore.
2. L'ajustement du niveau de réglage de l'ordre stop entraîne une augmentation du niveau du stop en points par rapport au prix de réglage. Cela est dû au fait que le niveau de l'ordre stop reste en place et que le niveau de fixation de l'ordre est éloigné du niveau stop. Le niveau de l'ordre BuyStop est déplacé vers le haut et l'ordre SellStop est déplacé vers le bas. Ces manipulations avec le niveau de réglage de l'ordre augmentent la taille du stop en points de la valeur de l'ajustement du niveau de réglage de l'ordre.
3. L'ajustement du niveau de fixation de l'ordre limite entraîne l'augmentation du niveau de la ligne de prise en points par rapport au prix de fixation. Ceci est mis en œuvre de la manière suivante. Les tees restent en place tandis que les stops et les niveaux de configuration sont déplacés vers le haut pour BuyLimit et vers le bas pour SellLimit. La taille des points de prise en charge augmente en fonction de la valeur de la correction du niveau de réglage de la commande.
Attention ! J'ai modifié le code de la fonction SetOrder en échangeant quelques lignes. L'ancien message ne pouvant être édité, je colle ici la fonction corrigée. Vous trouverez également ci-joint un script pour tester en ligne la fonction SetOrder.
Pour accélérer la publication de la fonction ModifyOrder, j'ai décidé de passer aux fonctions de position pendant un certain temps, puis de revenir aux fonctions d'ordre et de terminer avec elles.
Note !
Je définis lespositions comme des opérations de trading OP_BUY et OP_SELL. Les postes sont ouverts et fermés.
J'appelle les opérations OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT et OP_SELLSTOPdes ordres. Les commandes sont passées et supprimées. Si un ordre est déclenché, il devient une position.
La fonction ExistPositions().
Cette fonction est destinée à vérifier s'il existe des positions ouvertes d'achat ou de vente. Similaire à la fonction ExistOrders. Par défaut, il vérifie toutes les positions : actuelles et autres. Vous pouvez affiner la sélection à l'aide d'une combinaison de filtres - paramètres de fonction :
Exemples d'utilisation de la fonction ExistPositions().
1. Vérifier l'existence de toute position
2. Vérifier l'existence d'une position sur le symbole graphique actuel
3. Vérifier l'existence d'un achat sur tout instrument
4. Vérifier s'il y a une vente avec le numéro magique 123456 sur EURUSD
5. Vérifier l'existence de toute position dont l'heure d'ouverture ne remonte pas à plus de 15 minutes.
Le trailer contient un script pour tester la fonction ExistPositions. Les quatre premiers exemples sont commentés.
Désolé, mais ni OrderSet_1 ni OrderSet_2 ne fonctionnent ! Il génère des erreurs - il ne compile pas ! Que dois-je faire ?
Des fonctions et des façons de travailler avec la date et l'heure seraient utiles...
Par exemple :
- soustraire 2 heures à l'heure actuelle
- X jours avant l'expiration...
Aussi... Je ne sais pas si c'est pertinent... :(
Fonctions pour les statistiques. Par exemple :
- combien de chandeliers horaires à 21:00 tous les lundis ?
- dont : 215 haussier, 245 baissier
- de chandeliers haussiers : min. 12 pips max 54 pips
- etc...
ou
- le bas de chaque première bougie 15H du jour est supérieur/inférieur à la seconde X fois.
Ce ne sont pas les fonctions elles-mêmes qui sont importantes, mais la façon dont elles sont créées, et il est plus facile d'implémenter ses propres fonctions,
tout en apprenant à programmer...
Je me plains une fois de plus :))) Parfois, beaucoup de choses ne sont pas très claires, et les livres sur le C peuvent aider.
Vous pouvez bien sûr les lire, mais avez-vous vraiment besoin de vous remplir la tête d'informations inutiles, en vous concentrant uniquement sur µl4 ?
Quel genre d'obscurité ? Par exemple, ceci : |||.
Des fonctions et des moyens de traiter la date et l'heure seraient utiles...
Par exemple :
- soustraire 2 heures à l'heure actuelle
- Il reste X jours avant l'expiration...
...
vous n'avez pas besoin d'écrire une telle fonction - il existe une solution très simple !
int gHour = 2 ;
datetime gTwoHour ;
gTwoHourTime = TimeCorrent() - ((86400)/24) * gHour ) ; // 2 heures
gTwoHourTime = TimeCorrent() - 7200 ; // idem mais sans les calculs de charge
c.-à-d. que nous obtenons 86400 ticks en un jour
donc 2 heures = 7200 ticks, c'est-à-dire 86400/24 * 2 = 7200
1 heure = 3600 ; etc.
Des fonctions et des moyens de travailler avec la date et l'heure seraient utiles.
Fonctions pour les statistiques. Par exemple :
- combien de chandeliers de 21:00 chaque lundi
- dont : 215 haussier, 245 baissier
- de chandeliers haussiers : min. 12 pips max 54 pips
- etc...
ou
- le bas de chaque première bougie 15H du jour est supérieur/inférieur à la seconde X fois.
Ce ne sont pas les fonctions elles-mêmes qui sont importantes, mais la façon dont elles sont créées, et il est plus facile d'implémenter ses propres fonctions,
tout en apprenant à programmer...
Dûment noté... :-)
Je vais encore me plaindre :)) parfois beaucoup de choses ne sont pas très claires, et ils disent que les livres C aideront.
Ils soulignent que de nombreux livres sur le C vous aideront. Bien sûr, vous pouvez les lire, mais avez-vous vraiment besoin de vous remplir la tête d'informations inutiles, en vous concentrant uniquement sur le µl4 ?
Quel genre d'obscurité ? Par exemple, ceci : |||.
C'est un OU logique. Permettez-moi de l'expliquer par un exemple. L'expression "Si x>2 ou x<-3, alors x=5" dans MQL4 aura la forme suivante