//--- description #property description "Le script crée un objet \"Graphique\"." //--- affichage de la fenêtre des paramètres d'entrée lors du lancement du script #property script_show_inputs //--- paramètres d'entrée du script input string InpName="Chart"; // nom de l'objet input string InpSymbol="EURUSD"; // Symbole input ENUM_TIMEFRAMES InpPeriod=PERIOD_H1; // Période input ENUM_BASE_CORNER InpCorner=CORNER_LEFT_UPPER; // Coin d'ancrage input int InpScale=2; //Echelle input bool InpDateScale=true; // Affichage de l'échelle des heures input bool InpPriceScale=true; // Affichage de l'échelle des prix input color InpColor=clrRed; // Couleur de la bordure au moment de la surbrillance input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Style de ligne lors qu'il est mis en surbrillance input int InpPointWidth=1; // Taille du point pour le déplacement input bool InpBack=false; // Objet en arrière-plan input bool InpSelection=true; // Mise en surbrillance pour déplacer input bool InpHidden=true; // Caché dans la liste des objets input long InpZOrder=0; // Priorité du clic de souris //+----------------------------------------------------------------------------------------------------+ //| Création de l'objet Graphique | //+----------------------------------------------------------------------------------------------------+ bool ObjectChartCreate(const long chart_ID=0, // identifiant du graphique const string name="Chart", // nom de l'objet const int sub_window=0, // indice de la sous-fenêtre const string symbol="EURUSD", // symbole const ENUM_TIMEFRAMES period=PERIOD_H1, // période const int x=0, // coordonnée X const int y=0, // coordonnée Y const int width=300, // largeur const int height=200, // hauteur const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // coin d'ancrage const int scale=2, // échelle const bool date_scale=true, // Affichage de l'échelle des heures const bool price_scale=true, // Affichage de l'échelle des prix const color clr=clrRed, // couleur de la bordure en surbrillance const ENUM_LINE_STYLE style=STYLE_SOLID, // Style de trait en surbrillance const int point_width=1, // déplace la taille du point const bool back=false, // en arrière-plan const bool selection=false, // mise en surbrillance pour déplacer const bool hidden=true, // caché dans la liste des objets const long z_order=0) // priorité du clic de souris { //--- réinitialise la valeur d'erreur ResetLastError(); //--- crée l'objet Graphique if(!ObjectCreate(chart_ID,name,OBJ_CHART,sub_window,0,0)) { Print(__FUNCTION__, " : échec de création del'objet \"Graphique\" ! Code d'erreur = ",GetLastError()); return(false); } //--- définit les coordonnées de l'objet ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x); ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y); //--- définit la taille de l'objet ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width); ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height); //--- définit le coin du graphique, relativement auquel les coordonnées du point sont définies ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner); //--- définit le symbole ObjectSetString(chart_ID,name,OBJPROP_SYMBOL,symbol); //--- définit la période ObjectSetInteger(chart_ID,name,OBJPROP_PERIOD,period); //--- définit l'échelle ObjectSetInteger(chart_ID,name,OBJPROP_CHART_SCALE,scale); //--- affiche (true) ou cache (false) l'échelle des heures ObjectSetInteger(chart_ID,name,OBJPROP_DATE_SCALE,date_scale); //--- affiche (true) ou cache (false) l'échelle des prix ObjectSetInteger(chart_ID,name,OBJPROP_PRICE_SCALE,price_scale); //--- définit la couleur de la bordure lorsque le mode de mise en surbrillance de l'objet est activé ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); //--- définit le style de ligne de la bordure lorsque le mode de mise en surbrillance de l'objet est activé ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); //--- définit la taille du point d'ancrage pour déplacer un objet ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,point_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 l'étiquette par la souris ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); //--- 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); } //+----------------------------------------------------------------------------------------------------+ //| Définit le symbole et la période de l'objet Graphique | //+----------------------------------------------------------------------------------------------------+ bool ObjectChartSetSymbolAndPeriod(const long chart_ID=0, // identifiant du graphique (not Chart object's one) const string name="Chart", // nom de l'objet const string symbol="EURUSD", // symbole const ENUM_TIMEFRAMES period=PERIOD_H1) // période { //--- réinitialise la valeur d'erreur ResetLastError(); //--- définit le symbole et la période de l'objet Graphique if(!ObjectSetString(chart_ID,name,OBJPROP_SYMBOL,symbol)) { Print(__FUNCTION__, " : échec de sélection du symbole pour l'objet \"Graphique\" ! Code d'erreur = ",GetLastError()); return(false); } if(!ObjectSetInteger(chart_ID,name,OBJPROP_PERIOD,période)) { Print(__FUNCTION__, ": échec de sélection de la période pour l'objet \"Graphique\" ! Code d'erreur = ",GetLastError()); return(false); } //--- exécution réussie return(true); } //+----------------------------------------------------------------------------------------------------+ //| Déplace l'objet Graphique | //+----------------------------------------------------------------------------------------------------+ bool ObjectChartMove(const long chart_ID=0, // identifiant du graphique (not Chart object's one) const string name="Chart", // nom de l'objet const int x=0, // Coordonnée X const int y=0) // Coordonnée Y { //--- réinitialise la valeur d'erreur ResetLastError(); //--- déplace l'objet if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x)) { Print(__FUNCTION__, " : échec du déplacement de la coordonnée X de l'objet \"Graphique\" ! Code d'erreur = ",GetLastError()); return(false); } if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y)) { Print(__FUNCTION__, " : échec du déplacement de la coordonnée Y de l'objet \"Graphique\" ! Code d'erreur = ",GetLastError()); return(false); } //--- exécution réussie return(true); } //+----------------------------------------------------------------------------------------------------+ //| Change la taille de l'objet Graphique | //+----------------------------------------------------------------------------------------------------+ bool ObjectChartChangeSize(const long chart_ID=0, // identifiant du graphique (not Chart object's one) const string name="Chart", // nom de l'objet const int width=300, // largeur const int height=200) // hauteur { //--- réinitialise la valeur d'erreur ResetLastError(); //--- modifie la taille de l'objet if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width)) { Print(__FUNCTION__, " : échec du changement de largeur de l'objet \"Graphique\" ! Code d'erreur = ",GetLastError()); return(false); } if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height)) { Print(__FUNCTION__, " : échec du changement de hauteur de l'objet \"Graphique\" ! Code d'erreur = ",GetLastError()); return(false); } //--- exécution réussie return(true); } //+----------------------------------------------------------------------------------------------------+ //| Retourne l'identifiant de l'objet Graphique | //+----------------------------------------------------------------------------------------------------+ long ObjectChartGetID(const long chart_ID=0, // identifiant du graphique (not Chart object's one) const string name="Chart") // nom de l'objet { //--- prépare la variable pour récupérer l'identifiant de l'objet Graphique long id=-1; //--- réinitialise la valeur d'erreur ResetLastError(); //--- récupère l'identifiant if(!ObjectGetInteger(chart_ID,name,OBJPROP_CHART_ID,0,id)) { Print(__FUNCTION__, " : échec de récupération de l'identifiant de l'objet \"Graphique\" ! Code d'erreur = ",GetLastError()); } //--- retourne le résultat return(id); } //+----------------------------------------------------------------------------------------------------+ //| Supprime l'objet Graphique | //+----------------------------------------------------------------------------------------------------+ bool ObjectChartDelete(const long chart_ID=0, // identifiant du graphique (not Chart object's one) const string name="Chart") // nom de l'objet { //--- réinitialise la valeur d'erreur ResetLastError(); //--- supprime le bouton if(!ObjectDelete(chart_ID,name)) { Print(__FUNCTION__, " : échec de la suppression de l'objet \"Graphique\" ! Code d'erreur = ",GetLastError()); return(false); } //--- exécution réussie return(true); } //+----------------------------------------------------------------------------------------------------+ //| Fonction de démarrage du script | //+----------------------------------------------------------------------------------------------------+ void OnStart() { //--- récupère le nombre de symboles dans le Market Watch int symbols=SymbolsTotal(true); //--- vérife si le symbole ayant le nom spécifié est présent dans la liste des symboles bool exist=false; for(int i=0;i<symbols;i++) if(InpSymbol==SymbolName(i,true)) { exist=true; break; } if(!exist) { Print("Erreur ! Le symbole ",InpSymbol," n'existe pas dans le \"Market Watch\" !"); return; } //--- vérifie la validité des paramètres d'entrée if(InpScale<0 || InpScale>5) { Print("Erreur ! Valeurs incorrectes des paramètres d'entrée !"); return; } //--- taille de la fenêtre du graphique long x_distance; long y_distance; //--- définit la taille de la fenêtre if(!ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,x_distance)) { Print("Impossible d'obtenir la largeur du graphique ! Code d'erreur = ",GetLastError()); return; } if(!ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,y_distance)) { Print("Impossible d'obtenir la hauteur du graphique ! Code d'erreur = ",GetLastError()); return; } //--- définit les coordonnées et la taille de l'objet Graphique int x=(int)x_distance/16; int y=(int)y_distance/16; int x_size=(int)x_distance*7/16; int y_size=(int)y_distance*7/16; //--- crée l'objet Graphique if(!ObjectChartCreate(0,InpName,0,InpSymbol,InpPeriod,x,y,x_size,y_size,InpCorner,InpScale,InpDateScale, InpPriceScale,InpColor,InpStyle,InpPointWidth,InpBack,InpSelection,InpHidden,InpZOrder)) { return; } //--- redéssine le graphique et attend 1 seconde ChartRedraw(); Sleep(1000); //--- élargit l'objet Graphique int steps=(int)MathMin(x_distance*7/16,y_distance*7/16); for(int i=0;i<steps;i++) { //--- redimmensionnement x_size+=1; y_size+=1; if(!ObjectChartChangeSize(0,InpName,x_size,y_size)) return; //--- vérifie si l'exécution du script a été stoppée if(IsStopped()) return; //--- redessine le graphique et attend 0.01 seconde ChartRedraw(); Sleep(10); } //--- délai d'une demie seconde Sleep(500); //--- change la période du graphique if(!ObjectChartSetSymbolAndPeriod(0,InpName,InpSymbol,PERIOD_M1)) return; ChartRedraw(); //--- trois secondes de délai Sleep(3000); //--- supprime l'objet ObjectChartDelete(0,InpName); ChartRedraw(); //--- attente d'1 seconde Sleep(1000); //--- } |