Quelques outils et fonctions MQL5
Code des pays et devises pour Calendrier (P1307)
C’est un peu cru donné comme cela mais imaginons que les infos suivantes se trouvent dans un tableau bien ordonné 😉.
[id] [nom] [code] [devise] [symbole_devise] [nom_url] [réservé]
0 "Worldwide" "WW" "ALL" "" "worldwide" 0
999 "European Union" "EU" "EUR" "€" "european-union" 0
840 "United States" "US" "USD" "$" "united-states" 0
124 "Canada" "CA" "CAD" "$" "canada" 0
36 "Australia" "AU" "AUD" "$" "australia" 0
554 "New Zealand" "NZ" "NZD" "$" "new-zealand" 0
392 "Japan" "JP" "JPY" "Ґ" "japan" 0
156 "China" "CN" "CNY" "Ґ" "china" 0
826 "United Kingdom" "GB" "GBP" "Ј" "united-kingdom"
756 "Switzerland" "CH" "CHF" "₣" "switzerland" 0
276 "Germany" "DE" "EUR" "€" "germany" 0
250 "France" "FR" "EUR" "€" "france" 0
380 "Italy" "IT" "EUR" "€" "italy" 0
724 "Spain" "ES" "EUR" "€" "spain" 0
76 "Brazil" "BR" "BRL" "R$" "brazil" 0
410 "South Korea" "KR" "KRW" "₩" "south-korea"
Modifier une position
Si le trade se fait par CTrade, il faut tout simplement utiliser la méthode
bool PositionModify(
const string symbol, // symbole
double sl, // prix du stop loss
double tp // prix du take profit )
Un exemple
| // Importer librairie CTrade
#include <Trade\Trade.mqh> CTrade trade; trade.Sell(lot, _Symbol, Bid, SL, TP); trade.PositionModify(_Symbol,NormalizeDouble(openPrice - (SecuredSL * 0.0001), _Digits), 0); |
Récupérer la date d’ouverture de la bougie actuelle
| MqlDateTime dt; // On crée une srtucture MqlDateTime
datetime time=iTime(_Symbol, PERIOD_M1,0); // On récupère l'heure d'ouverture de la bougie actuelle en M1 TimeToStruct(time,dt); // On place cette heure dans le MqlDateTime pour plus facilement l'exploiter |
Afficher des indicateurs dans le Testeur de stratégie
Les indicateurs chargés dans le code source sont automatiquement affichés dans le Testeur de stratégie mais par pur coïncidence je me suis rendu compte que cela fonctionnait avec des modèles placés sur les graphiques. En effet il suffit de créer un modèle du même nom que l'Expert Advisor qu’on lance pour que tous les indicateurs et outils qu’on place dessus apparaissent dans le tester.
Obtenir la TimeFrame en chaîne de caractères
| string TimeFrameInString()
{ int tf= _Period; if(tf==1){ return "M1";} if(tf==5){ return "M5";} if(tf==15){ return "M15";} if(tf==30){ return "M30";} if(tf==16385){ return "H1";} if(tf==16388){ return "M4";} if(tf==16408){ return "D1";} if(tf==32769){ return "W1";} if(tf==49153){ return "MN";} return ""; } |
Envoyer une notification
| SendNotification("Voici mon message"); |
Trouver la somme nécessaire pour un lot (marge)
| SymbolInfoDouble(_Symbol, SYMBOL_MARGIN_HEDGED); |
Afficher un message dans une message box
| MessageBox("Mon message"); |
Utiliser les objets dans une fonction
Les fonctions utilsent des pointeurs sur objets (avec *) donc voici un exemple de fonction avec un objet CArrayDouble
| CArrayDouble *getLotsArray(double lot)
{ CArrayDouble *lots = new CArrayDouble; while(lot >= 0.01) { if(lot > SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX)) { lots.Add(SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX)); lot -= SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX); } else { lots.Add(SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX)); } } return(lots); } |
Initialiser la fonction OnInit()
- Lancer le setprices()
- Mettre à jour les dates
- Mettre à jour le isOpen
Tracer les points pivot sur le graphique
| datetime today;
int countDays=0; void tracePivot(){ if(iTime(_Symbol, PERIOD_D1,0) != today){ today = iTime(_Symbol, PERIOD_D1,0); // début du tracé datetime Time1 = iTime(_Symbol,PERIOD_D1,0); //Calcul de l'eure de fin du tracé (à 23:30) MqlDateTime dEnd; TimeToStruct( iTime(_Symbol,PERIOD_D1,0),dEnd); dEnd.hour = 23; dEnd.min = 30; datetime Time2 = StructToTime(dEnd); // Tracé des lignes TrendCreate(0,"PP"+IntegerToString(countDays),0,Time1,PP(),Time2,PP(),clrBlue); TrendCreate(0,"S1"+IntegerToString(countDays),0,Time1,S1(),Time2,S1(),clrCyan); TrendCreate(0,"S2"+IntegerToString(countDays),0,Time1,S2(),Time2,S2(),clrYellow); TrendCreate(0,"S3"+IntegerToString(countDays),0,Time1,S3(),Time2,S3(),clrDarkGray); TrendCreate(0,"R1"+IntegerToString(countDays),0,Time1,R1(),Time2,R1(),clrBeige); TrendCreate(0,"R2"+IntegerToString(countDays),0,Time1,R2(),Time2,R2(),clrRosyBrown); TrendCreate(0,"R3"+IntegerToString(countDays),0,Time1,R3(),Time2,R3(),clrDarkOrange); countDays++; } } bool TrendCreate(const long chart_ID = 0, // identifiant du graphique const string name = "TrendLine", // nom de la ligne const int sub_window = 0, // indice de sous-fenêtre datetime time1 = 0, // heure du premier point double price1 = 0, // prix du premier point datetime time2 = 0, // heure du deuxième point double price2 = 0, // prix du deuxième point const color clr = clrRed, // couleur de la ligne const ENUM_LINE_STYLE style = STYLE_SOLID, // style de la ligne const int width = 3, // largeur de la ligne const bool back = false, // en arrière plan const bool selection = true, // mise en surbrillance pour le déplacement const bool ray_left = false, // Prolongement de la ligne vers la gauche const bool ray_right = false, // Prolongement de la ligne vers la droite const bool hidden = true, // caché dans la liste des objets const long z_order = 0) // priorité pour le clic de souris { //--- réinitialise la valeur d'erreur ResetLastError(); //--- crée une ligne de tendance par les coordonnées données if(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,time1,price1,time2,price2)) { Print(__FUNCTION__, " : impossible de créer une ligne de tendance ! Code d'erreur = ",GetLastError()); return(false); } //--- définit la couleur de la ligne ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); //--- définit le style d'affichage de la ligne ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); //--- définit la largeur de la ligne ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width); //--- affiche en premier plan (false) ou en arrière-plan (true) ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); //--- active (true) ou désactive (false) le mode de déplacement de la ligne à la souris //--- lors de la création d'un objet graphique utilisant la fonction ObjectCreate, l'o //--- mis en surbrillance et déplacé par défaut. Dans cette méthode, le paramètre de sélection //--- est vrai par défaut, permettant de mettre en surbrillance et de déplacer l'objet ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); //--- active (true) ou désactive(false) le mode de prolongation de l'affichage de la ligne vers la gauche ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left); //--- active (true) ou désactive(false) le mode de prolongation de l'affichage de la ligne vers la droite ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right); //--- masque (true) ou affiche (false) le nom de l'objet graphique dans la liste des objets ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); //--- définit la priorité pour recevoir l'événement d'un clic de souris dans le graphique ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); //--- exécution réussie return(true); } |
Formater un fichier historique d’un Event depuis investing.com
- Se rendre sur la page de l’event sur investing.com
- Copier le tableau historique de l’event
- Coller le tableau dans Translater Investing - Google Sheets dans la première feuille à gauche
- Formater les heures (généralement on ajoute 1heure) dans la colonne tout à droit (pour cela << =CelluleDesHeures+ “1:00” >>
- Formater la colonne des heures en heure pour la modification puis en texte brut quand le formatge est terminé
- Se rendre sur la feuille Résultat pour valider le rendu puis le copier et coller uniquement les valeurs dans la feuille ToDownload
- Télécharger la feuille ToDownload en csv
- Ouvir le fichier téléchargé et enregistrer sous un csv en UTF-16 LE en le renommant comme il faut
- Charger le fichier dans l’EA Event et tester
Obtenir les données des inscriptions hebdomadaire au chômage de US
Ces données sont fournis par le “US Department of Labor” dont le site est https://www.dol.gov/.
Le site dédié aux devs est Beginner's Guide - United States Department of Labor Developer Portal (dol.gov)
.
On commence par créer un compte : Account Registered (dol.gov)
Se connecter ensuite et générer une clé de connexion API .
Le Secret utilisé pour la première est mon mot de passe de toujours et la clé est 656af577-8bd6-4bd8-b3dd-b84a1890249c
LE liens vers la page spécial de l’api concernant Initial Jobless claims : OUI Initial Claims - United States Department of Labor Developer Portal (dol.gov)
Requête début :
http://api.dol.gov/V1/Statistics/OUI_InitialClaims/unemploymentInsuranceInitialClaims?$orderby=week desc&KEY=656af577-8bd6-4bd8-b3dd-b84a1890249c
