I'll get back to you once I have tried it out.
Cheers
MQL4 Coding and Fractal EA for you 14 replies
In mql4 how do you set it so it only allows one open position? 3 replies
Drawing Objects in MQL 6 replies
MQL4 Language Most Recent Version is it updated beyond the tutorial on the mql4 websi 6 replies
DislikedWhat about this one?
[php]
//+------------------------------------------------------------------+
//|...Ignored
if(GlobalVariableCheck(WindowExpertName()+Symbol()+"Time_1")) time1 = GlobalVariableGet(WindowExpertName()+Symbol()+"Time_1"); //change time if globvar exist if(GlobalVariableCheck(WindowExpertName()+Symbol()+"Time_2")) time2 = GlobalVariableGet(WindowExpertName()+Symbol()+"Time_2"); . . .
//+------------------------------------------------------------------+
//| BarCountTest.mq4 |
//| Copyright © 2011, One day! |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, One day!"
#property link ""
#property indicator_chart_window
// EXPLANATORY COMMENTS
//=======================================================
extern color clrLineColour = Gray; // Default line colour.
extern int intFontSize = 11; // Default font size.
extern int intLineWeight = 1; // Default line width.
string strOriginBar = "BarCount"; // Constant value for the name of the origin bar. Do not change this!
string strName = "BCL:"; // Constant value for first part of the name of all vertical line objects, except the origin
datetime dteOldTime; // Represents the last time value
datetime dteNewTime; // Used to find the current time value of the origin bar
int intTimeFrame; // Store the value for the current chart timeframe
int i,j,k; // Used as loop controls
int A_intTest[32] = {11,22,33,45,56,67,79,90,101,112,123,135,
146,157,168,180,191,202,213,225,236,247,
258,270,281,292,303,315,326,337,348,360}; // Array of integers to use in testing
int init(){
if(ObjectFind(strOriginBar) == -1){ // If the bar is not on the chart, objectfind will return -1
Alert("Origin bar cannot be located!"); // If the returned value was -1 then the alert user
}else{
//Alert("Origin bar has been located!"); // If the returned value wasn't -1 then the alert user
intTimeFrame = Period(); // Initialise the period function and store the result
dteOldTime = ObjectGet(strOriginBar,OBJPROP_TIME1); // Find the time value of the bar;
UDF_DeleteCounts();
UDF_DrawCounts(dteOldTime,intTimeFrame); // Call the user defined function to draw the vertical lines
} // End of if statement
return(0);
}
int deinit(){
UDF_DeleteCounts(); // Delete all of the lines created by the indicator
return(0);
}
int start(){
if(ObjectFind(strOriginBar) != -1){ // If the bar is not on the chart, objectfind will return -1
dteNewTime = ObjectGet(strOriginBar,OBJPROP_TIME1); // If the returned value wasn't -1 then the bar exists and the time value is stored
if(dteOldTime != dteNewTime){ // If different then...
dteOldTime = dteNewTime; // Store the new value then...
UDF_DeleteCounts(); // Delete the current lines then...
UDF_DrawCounts(dteOldTime,intTimeFrame); // Draw them in the new locations
}
}
return(0);
}
//================================================================================================================================================
// User defined functions
//================================================================================================================================================
/* UDF to draw the vertical bars
Arguements:
intOriginTime = the datetime value of the opening of the origin bar
intTF = the integer value of the current timeframe
*/
//================================================================================================================================================
void UDF_DrawCounts(int intOriginTime, int intTF){
int intIndex; // Store the index number of the bar
int intCurrArrayValue; // Used for storing the array value during the for loop
int intBarCount; // Used to count up from zero and compare with array values
int intElementCount; // Used for counting through the array elements
datetime dteNextTime; // Store the time value of a bar in the loop
string strCaption; // Label description for each bar
intBarCount = 0; // Starts at zero. The index of the first element in the array is also 0
intElementCount = 0; // Starts at zero - the first element in the array
intIndex = iBarShift(Symbol(),0,intOriginTime,true); // The bars index position can then be determined and stored
for(i = intIndex; i >= 0; i--){ // Start of main loop to decrement from the origin location
intCurrArrayValue = A_intTest[intElementCount]; // Store array value
if(intBarCount == intCurrArrayValue){ // Check if the bar count matches the current array value
dteNextTime = iTime(Symbol(),intTF,i); // Find the time value for the current bar in the sequence
strCaption = StringConcatenate("Count: ",intBarCount); // Form the caption to appear as the description label
ObjectCreate (strName + i,OBJ_VLINE,0,dteNextTime,0); // Create a line...
ObjectSetText (strName + i,strCaption,intFontSize,"Tahoma",clrLineColour); // Add a caption to it...
ObjectSet (strName + i,OBJPROP_COLOR,clrLineColour); // Set the colour of the line...
ObjectSet (strName + i,OBJPROP_WIDTH,intLineWeight); // Set the thickness of the line
intElementCount ++; // Add 1 to the element count to read the next value
}
intBarCount ++; // Add one to the bar count
} // End of for loop
WindowRedraw();
}
//================================================================================================================================================
// UDF to delete the vertical bars
//================================================================================================================================================
void UDF_DeleteCounts(){
int j; // Loop counter
int intObjTotal = ObjectsTotal(OBJ_VLINE) + 1; // Find all vertical line objects
string strObjRef; // Store object name
for(j = intObjTotal; j >=0; j--){ // Start for loop
strObjRef = ObjectName(j); // Define object
if(StringSubstr(strObjRef,0,4) == "BCL:"){ // If it contains: "BDC:" characters then...
ObjectDelete(strObjRef); // Delete it
} // end if
} // end for
WindowRedraw();
} DislikedAlthough the indicator is different, the issues are related so I haven't started a new thread.
The purpose of the attached indicator is to allow the user to mark out bar counts with vertical lines which are relative to an independent (added separately by the user) vertical line object named, "BarCount" (referred to below as the origin). The indicator monitors the location of this object and redraws the objects if a change in location is detected.
This all works as expected on the same timeframe, however, if I move the origin on a weekly...Ignored
int init(){
if(ObjectFind(strOriginBar) == -1){ // If the bar is not on the chart, objectfind will return -1
//Alert("Origin bar cannot be located!");
Alert("Origin bar cannot be located! Creating Now");
ObjectCreate (strOriginBar,OBJ_VLINE,0,Time[3],0);// If the returned value was -1 then the alert user
}
if(ObjectFind(strOriginBar) != -1){
//Alert("Origin bar has been located!"); // If the returned value wasn't -1 then the alert user
intTimeFrame = Period(); // Initialise the period function and store the result
dteOldTime = ObjectGet(strOriginBar,OBJPROP_TIME1); // Find the time value of the bar;
UDF_DeleteCounts();
UDF_DrawCounts(dteOldTime,intTimeFrame); // Call the user defined function to draw the vertical lines
} // End of if statement
return(0);
}