//--- descrizione #property description "Gli Script creano un bitmap nella finestra del chart." //--- mostra la finestra dei parametri di input durante il lancio dello script #property script_show_inputs //--- parametri di input dello script input string InpFile="\\Images\\dollar.bmp"; // Nome del file del Bitmap input int InpWidth=24; // Ambito di visibilità, coordinate X input int InpHeight=24; // Ambito di visibilità, coordinate Y input int InpXOffset=4; // Ambito di visibilità, slittamento sull'asse X input int InpYOffset=4; // Ambito di visibilità, slittamento sull'asse Y input color InpColor=clrRed; // Colore del bordo quando evidenziato input ENUM_LINE_STYLE InpStyle=STYLE_SOLID; // Stile della linea quando viene evidenziata input int InpPointWidth=1; // Grandezza punto da muovere input bool InpBack=false; // Oggetto di sottofondo input bool InpSelection=false; // Evidenzia di movimento input bool InpHidden=true; // Nascosto nella lista oggetti input long InpZOrder=0; // Priorità per il click del mouse //+--------------------------------------------------------------------------------+ //| Crea un bitmap nella finestra chart | //+--------------------------------------------------------------------------------+ bool BitmapCreate(const long chart_ID=0, // ID del chart const string name="Bitmap", // nome del bitmap const int sub_window=0, // indice sottofinestra datetime time=0, // orario punto di ancoraggio double price=0, // prezzo punto di ancoraggio const string file="", // nome del file bitmap const int width=10, // ambito di visibilità coordinate X const int height=10, // ambito di visibilità coordinate Y const int x_offset=0, // ambito di visibilità, slittamento sull' asse X const int y_offset=0, // ambito di visibilità, slittamento sull' asse Y const color clr=clrRed, // colore del bordo quando evidenziato const ENUM_LINE_STYLE style=STYLE_SOLID, //stile linea quando evidenziata const int point_width=1, // grandezza del punto di spostamento const bool back=false, // in sottofondo const bool selection=false, // evidenzia movimento const bool hidden=true, // nascosto nella lista oggetti const long z_order=0) // priorità per il click del mouse { //--- imposta coordinate punto di ancoraggio se non sono impostate ChangeBitmapEmptyPoint(time,price); //--- resetta il valore dell' errore ResetLastError(); //--- crea un bitmap if(!ObjectCreate(chart_ID,name,OBJ_BITMAP,sub_window,time,price)) { Print(__FUNCTION__, ": fallimento nel creare un bitmap nella finestra del chart! Error code = ",GetLastError()); return(false); } //--- imposta il percorso al file dell'immagine if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,file)) { Print(__FUNCTION__, ": fallimento nel caricare l'immagine! Error code = ",GetLastError()); return(false); } //--- imposta ambito di visibilità per l'immagine; se i valori dello spessore o dell'altezza //--- eccedono lo spessore e l'altezza(rispettivamente) di un'immagine sorgente, //--- essa non viene disegnata; in caso contrario //--- solo la parte corrispondente di questi valori viene disegnata ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width); ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height); //--- imposta la parte di un'immagine che dev'essere visualizzata nell'ambito visibilità //--- la parte di default è la parte superiore sinistra dell'immagine; i valori permettono //--- di eseguire uno slittamento da quest' area visualizzando un'altra parte dell'immagine ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset); ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset); //--- imposta il colore del bordo quando è abilitata la modalità di evidenziazione ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); //--- imposta lo stile del bordo della linea quando la modalità di evidenzia dell'oggetto è abilitata ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); //--- imposta la grandezza di un punto di ancoraggio per lo spostamento di un oggetto ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,point_width); //--- mostra in primo piano (false) o sottofondo (true) ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); //--- abilita (true) o disabilita (false) il modo di spostamento dell'etichetta con il mouse ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); //--- nascondi (true) o mostra (falso) il nome di oggetto grafico nella lista degli oggetti ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); //--- imposta la priorità per ricevere l'evento di un clic del mouse nel grafico ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); //--- esecuzione avvenuta return(true); } //+--------------------------------------------------------------------------------+ //| Imposta una nuova immagine per il bitmap | //+--------------------------------------------------------------------------------+ bool BitmapSetImage(const long chart_ID=0, // ID del chart const string name="Bitmap", // nome del bitmap const string file="") // percorso del file { //--- resetta il valore dell' errore ResetLastError(); //--- imposta il percorso al file dell'immagine if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,file)) { Print(__FUNCTION__, ": fallimento nel caricare l'immagine! Error code = ",GetLastError()); return(false); } //--- esecuzione avvenuta return(true); } //+--------------------------------------------------------------------------------+ //| Sposta un bitmap nella finestra del chart | //+--------------------------------------------------------------------------------+ bool BitmapMove(const long chart_ID=0, // ID del chart const string name="Bitmap", // nome del bitmap datetime time=0, // orario del punto di ancoraggio double price=0) // prezzo del punto di ancoraggio { //--- se il punto della posizione non è impostato, spostarlo nella barra corrente che ha il prezzo Bid if(!time) time=TimeCurrent(); if(!price) price=SymbolInfoDouble(Symbol(),SYMBOL_BID); //--- resetta il valore dell' errore ResetLastError(); //--- sposta il punto di ancoraggio if(!ObjectMove(chart_ID,name,0,time,price)) { Print(__FUNCTION__, ": fallimento nello spostare il punto di ancoraggio! Error code = ",GetLastError()); return(false); } //--- esecuzione avvenuta return(true); } //+--------------------------------------------------------------------------------+ //| Cambia la grandezza dell'ambito visibilità (bitmap) | //+--------------------------------------------------------------------------------+ bool BitmapChangeSize(const long chart_ID=0, // ID del chart const string name="Bitmap", // nome del bitmap const int width=0, // spessore del bitmap const int height=0) // altezza del bitmap { //--- resetta il valore dell' errore ResetLastError(); //--- cambia la grandezza del bitmap if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width)) { Print(__FUNCTION__, ": fallimento nel cambiare lo spessore del bitmap! Error code = ",GetLastError()); return(false); } if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height)) { Print(__FUNCTION__, ": fallimento nel cambiare l'altezza del bitmap! Error code = ",GetLastError()); return(false); } //--- esecuzione avvenuta return(true); } //+----------------------------------------------------------------------------------+ //| Cambia le coordinate dell'angolo superiore sinistro dell'ambito di visibilità | //+----------------------------------------------------------------------------------+ bool BitmapMoveVisibleArea(const long chart_ID=0, // ID del chart const string name="Bitmap", // nome del bitmap const int x_offset=0, // ambito di visibilità coordinate X const int y_offset=0) // ambito di visibilità coordinate Y { //--- resetta il valore dell' errore ResetLastError(); //--- cambia le coordinate dell'ambito di visibilità if(!ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset)) { Print(__FUNCTION__, ": fallimento nel cambiare le coordinate X dell'ambito di visibilità! Error code = ",GetLastError()); return(false); } if(!ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset)) { Print(__FUNCTION__, ": fallimento nel cambiare le coordinate Y dell'ambito di visibilità! Error code = ",GetLastError()); return(false); } //--- esecuzione avvenuta return(true); } //+--------------------------------------------------------------------------------+ //| Elimina il bitmap | //+--------------------------------------------------------------------------------+ bool BitmapDelete(const long chart_ID=0, // ID del chart const string name="Bitmap") // nome del bitmap { //--- resetta il valore dell' errore ResetLastError(); //--- elimina l'etichetta if(!ObjectDelete(chart_ID,name)) { Print(__FUNCTION__, ": fallimento nell'eliminazione del bitmap! Error code = ",GetLastError()); return(false); } //--- esecuzione avvenuta return(true); } //+--------------------------------------------------------------------------------+ //| Controlla i valori di punto di ancoraggio ed imposta i valori di default | //| per quelli vuoti | //+--------------------------------------------------------------------------------+ void ChangeBitmapEmptyPoint(datetime &time,double &price) { //--- se il tempo del punto non è impostato, sarà sulla barra corrente if(!time) time=TimeCurrent(); //--- se il prezzo del punto non è impostato, avrà un valore Bid if(!price) price=SymbolInfoDouble(Symbol(),SYMBOL_BID); } //+--------------------------------------------------------------------------------+ //| Funzione di avvio del programma Script | //+--------------------------------------------------------------------------------+ voidOnStart() { datetime date[]; // array per memorizzare le date delle barre visibili double close[]; // array per memorizzare i prezzi Close //--- nome del file bitmap string file="\\Images\\dollar.bmp"; //--- Numero di barre visibili nella finestra del chart int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS); //--- allocazione della memoria ArrayResize(date,bars); ArrayResize(close,bars); //--- riempie l'array delle date ResetLastError(); if(CopyTime(Symbol(),Period(),0,bars,date)==-1) { Print("Fallimento nella copia dei valori tempo! Error code = ",GetLastError()); return; } //--- riempie l'array dei prezzi Close if(CopyClose(Symbol(),Period(),0,bars,close)==-1) { Print("Fallimento nel copiare i valori dei prezzi Close! Error code = ",GetLastError()); return; } //--- definisce quanto spesso devono essere visualizzate le immagini int scale=(int)ChartGetInteger(0,CHART_SCALE); //--- definisce lo step 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; } //--- crea bitmap per valori High e Low delle barre (con i gap) for(int i=0;i<bars;i+=step) { //--- crea i 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; } //--- controlla se l'operazione dello script è stata disabilitata per forza if(IsStopped()) return; //--- ridisegna il chart ChartRedraw(); // 0.05 secondi di ritardo Sleep(50); } //--- ritardo di mezzo secondo Sleep(500); //--- elimina il segno Sell for(int i=0;i<bars;i+=step) { if(!BitmapDelete(0,"Bitmap_"+(string)i)) return; if(!BitmapDelete(0,"Bitmap_"+(string)i)) return; //--- ridisegna il chart ChartRedraw(); // 0.05 secondi di ritardo Sleep(50); } //--- } |