//--- 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);
}
//---
}
|