//--- description
#property description "Le script crée un bitmap dans la fenêtre du 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 InpFile="\\Images\\dollar.bmp"; // Nom du fichier Bitmap
input int InpWidth=24; // Coordonnée X de la zone visible
input int InpHeight=24; // Coordonnée Y de la zone visible
input int InpXOffset=4; // Décalage de la zone visible sur l'axe X
input int InpYOffset=4; // Décalage de la zone visible sur l'axe Y
input color InpColor=clrRed; // Couleur de la bordure au moment de la surbrillance
input ENUM_LINE_STYLE InpStyle=STYLE_SOLID; // Style de ligne au moment de la surbrillance
input int InpPointWidth=1; // Taille du point à déplacer
input bool InpBack=false; // Objet en arrière-plan
input bool InpSelection=false; // Mise en surbrillance pour déplacer
input bool InpHidden=true; // Cahcé dans la liste des objets
input long InpZOrder=0; // Priorité du clic de souris
//+----------------------------------------------------------------------------------------------------+
//| Crée une bitmap dans la fenêtre du graphique |
//+----------------------------------------------------------------------------------------------------+
bool BitmapCreate(const long chart_ID=0, // identifiant du graphique
const string name="Bitmap", // nom du bitmap
const int sub_window=0, // indice de sous-fenêtre
datetime time=0, // heure du point d'ancrage
double price=0, // prix du point d'ancrage
const string file="", // nom du fichier bitmap
const int width=10, // Coordonnée X de la zone visible
const int height=10, // Coordonnée Y de la zone visible
const int x_offset=0, // Décalage de la zone visible sur l'axe X
const int y_offset=0, // Décalage de la zone visible sur l'axe Y
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, // taille du point de déplacement
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
{
//--- Définit les coordonnées du point d'ancrage si elles ne sont pas définies
ChangeBitmapEmptyPoint(time,price);
//--- réinitialise la valeur d'erreur
ResetLastError();
//--- crée une bitmap
if(!ObjectCreate(chart_ID,name,OBJ_BITMAP,sub_window,time,price))
{
Print(__FUNCTION__,
" : n'a pas réussi à créer une bitmap dans la fenêtre du graphique ! Code d'erreur = ",GetLastError());
return(false);
}
//--- définit le chemin d'accès au fichier image
if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,file))
{
Print(__FUNCTION__,
" : impossible de charger l'image ! Code d'erreur = ",GetLastError());
return(false);
}
//--- définit la zone visible de l'omage ; si la largeur et la hauteur
//--- excèdent la largeur et la hauteur (respectivement) d'une image source,
//--- elle n'est pas dessinée ; dans le cas opposé,
//--- seule la partie correspondant à ces valeurs sera dessinée
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- définit la partie d'une image à afficher dans la zone visible
//--- la partie par défaut est la partie supérieure gauche de l'image ; les valeurs permettent
//--- d'effectuer un décalage de cette zone pour afficher une autre partie de l'image
ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset);
ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset);
//--- 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 une nouvelle image pour le bitmap |
//+----------------------------------------------------------------------------------------------------+
bool BitmapSetImage(const long chart_ID=0, // identifiant du graphique
const string name="Bitmap", // nom du bitmap
const string file="") // chemin vers le fichier
{
//--- réinitialise la valeur d'erreur
ResetLastError();
//--- définit le chemin d'accès au fichier image
if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,file))
{
Print(__FUNCTION__,
" : impossible de charger l'image ! Code d'erreur = ",GetLastError());
return(false);
}
//--- exécution réussie
return(true);
}
//+----------------------------------------------------------------------------------------------------+
//| Déplace une image bitmap dans la fenêtre du graphique |
//+----------------------------------------------------------------------------------------------------+
bool BitmapMove(const long chart_ID=0, // identifiant du graphique
const string name="Bitmap", // nom du bitmap
datetime time=0, // heure du point d'ancrage
double price=0) // prix du point d'ancrage
{
//--- si la position du point n'est pas définie, le déplace vers la barre courante du prix Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- réinitialise la valeur d'erreur
ResetLastError();
//--- déplace le point d'ancrage
if(!ObjectMove(chart_ID,name,0,time,price))
{
Print(__FUNCTION__,
" : impossible de déplacer le point d'ancrage ! Code d'erreur = ",GetLastError());
return(false);
}
//--- exécution réussie
return(true);
}
//+----------------------------------------------------------------------------------------------------+
//| Change la taille de la zone visible (bitmap) |
//+----------------------------------------------------------------------------------------------------+
bool BitmapChangeSize(const long chart_ID=0, // identifiant du graphique
const string name="Bitmap", // nom du bitmap
const int width=0, // largeur du bitmap
const int height=0) // hauteur du bitmap
{
//--- réinitialise la valeur d'erreur
ResetLastError();
//--- change la taille du bitmap
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width))
{
Print(__FUNCTION__,
" : impossible de modifier la largeur du bitmap ! Code d'erreur = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height))
{
Print(__FUNCTION__,
": n'a pas réussi à modifier la hauteur du bitmap ! Code d'erreur = ",GetLastError());
return(false);
}
//--- exécution réussie
return(true);
}
//+--------------------------------------------------------------------------------+
//| Change les coordonnées du coin supérieur gauche de la zone visible |
//+--------------------------------------------------------------------------------+
bool BitmapMoveVisibleArea(const long chart_ID=0, // identifiant du graphique
const string name="Bitmap", // nom du bitmap
const int x_offset=0, // Coordonnée X de la zone visible
const int y_offset=0) // Coordonnée Y de la zone visible
{
//--- réinitialise la valeur d'erreur
ResetLastError();
//--- change les coordonnées de la zone visible de l'image
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset))
{
Print(__FUNCTION__,
" : échec du changement de la coordonnée X de la zone visible ! Code d'erreur = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset))
{
Print(__FUNCTION__,
" : échec du changement de la coordonnée Y de la zone visible ! Code d'erreur = ",GetLastError());
return(false);
}
//--- exécution réussie
return(true);
}
//+----------------------------------------------------------------------------------------------------+
//| Supprime un bitmap |
//+----------------------------------------------------------------------------------------------------+
bool BitmapDelete(const long chart_ID=0, // identifiant du graphique
const string name="Bitmap") // nom du bitmap
{
//--- réinitialise la valeur d'erreur
ResetLastError();
//--- supprime l'étiquette
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
" : n'a pas réussi à supprimer le bitmap ! Code d'erreur = ",GetLastError());
return(false);
}
//--- exécution réussie
return(true);
}
//+----------------------------------------------------------------------------------------------------+
//| Vérifie les valeurs du point d'ancrage et définit les valeurs par défaut |
//| pour les points vides |
//+----------------------------------------------------------------------------------------------------+
void ChangeBitmapEmptyPoint(datetime &time,double &price)
{
//--- si l'heure du point n'est pas définie, elle sera sur la barre courante
if(!time)
time=TimeCurrent();
//--- si le prix du point n'est pas défini, il aura la valeur Bid
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
//+----------------------------------------------------------------------------------------------------+
//| Fonction de démarrage du script |
//+----------------------------------------------------------------------------------------------------+
void OnStart()
{
datetime date[]; // tableau pour stocker les dates des barres visibles
double close[]; // tableau pour le stockage des prix de Clôture
//--- nom du fichier bitmap
string file="\\Images\\dollar.bmp";
//--- nombre de barres visibles dans la fenêtre du graphique
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- allocation mémoire
ArrayResize(date,bars);
ArrayResize(close,bars);
//--- remplit le tableau de dates
ResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("N'a pas réussi à copier les valeurs de l'heure ! Code d'erreur = ",GetLastError());
return;
}
//--- remplit le tableau des prix de Clôture
if(CopyClose(Symbol(),Period(),0,bars,close)==-1)
{
Print("Impossible de copier les valeurs des prix de Clôture ! Code d'erreur = ",GetLastError());
return;
}
//--- définit à quelle fréquence les images doivent être affichées
int scale=(int)ChartGetInteger(0,CHART_SCALE);
//--- définit le pas
int step=1;
switch(scale)
{
case 0:
step=27;
break;
case 1:
step=14;
break;
case 2:
step=7;
break;
case 3:
step=4;
break;
case 4:
step=2;
break;
}
//--- crée les bitmaps pour les valeurs High et Low des barres (avec les gaps)
for(int i=0;i<bars;i+=step)
{
//--- crée les bitmaps
if(!BitmapCreate(0,"Bitmap_"+(string)i,0,date[i],close[i],InpFile,InpWidth,InpHeight,InpXOffset,
InpYOffset,InpColor,InpStyle,InpPointWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- vérifie si l'exécution du script a été stoppée
if(IsStopped())
return;
//--- redessine le graphique
ChartRedraw();
// délai de 0,05 secondes
Sleep(50);
}
//--- délai d'une demie seconde
Sleep(500);
//--- supprime les signaux de Vente
for(int i=0;i<bars;i+=step)
{
if(!BitmapDelete(0,"Bitmap_"+(string)i))
return;
if(!BitmapDelete(0,"Bitmap_"+(string)i))
return;
//--- redessine le graphique
ChartRedraw();
// délai de 0,05 secondes
Sleep(50);
}
//---
}
|