//--- descrizione
#property description "Script creates \"Chart\" object."
//--- mostra la finestra dei parametri di input durante il lancio dello script
#property script_show_inputs
//--- parametri di input dello script
input string InpName="Chart"; // Nome dell'oggetto
input string InpSymbol="EURUSD"; // Simbolo
input ENUM_TIMEFRAMES InpPeriod=PERIOD_H1; // Periodo
input ENUM_BASE_CORNER InpCorner=CORNER_LEFT_UPPER; // Angolo di ancoraggio
input int InpScale=2; // Scala
input bool InpDateScale=true; // Mostra scala temporale
input bool InpPriceScale=true; // Mostra scala prezzo
input color InpColor=clrRed; // Colore del bordo quando evidenziato
input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Stile della linea quando evidenziata
input int InpPointWidth=1; // Grandezza punto da spostare
input bool InpBack=false; // Oggetto sottofondo
input bool InpSelection=true; // Evidanzia movimento
input bool InpHidden=true; // Nascosto nella lista oggetti
input long InpZOrder=0; // Priorità per il click del mouse
//+--------------------------------------------------------------------------------+
//| Crea l'oggetto Chart |
//+--------------------------------------------------------------------------------+
bool ObjectChartCreate(const long chart_ID=0, // ID del chart
const string name="Chart", // nome oggetto
const int sub_window=0, // indice sottofinestra
const string symbol="EURUSD", // simoblo
const ENUM_TIMEFRAMES period=PERIOD_H1, // periodo
const int x=0, // coordinate X
const int y=0, // coordinate Y
const int width=300, // spessore
const int height=200, // altezza
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // angolo di ancoraggio
const int scale=2, // scala
const bool date_scale=true, // mostra scala temporale
const bool price_scale=true, // mostra scala prezzo
const color clr=clrRed, // colore del bordo quando evidenziato
const ENUM_LINE_STYLE style=STYLE_SOLID, // stile della 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 dalla lista oggetti
const long z_order=0) // priorità per il click del mouse
{
//--- resetta il valore dell' errore
ResetLastError();
//--- crea l'oggetto Chart
if(!ObjectCreate(chart_ID,name,OBJ_CHART,sub_window,0,0))
{
Print(__FUNCTION__,
": fallimento nel creare l'oggetto \"Chart\"! Error code = ",GetLastError());
return(false);
}
//--- imposta le coordinate dell'oggetto
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- imposta la grandezza dell'oggetto
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- imposta l'angolo del chart, relativo a quali punti coordinate vengono definiti
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- imposta il simbolo
ObjectSetString(chart_ID,name,OBJPROP_SYMBOL,symbol);
//--- imposta il periodo
ObjectSetInteger(chart_ID,name,OBJPROP_PERIOD,period);
//--- imposta la scala
ObjectSetInteger(chart_ID,name,OBJPROP_CHART_SCALE,scale);
//--- mostra (true) o nascondi (false) la scala temporale
ObjectSetInteger(chart_ID,name,OBJPROP_DATE_SCALE,date_scale);
//--- mostra (true) o nascondi (false) la scala prezzo
ObjectSetInteger(chart_ID,name,OBJPROP_PRICE_SCALE,price_scale);
//--- 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 il simoboli ed il timeframe per l'oggetto del Chart |
//+--------------------------------------------------------------------------------+
bool ObjectChartSetSymbolAndPeriod(const long chart_ID=0, // ID del chart (non quello dell'oggetto Chart)
const string name="Chart", // nome dell'oggetto
const string symbol="EURUSD", // simbolo
const ENUM_TIMEFRAMES period=PERIOD_H1) // time frame
{
//--- resetta il valore dell' errore
ResetLastError();
//--- imposta il simobolo e timeframe dell'oggetto Chart
if(!ObjectSetString(chart_ID,name,OBJPROP_SYMBOL,symbol))
{
Print(__FUNCTION__,
": fallimento nell'impostare un simbolo per l'oggetto \"Chart\"! Error code = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_PERIOD,period))
{
Print(__FUNCTION__,
": fallimento nell'impostare un periodo per l'oggetto \"Chart\"! Error code = ",GetLastError());
return(false);
}
//--- esecuzione avvenuta
return(true);
}
//+--------------------------------------------------------------------------------+
//| Sposta l'oggetto Chart |
//+--------------------------------------------------------------------------------+
bool ObjectChartMove(const long chart_ID=0, // ID del Chart (non quello dell'oggetto Chart)
const string name="Chart", // nome dell'oggetto
const int x=0, // coordinate X
const int y=0) // coordinate Y
{
//--- resetta il valore dell' errore
ResetLastError();
//--- sposta l'oggetto
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))
{
Print(__FUNCTION__,
": fallimento nello spostare le coordinate X dell'oggetto \"Chart\"! Error code = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))
{
Print(__FUNCTION__,
": fallimento nello spostare le coordinate Y dell'oggetto \"Chart\"! Error code = ",GetLastError());
return(false);
}
//--- esecuzione avvenuta
return(true);
}
//+--------------------------------------------------------------------------------+
//| Cambia la grandezza dell'oggetto Chart |
//+--------------------------------------------------------------------------------+
bool ObjectChartChangeSize(const long chart_ID=0, // ID del chart (non quello dell'oggetto Chart)
const string name="Chart", // nome dell'oggetto
const int width=300, // spessore
const int height=200) // altezza
{
//--- resetta il valore dell' errore
ResetLastError();
//--- cambia la grandezza dell'oggetto
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width))
{
Print(__FUNCTION__,
": fallimento nel cambiare lo spessore dell'oggetto \"Chart\"! Error code = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height))
{
Print(__FUNCTION__,
": fallimento nel cambiare l'altezza dell'oggetto \"Chart\"! Error code = ",GetLastError());
return(false);
}
//--- esecuzione avvenuta
return(true);
}
//+--------------------------------------------------------------------------------+
//| Restituisce l'ID dell'oggetto Chart |
//+--------------------------------------------------------------------------------+
long ObjectChartGetID(const long chart_ID=0, // ID del chart (non quello dell'oggetto Chart)
const string name="Chart") // nome dell'oggetto
{
//--- prepara la variabile per ottenere l'ID dell'oggetto Chart
long id=-1;
//--- resetta il valore dell' errore
ResetLastError();
//--- ottiene l' ID
if(!ObjectGetInteger(chart_ID,name,OBJPROP_CHART_ID,0,id))
{
Print(__FUNCTION__,
": fallimento nell'ottenere l'ID dell'oggetto \"Chart\"! Error code = ",GetLastError());
}
//--- restituisce il risultato
return(id);
}
//+--------------------------------------------------------------------------------+
//| Elimina l'oggetto Chart |
//+--------------------------------------------------------------------------------+
bool ObjectChartDelete(const long chart_ID=0, // ID del chart (non quello dell'oggetto Chart)
const string name="Chart") // nome dell'oggetto
{
//--- resetta il valore dell' errore
ResetLastError();
//--- elimina il bottone
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": fallimento nell'eliminare l'oggetto \"Chart\"! Error code = ",GetLastError());
return(false);
}
//--- esecuzione avvenuta
return(true);
}
//+--------------------------------------------------------------------------------+
//| Funzione di avvio del programma Script |
//+--------------------------------------------------------------------------------+
voidOnStart()
{
//--- ottiene il numero di simboli nel Market Watch
int symbols=SymbolsTotal(true);
//--- controlla se il simbolo con un nome specificato è presente nell'elenco dei simboli
bool exist=false;
for(int i=0;i<symbols;i++)
if(InpSymbol==SymbolName(i,true))
{
exist=true;
break;
}
if(!exist)
{
Print("Error! ",InpSymbol," il simbolo non è presente nel \"Market Watch\"!");
return;
}
//--- controlla la validità dei parametri di input
if(InpScale<0 || InpScale>5)
{
Print("Error! Valori non corretti dei parametri di input!");
return;
}
//--- grandezza della finestra chart
long x_distance;
long y_distance;
//--- imposta la grandezza della finestra
if(!ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,x_distance))
{
Print("Fallimento nell'ottenere la grandezza del chart! Error code = ",GetLastError());
return;
}
if(!ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,y_distance))
{
Print("Fallimento nell'ottenere l'altezza del chart! Error code = ",GetLastError());
return;
}
//--- imposta le coordinate dell'oggetto Chart e la sua grandezza
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;
//--- crea l'oggetto Chart
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;
}
//--- redisegna il chart ed attende per 1 secondo
ChartRedraw();
Sleep(1000);
//--- distende l'oggetto Chart
int steps=(int)MathMin(x_distance*7/16,y_distance*7/16);
for(int i=0;i<steps;i++)
{
//--- resize
x_size+=1;
y_size+=1;
if(!ObjectChartChangeSize(0,InpName,x_size,y_size))
return;
//--- controlla se l'operazione dello script è stata disabilitata per forza
if(IsStopped())
return;
//--- ridisegna il chart ed attende 0.01 secondi
ChartRedraw();
Sleep(10);
}
//--- ritardo di mezzo secondo
Sleep(500);
//--- cambia il timeframe del chart
if(!ObjectChartSetSymbolAndPeriod(0,InpName,InpSymbol,PERIOD_M1))
return;
ChartRedraw();
//--- tre secondi di ritardo
Sleep(3000);
//--- elimina l'oggetto
ObjectChartDelete(0,InpName);
ChartRedraw();
//--- aspetta per 1 secondo
Sleep(1000);
//---
}
|