//--- descrizione #property description "Lo script disegna l'oggetto grafico \"Linea Verticale\" ." #property description "La data del punto di ancoraggio è impostata in percentuale dello" #property description "spessoore in barre della finestra chart." //--- mostra la finestra dei parametri di input durante il lancio dello script #property script_show_inputs //--- parametri di input dello script input string InpName="VLine"; // Nome della linea input int InpDate=25; // Data evento, % input color InpColor=clrRed; // Colore della Linea input ENUM_LINE_STYLE InpStyle=STYLE_DASH; // Stile della linea input int InpWidth=3; // Spessore della linea input bool InpBack=false; // Sottofondo linea input bool InpSelection=true; // Evdenzia movimento input bool InpRay=true; // Continuazione della linea verso il basso input bool InpHidden=true; // Nascosto nella lista oggetti input long InpZOrder=0; // Priorità per il click del mouse //+--------------------------------------------------------------------------------+ //| Crea la linea verticale | //+--------------------------------------------------------------------------------+ bool VLineCreate(const long chart_ID=0, // ID del chart const string name="VLine", // nome della linea const int sub_window=0, // indice sottofinestra datetime time=0, // orario della linea const color clr=clrRed, // colore della linea const ENUM_LINE_STYLE style=STYLE_SOLID, // stile della linea const int width=1, // spessore della linea const bool back=false, // in sottofondo const bool selection=true, // evidenzia movimento const bool ray=true, // continuazione della linea verso il basso const bool hidden=true, // nascosto nella lista oggetti const long z_order=0) // priorità per il click del mouse { //--- se l'orario non è impostato, lo disegna per mezzo dell'ultima barra if(!time) time=TimeCurrent(); //--- resetta il valore dell' errore ResetLastError(); //--- crea una linea verticale if(!ObjectCreate(chart_ID,name,OBJ_VLINE,sub_window,time,0)) { Print(__FUNCTION__, ": fallimento nel creare la linea verticale! Error code = ",GetLastError()); return(false); } //--- imposta colore della linea ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); //--- imposta lo stile della linea ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); //--- larghezza della linea ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width); //--- mostra in primo piano (false) o sottofondo (true) ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); //--- abilitare (true) o disabilitare (false) il modo di spostare la linea con freccia, con il mouse //--- quando si crea un oggetto grafico utilizzando la funzione ObjectCreate, l'oggetto non può esser //--- evidenziato e mosso, per default. All'interno di questo metodo, la selezione dei parametri //--- è true per default, il che consente di evidenziare e spostare l'oggetto ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); //--- abilita (true) o disabilita (false) il modo di visualizzazione della linea nella sottofinestra del chart ObjectSetInteger(chart_ID,name,OBJPROP_RAY,ray); //--- 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); } //+--------------------------------------------------------------------------------+ //| Sposta la linea verticale | //+--------------------------------------------------------------------------------+ bool VLineMove(const long chart_ID=0, // ID del chart const string name="VLine", // nome della linea datetime time=0) // orario della linea { //--- se l'orario della linea non è impostato, sposta la linea all'ultima barra if(!time) time=TimeCurrent(); //--- resetta il valore dell' errore ResetLastError(); //--- sposta la linea verticale if(!ObjectMove(chart_ID,name,0,time,0)) { Print(__FUNCTION__, ": fallimento nello spostare la linea verticale! Error code = ",GetLastError()); return(false); } //--- esecuzione avvenuta return(true); } //+--------------------------------------------------------------------------------+ //| Elimina la linea verticale | //+--------------------------------------------------------------------------------+ bool VLineDelete(const long chart_ID=0, // ID del chart const string name="VLine") // nome della linea { //--- resetta il valore dell' errore ResetLastError(); //--- elimina la linea verticale if(!ObjectDelete(chart_ID,name)) { Print(__FUNCTION__, ": fallimento nell'eliminare la linea verticale! Error code = ",GetLastError()); return(false); } //--- esecuzione avvenuta return(true); } //+--------------------------------------------------------------------------------+ //| Funzione di avvio del programma Script | //+--------------------------------------------------------------------------------+ voidOnStart() { //--- imposta la correttezza dei parametri di input if(InpDate<0 || InpDate>100) { Print("Error! Valori non corretti dei parametri di input!"); return; } //--- Numero di barre visibili nella finestra del chart int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS); //--- array per memorizzare i valori data che devono essere usati //--- per impostare e cambiare le coordinate del punto di ancoraggio della linea datetime date[]; //--- allocazione della memoria ArrayResize(date,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; } //--- definisce i punti per disegnare la linea int d=InpDate*(bars-1)/100; //--- crea una linea verticale if(!VLineCreate(0,InpName,0,date[d],InpColor,InpStyle,InpWidth,InpBack, InpSelection,InpRay,InpHidden,InpZOrder)) return; //--- redisegna il chart ed attende per 1 secondo ChartRedraw(); Sleep(1000); //--- ora, sposta la linea //---contatore del ciclo int h_steps=bars/2; //--- sposta la linea for(int i=0;i<h_steps;i++) { //--- usa il seguente valore if(d<bars-1) d+=1; //--- sposta il punto if(!VLineMove(0,InpName,date[d])) return; //--- controlla se l'operazione dello script è stata disabilitata per forza if(IsStopped()) return; //--- ridisegna il chart ChartRedraw(); // 0.03 secondi di ritardo Sleep(30); } //--- 1 secondo di ritardo Sleep(1000); //--- elimina il canale dal chart VLineDelete(0,InpName); ChartRedraw(); //--- 1 secondo di ritardo Sleep(1000); //--- } |